1、有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。程序要求如下:1)输出系统中进程的调度次序;2)计算CPU利用率。3、实验环境Windows操作系统、VC+6.0C语言4、 设计思想:unuse_cpu+x+x=tblocked队首进程入ready队列队尾;x=0beginuse_cpu=0unuse_cpu=0ready队列不空或blocked队列不空ready队列不空p 取ready队首元素p-PCB.state置“运行”输出p-PCB.namePCB.c
2、pu_time-use_cpu+PCB.cpu_timep入ready队列队尾释放pend /*use_cpu中记录CPU 运行时间 /*unuse_cpu中记录CPU空闲时间 否 是是 否 是 否 是 是5、 源程序#includestdlib.hstruct PCB_type char name ; /进程名 int state ; /进程状态 int cpu_time ;/运行需要的CPU时间(需运行的时间片个数);struct QueueNode struct PCB_type PCB; struct QueueNode *next;struct QueueNode*ready_hea
3、d=NULL, /就绪队列队首指针*ready_tail=NULL , /就绪队列队尾指针*blocked_head=NULL, /阻塞队列队首指针*blocked_tail=NULL; /阻塞队列队尾指针 int inuse_cpu,outuse_cpu; void start_state() /读入假设的数据,设置系统初始状态int n,m,i;struct QueueNode *p,*q;printf(假设处于就绪状态的进程数n为: n);scanf(%d,&n);假设处于阻塞状态的进程数m为:m);p=(struct QueueNode *)malloc(sizeof(struct Q
4、ueueNode); p-next=NULL;ready_head=ready_tail=p;for(i=1;iPCB.state=1;printf(请输入就绪程序%d的名称和CPU时间:,i);scanf(%d%dPCB.name,&PCB.cpu_time);ready_tail-next=p;ready_tail=p;q=(struct QueueNode *)malloc(sizeof(struct QueueNode);q-blocked_head=blocked_tail=q;=m;q=(struct QueueNode *)malloc(sizeof(struct QueueNo
5、de);q-PCB.state=0;请输入阻塞进程%d的名称和CPU时间:q-blocked_tail-next=q;blocked_tail=q;n当前处于就绪状态的进程有:np=ready_head-next;i=1;while(p)进程%d的名称和状态和CPU时间:%5d%5d%5dn,i,p-PCB.name,p-PCB.state,p-p=p-i+;void dispath() /模拟调度int a=0,t;inuse_cpu=0;outuse_cpu=0;请输入时间片t:t);开始调度:while(ready_head!=ready_tail|blocked_head!=block
6、ed_tail)struct QueueNode *p,*q;if(ready_head!=ready_tail)p=ready_head-ready_head-next=p-p-if(ready_head-next=NULL)ready_tail=ready_head;PCB.state=2;printf(t进程%d调度中,p-PCB.name);inuse_cpu+;a+;PCB.cpu_time-;if(p-PCB.cpu_time)ready_tail-ready_tail=p;elseprintf(t进程%d完成调度! free(p);elseoutuse_cpu+;t空闲一个时间片
7、if(a=t&blocked_head!q=blocked_head-blocked_head-next=q-q-if(blocked_head-blocked_tail=blocked_head;ready_tail-ready_tail=q;a=0;void calculate() /计算CPU利用率nCPU的利用率为:%.2fn,(float)inuse_cpu/(inuse_cpu+outuse_cpu);void main()start_state();dispath(); calculate();6、 实例运行结果7、 总结该实验利用进程调度中的优先级算法调度进程,开始给每一个进程设定一个优先级数,对于优先级高的进程先调度,优先级低的进程后调度,在调度一个进程时,其他进程将处于就绪态,而正在被调度的进程应处于运行态。一开始在做这个实验的时候,我感觉大脑一片空白,不知道该从哪里动笔。后来根据书上的内容和从网上下载的资料,我慢慢地了解了大致的流程。通过这次实验,首先加深了我对进程调度方法和功能的认识,其次让我更加深刻地理解了操作系统中进程调度中优先级调度的基本原理。优先级调度算法只是进程调度算法的一种,我们还应依照书本去学习进程调度的其它算法,以便更好地了解进程调度。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1