版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一 进程调度【目的要求】用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。【准备知识】1基本概念(1)进程的概念。(2)进程的状态和进程控制块。(3)进程调度算法。2进程调度(1)进程的状态。进程状态的转换如图10.1所示。运行就绪阻塞进程因某事件(如等待I/O完成)变成阻塞状态某事件被解除(I/O完成)时间片已用完进程调度程序把处理机分配给进程图10.1(2)进程的结构PCB。进程都是由一系列操作(动作)所组成,通过这些操作来完成其任务。因此,不同的进程,其内部操作也不相同。在操作系统中,描述一个进程除了需要程序和私有数据外,最主要的是需要一个与动态过程相联系
2、的数据结构,该数据结构用来描述进程的外部特性(名字、状态等)以及与其他进程的联系(通信关系)等信息,该数据结构称为进程控制块(Process Control Block,PCB)。进程控制块(PCB)与进程一一对应,PCB中记录了系统所需的全部信息、用于描述进程情况所需的全部信息和控制进程运行所需的全部信息。因此,系统可以通过进程的PCB来对进程进行管理。【实验内容】设计一个有N个进程并行的进程调度程序。 进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。每个进程由一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、
3、需要运行时间、已用CPU时间、进程状态等。进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W(Wait)、运行R(Run)或完成F(Finish)三种状态之一。就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤销该进程,如果运行一个时间片后进程的已占用CPU时间还未到达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
4、每进行一次调度程序都打印一次运行进程、就绪队列以及各个进程的PCB,以便进行检查。重复以上过程,直到所有进程都完成为止。调度算法的流程图如图10.2所示。开始初始化PCB,输入进程信息各进程按优先数从高到低排列结束就绪队列空?YN就绪队列首进程投入运行时间片到,运行进程已占用CPU时间+1已到达运行进程已占用CPU时间已达到所需的运行时间进程完成撤销该进程使运行进程的优先数减1把运行进程插入就绪队列图10.2 算法流程图进程调度源程序如下:jinchengdiaodu.cpp #include stdio.h #include #include #define getpch(type) (ty
5、pe*)malloc(sizeof(type) #define NULL 0 struct pcb /* 定义进程控制块PCB */ char name10; char state; int super; int ntime; int rtime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=0; if(ready=NULL)|(p-super)(ready-super) /*优先数最大者插入队首*/ p-
6、link=ready; ready=p; else /* 进程比较优先数,插入适当的位置中*/ first=ready; second=first-link; while(second!=NULL) if(p-super)(second-super) /*若插入进程比当前进程优先数大,*/ /*插入到当前进程前面*/ p-link=second; first-link=p; second=NULL; insert=1; else /* 插入进程优先数最低,则插入到队尾*/ first=first-link; second=second-link; if(insert=0) first-link
7、=p; input() /* 建立进程控制块函数*/ int i,num; clrscr(); /*清屏*/ printf(n 请输入进程号?); scanf(%d,&num); for(i=0;iname); printf(n 输入进程优先数:); scanf(%d,&p-super); printf(n 输入进程运行时间:); scanf(%d,&p-ntime); printf(n); p-rtime=0;p-state=w; p-link=NULL; sort(); /* 调用sort函数*/ int space() int l=0; PCB* pr=ready; while(pr!=
8、NULL) l+; pr=pr-link; return(l); disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ printf(n qname t state t super t ndtime t runtime n); printf(|%st,pr-name); printf(|%ct,pr-state); printf(|%dt,pr-super); printf(|%dt,pr-ntime); printf(|%dt,pr-rtime); printf(n); check() /* 建立进程查看函数 */ PCB* pr; printf(n * 当前正在运行的进
9、程是:%s,p-name); /*显示当前运行进程*/ disp(p); pr=ready; printf(n *当前就绪队列状态为:n); /*显示就绪队列状态*/ while(pr!=NULL) disp(pr); pr=pr-link; destroy() /*建立进程撤销函数(进程运行结束,撤销进程)*/ printf(n 进程 %s 已完成.n,p-name); free(p); running() /* 建立进程就绪函数(进程运行时间到,置就绪状态)*/ (p-rtime)+; if(p-rtime=p-ntime) destroy(); /* 调用destroy函数*/ else
10、 (p-super)-; p-state=w; sort(); /*调用sort函数*/ main() /*主函数*/ int len,h=0; char ch; input(); len=space(); while(len!=0)&(ready!=NULL) ch=getchar(); h+; printf(n The execute number:%d n,h); p=ready; ready=p-link; p-link=NULL; p-state=R; check(); running(); printf(n 按任一键继续.); ch=getchar(); printf(nn 进程已
11、经完成.n); ch=getchar(); 实验二 作业调度【目的要求】用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。 【准备知识】1基本概念(1)作业的概念。(2)作业调度的功能。(3)作业调度算法,调度性能的衡量。2作业调度(1)作业的状态。如图10.3所示。作业调度作业调度作业录入提交后备执行等待就绪运行完成图10.3 作业的状态变迁(2)作业调度算法。1)先来先服务算法是按照作业到来的先后次序进行调度的。2)短作业优先算法是比较作业申请中所指出的执行时间,选取执行时间最短的作业作为下一次服务的对象。【实验内容】作业调度和进程调度结合在一起(1)作业流信息
12、从指定文本文件(TXT文件)中读取。作业信息包括:作业号、进入系统时间、估计运行时间、优先级、内存需求量、磁带机需求量,都为整型。(2)作业调度算法:先来先服务;最短作业优先(二者选一);进程调度算法:先来先服务;基于优先级的算法(静态优先级)(二者选一)。(3)输出作业序列。格式:作业号 时间间隔 如:1 800-810 (/* 8:00-8:10 */) 2 810-900 1 900-930 平均周转时间:总的周转时间/作业总数(周转时间就是作业结束时间减去作业进入系统时间)。示例:#include #include #include #include #include #define
13、null 0 #define len sizeof(struct jnote) struct jcb int state; int num; int in; int run; int pri; int mem; int tape; job50; struct jnote int id; int in; int start; int run; int end; int pri; int size; int tape; int *maddr; struct jnote *next; ; int rest=4,memory101,*mh=memory,logo=0,fid=0; struct jcb
14、 *p=job; struct jnote *jh=null,*rp=null,*jp=null; txt()/*从txt文件中读取作业流*/ FILE *fp; char pt; int i,space=0,j=0,data100,h,k,count; char str10; for(i=0;i100;i+) datai=-1; for(i=0;i=0&pt=size) return(mp); while(*cp=1) cp+; mp=cp; return(null); zy_div_free(mp,msize,tape,h)/*资源分配与释放*/ int *mp,msize,tape,h;
15、 int *cp,i=msize; cp=mp; if(h=1) for(;i0;i-) *cp=1; cp+; rest=rest-tape; return (1); if(h=2) for(;i0;i-) *cp=0;cp+; rest=rest+tape; return (2); selectrp(plogo,time)/*选择当前运行进程*/ int plogo,time; struct jnote *newj; struct jnote *temp; if(jh=null&rp=null) p=job; for(;p-state=0;) p+; zy_div_free(mh,p-me
16、m,p-tape,1); p-state=0; newj=(struct jnote *)malloc(len); rp=newj; rp-id=p-num; rp-in=p-in; rp-start=p-in; rp-run=p-run; rp-end=0; rp-pri=p-pri;rp-size=p-mem; rp-tape=p-tape; rp-maddr=mh; rp-next=null; return (0); else if(jh!=null&rp=null) rp=jh; jh=jh-next; rp-next=null; rp-start=time; if(plogo=2)
17、selectrp(plogo,time); else return (-1); else if(jh!=null&rp!=null) if(plogo=2) if(logo=0) if(jh-prirp-pri) temp=jh; jh=jh-next; temp-next=rp; printf(%d : %d - %d n,rp-id,rp-start,temp-in); rp-run-=time_time(temp-in,rp-start); rp-start=0; rp=temp; rp-start=rp-in; return (0); if(fid=1) if(jh-prirp-pri
18、) temp=jh; jh=jh-next; temp-next=rp; rp=temp; rp-start=time; selectrp(plogo,time); else rp-start=time; return (0); return (0); else rp-start=time; return (0); return (0); WORK(jlogo,plogo,count) int jlogo,plogo,count; int k=count,sum=0,time,t;/*sum是周转时间之和*/ struct jnote *cp,*p1,*newj; int *mp; selectrp(plogo,0); while(k0) p=job; do if(p-state=0) p+; while(p-state=-1&p-num!=-1&(logo=0&p-in start,rp-run)|(logo=1&p-instart,rp-run) mp=m_pd(p-mem); if(rest=p-tape) t=1; else t=0; if(mp!=null&t=1) zy_div_free(mp,p-mem,p-tape,1); p-state=0; newj=(s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB11T 271-2014 生活垃圾转运站运行管理规范
- 关于肺癌课件教学课件
- DB11∕T 1797-2020 食品生产企业质量提升指南
- 《短文两篇》导学案-2024-2025学年统编版九年级语文下册同步学与练
- 淮阴工学院《互换性与技术测量1》2023-2024学年第一学期期末试卷
- 金融数据加密机相关项目投资计划书
- 暑假安全教育 主题班会课件-2篇
- 轮胎均匀性试验机相关行业投资方案范本
- 智能城市EPC建设方案
- 外来物种对生态影响评估方案
- (必练)广东省军队文职(经济学)近年考试真题试题库(含答案)
- 基于数据挖掘的高职学情分析与课堂教学质量提升研究
- 能源岗位招聘笔试题与参考答案(某大型国企)2024年
- 蔡戈尼效应完整版本
- 22《鸟的天堂》课件
- 农业灌溉装置市场环境与对策分析
- 新疆乌鲁木齐市第十一中学2024-2025学年八年级上学期期中道德与法治试卷
- 统编版道德与法治初二上学期期中试卷及答案指导(2024年)
- 部编版小学五年级上册道法课程纲要(知识清单)
- 职业技能等级认定质量控制及规章制度
- 山东省临沂市(2024年-2025年小学四年级语文)人教版期中考试(上学期)试卷及答案
评论
0/150
提交评论