操作系统-进程调度

操作系统-进程调度

ID:10537184

大小:225.50 KB

页数:12页

时间:2018-07-07

操作系统-进程调度_第1页
操作系统-进程调度_第2页
操作系统-进程调度_第3页
操作系统-进程调度_第4页
操作系统-进程调度_第5页
资源描述:

《操作系统-进程调度》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、进程调度一、实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及继承调度算法的理解。二、实验内容和要求设计一个有N个进程并发的进程调度程序,采用时间片轮转算法。Ø每一个进程用一个进程控制块PCB表示。PCB包含信息有:进程名name,进程号id,进程状态state,进程所需运行时间need_time,进程运行时间run_time。Ø进程所需的运行时间人为指定。进程运行时间以时间片为单位进行计算。(程序中以按任意键表示运行一次CPU时间片)Ø每个进程的状态有就绪W,运行R,和完成F(撤销进程)。Ø就绪的进程获得CPU后只能运行一个时间片,运行完运行时间run

2、_time+1。Ø如果运行一个时间片后,进程的run_time等于need_time(即已经达到所需运行时间),则撤销该进程并提示,如果还未达到,则将其放到队尾,进入就绪状态等待下一次时间片分配。每一次调度程序都打印一次运行情况,包括:运行的进程,就绪队列的进程,已经所有进程的PCB(不包括已经撤销的进程)。三、实验主要仪器设备和材料硬件环境:WindowXP软件环境:MicrosoftVisualC++2010Express四、实验原理及方案1、实验原理本进程调度算法采用时间片轮转算法,具体是:每个进程被分配一个时间片,即该进程允许运行的时间。就绪的进程都存放在一个就

3、绪链表中,队首的进程将获得时间片。如果在时间片结束时进程还在运行,则CPU将剥夺并分配给下一个进程。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。2、设计方案程序设计三个主要模块来进行模拟进程的调度。一是main()函数,用来按步操作模拟CPU分配执行每一个时间片,并循环判断程序是否结束。二是newPCB()函数,用来接收用户输入的进程信息(进程数目,PCB变量值)来创建一个就绪进程链表。三是showPCB()函数,用来执行一次调度算法的操作(这里的算法采用时间片轮转调度算法),并刷新显示出来这次操作的结果(覆盖之前的操作结果显示

4、)。程序执行流程将是通过main函数调用newPCB()创建就绪进程链表,创建模拟CPU分配执行时间片循环,每一次循环调用一次showPCB()执行一次调度算法并显示结果,从而达到模拟CPU进程调度的效果。3、相关数据结构的说明。就绪队列中的进程采用链表的数据结构,方便进行进程调度。如图所示:当前的进程,运行完将移到最后(图一)4、程序流程图开始初始化PCB,输入进程信息各进程PCB信息按输入顺序放到(队列)链表里,并分配进程ID进程数=0?结束YN就绪队列首进程开始运行时间片到,进程运行时间+1进程运行时间=所需运行时间?Y进程完成并撤销将首进程放到队列末尾(队尾),

5、设置其为就绪队列(state=‘w’)(图二)5、程序中源程序和可执行程序voidmain();/*主函数,用来进行调度操作*/voidnewPCB();/*建立PCB块并将他们组成一个队列*/voidpushPCB();/*将新的PCB块放到链表末尾*/voidshowPCB();/*调度一次时间轮转算法并显示*/voidpinrtSort();/*排序输出各个进程的PCB*/6、代码清单:/*本程序实现模拟进程的时间片轮转调度算法,即每一个进程按照在队列中的顺序平均获得cpu执行时间,如未能在时间片中完成,则该进程回到队尾等待调度,直到运行完毕Authorjuju*

6、/#include#include#include#includestaticintid=0;intprocess_num;intcurrent_process;structpcb{charname[20];intid;charstate;intneed_time;intrun_time;structpcb*next;}*p,*q,*first_pcb=NULL;typedefstructpcbPCB;/*排序输出各个进程PCB*/voidprintSort(){inti;q=first_pc

7、b;for(i=0;iid){printf("

8、%stt

9、%dtt

10、%ctt

11、%dtt

12、%d",q->name,q->id,q->state,q->need_time,q->run_time);i++;q=first_pcb;}else{q=q->next;if(q==NULL){q=first_pcb;i++;}}}}/*调度一次PCB并显示*/voidshowPCB(){inti;first_pcb->run_time++;first_pcb->state='r';/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。