




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验题:设计一若干并发进程的进程调度程序实验目的无论是批处理系统、分时系统述是实时系统,用户进程数一般都大于处理机数,这将 导致用户进程互相争夺处理机。这就要求进程调度程序按一定的策略,动态地把处理及分 配给处于就绪队列中的某一进程,以使z执行。进程调度是处理机管理的核心内容。本实 验要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先 服务算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、 进程队列的概念。并体会了优先数和先来先服务调度算法的具体实施办法。二、实验要求用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算
2、法的理 解.三、实验内容进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进 程)和先来先服务算法(将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队 列,并按照先来先服务的方式进行调度处理)。每个进程有一个进程控制块(pcb)表示。进程控制块口j以包含如下信息:进程名、 优先数、到达时间、需要运行时间、已用cpu时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的 到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪w (wait)、运行r (run)、或完成f (finish)三种状
3、态 之一。就绪进程获得cpu后都只能运行一个时间片。用已占用cpu时间加1来表示。如果运行一个时间片后,进程的已占用cpu时间已达到所需要的运行时间,则撤消该 进程,如果运行一个吋间片后进程的已占用cpu时间还未达所需耍的运行吋间,也就是进 程述需要继续运行,此时应将进程的优先数减1 (即降低一级),然后把它插入就绪队列等 待 cpuo每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的pcb,以便进 行检查。重复以上过程,直到所要进程都完成为止。四、实验算法流程调度算法的流程图如下:五、实验程序清单#include nstdio.hh#include <stdlib.h>
4、;#include <conio.h>#define getpch(type) (type*)malloc(sizeof(type)#define null 0struct pcb /*定义进程控制块pcb */ char name10;char state;int super;int ntime;int rtime;struct pcb* link; *ready=null,*p;typedef struct pcb pcb;char sort() /*建立对进程进行优先级排列函数*/pcb * first, second;int insert=0;if(ready=null)l
5、l(p->super)>(ready->super) /* 优先级最大者,插入队首 */p> 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=l;else/*插入进程优先数最低,则插
6、入到队尾*/first=first->link;second=second->link;if(insert=o) first->link=p;char input() /*建立进程控制块函数*/int i,num;/clrscr(); /* 清屏 */printf("n请输入被调度的进程数s:");scanf(h%d",&num);for(i=0;i<num;i+) printf(un 进程号no.%d:nn,i); p=getpch(pcb);printf(nn输入进程名:”);scanf("%s",p >
7、; name);printf("n输入进程优先数:”);scanf(n%d",&p->super);printf(nn输入进程运行时间:”);scanf(h%dn,&p->ntime);printf(nnh);p->rti me=();p >state=w;p->link=null;sort(); /* 调用sort函数*/int space()int 1=0; pcb* pr=ready;while(pr!=null)1+;pr=pr->link;retum(l);char disp(pcb * pi*) /*建立进程显
8、示函数,用于显示当前进程*/printf(un qname t state t super t ndtime t runtime nn); printf(”l%st”,p>name);pri ntf(" i %ct",pr->state);printf(,'l%dt,',pr->super); printf(,l%dt,pr->ntime); printf(h i %dtn ,pr->rtime);printf(” n“);char check() /*建立进程查看函数*/pcb* pr;printf(hn *当前正在运行的进程
9、是:%s",p->name); /*显示当前运行进程*/ disp(p);pi-ready;printf(hn *当前就绪队列状态为:);/*显示就绪队列状态*/ while(pr!=null)disp(pr);pr=pr->link;char destroyo /*建立进程撤消函数(进程运行结朿,撤消进程严/ printf("n 进程%s已完成.n",p->name);free(p);char runningo /*建立进程就绪函数(进程运行时间到,置就绪状态勺(p->rtime)+;if(p->rtime=p->ntime)
10、destroyo; /* 调用destroy函数*/else(p> super);p> state='w'sort(); /* 调用 sort函数 */main() /*主函数*/int len,h=0;char ch;input();len=space();while(len!=o)&&(ready !=null)ch=getchar();h+;printf(nn the execute number:%d n",h);p=ready;ready=p->link;p->link=null;p->state='rr
11、;check();runningo;printf(un按任一键继续”);ch=getchar();printf(nnn进程己经完成.n”);ch=getchar();六. 运行结果分析结果分析:根据上述输入的三个进程的信息可以得到:优先级最高的是进程ping,所以 最先调度进程ping,它的状态为运行态,需要执行的时间为5。而当前就绪队列状态为:进 程xu的优先级比较高,处于就绪队列前面,而进程gui的优先级是三者中最低的,所以处 于就绪队列的最后。而此时这两个进程的状态都为就绪态。结果分析:当进程ping执行了一个时间片z后而它已占用cpu时间已达到所需要的运 行吋间,则将它的优先级减1之后
12、,再将三个进程按优先级的大小排列,从中选择优先级大 的进程进入运行状态,则该次进入运行态的是进程xu。按照这种方式一直运行下去,直到:结果分析:当进程ping的cpu占用吋间等于它需要的执行吋间吋,进程ping调度完成。 则这时进程调度中还有两个进程:进程gui和进程xuo结果分析:当调度进程中只剩下进程gui和进程xu时,这时根据进程优先级的大小,进 程gui将进入运行态。结果分析:当进程xu完成调度时,进程调度程序中直剩下进程gui 了,这吋进程gui将 进入运行态,而当前就绪队列将为空。结果分析:当进程gui的cpu占用时间等于所需要的执行时间时,进程gui调度完成, 则这时进程调度中已经没有需要调度的进程了,则整个进程调度完成。七、总结与体会该实验利用进程调度屮的优先级算法调度进程,开始给每一个进程设定一个优先级数, 对于优先级高的进程先调度,优先级低的进程后调度,在调度一个进程时,其他进程将处 于就绪态,而止在被调度的进程应处
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论