欢迎来到天天文库
浏览记录
ID:60836476
大小:655.50 KB
页数:19页
时间:2020-12-21
《操作系统实验——动态优先级进程调度实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.实验名称:动态优先权调度过程中就绪队列的模拟2.实验要求:采用动态优先权的进程调度算法,用C语言编程模拟调度过程中每个时间片内的就绪队列。3.实验内容:(1)每个进程控制块PCB用结构描述,包括以下字段:*进程标识符id*进程优先数priority,并规定优先数越大的进程,其优先权越高。*进程已占用的CPU时间cputime*进程还需占用的CPU时间alltime,当进程运行完毕时,aiitime变为0*进程的阻塞时间startblock,当进程再运行startblock个时间片后,进程将进入阻塞状态*进程被阻塞的时间blocktime,已阻塞的进程再等待
2、blocktime个时间片后,将转换成就绪状态*进程状态state*队列指针next,将PCB排成队列。(2)调度前,系统中有五个进程,它们的初始状态如下:ID01234PRIORITY93830290CPUTIME00000ALLTIME33634STARTBLOCK2-1-1-1-1BLOCKTIME30000STATEREADYREADYREADYREADYREADY(3)进程在就绪队列呆一个时间片,优先数增加1。(4)进程每运行一个时间片,优先数减3。(5)按下面格式显示每个时间片内就绪队列的情况:READY_QUEUE:->id1->id21.任务分
3、析进程控制块用结构体来表示,包含它的各项属性。建立两个队列:一个就绪队列,一个阻塞队列。创建一个进程控制块表示当前正在运行的进程。程序开始运行时,所有进程都在就绪队列中。当startblock减少到0时,进程进入阻塞队列。在阻塞队列中的进程,当blocktime减少到0时,转入就绪队列。在就绪队列中的进程,如果优先级比当前正在执行的进程高,就可以取代当前进程获取时间片。当前进程如果运行完毕,就绪队列中优先级最高的进程就可以成为新当前进程。1.程序流程图1.程序清单#include#includeusingnamespaces
4、td;#defineLEN5//进程最大数量typedefenumSTATE//进程状态{READY,//就绪BLOCK,//阻塞END//完成}STATE;//定义进程控制块typedefstructPCB{intid;//进程标识符intpriority;//进程优先级intcputime;//已占用的CPU时间intalltime;//还需占用的CPU时间intstartblock;//阻塞时间intblocktime;//被阻塞时间STATEstate;//进程状态}PCB;//定义队列typedefstructqueue{intsize;//队列中进
5、程的数量PCB*data[LEN];//进程的指针}Queue;PCBps[LEN];//进程数组PCB*cp;//当前正在运行的进程QueuerQueue,bQueue;//就绪队列和阻塞队列//就绪队列按优先级降序排序(使用了冒泡排序法)voidrQueueSort(){PCB*temp;for(inti=0;iprioritypriority){temp=rQueue.da
6、ta[j];rQueue.data[j]=rQueue.data[j+1];rQueue.data[j+1]=temp;}}}}//初始化voidinit(){//给进程赋值for(inti=0;i7、4].priority=0;ps[2].alltime=6;ps[4].alltime=4;ps[0].startblock=2;ps[0].blocktime=3;cp=NULL;//当前进程赋空bQueue.size=0;//阻塞队列没有进程for(inti=0;i8、!=NULL){cout<i
7、4].priority=0;ps[2].alltime=6;ps[4].alltime=4;ps[0].startblock=2;ps[0].blocktime=3;cp=NULL;//当前进程赋空bQueue.size=0;//阻塞队列没有进程for(inti=0;i8、!=NULL){cout<i
8、!=NULL){cout<i
此文档下载收益归作者所有