还剩3页未读,继续阅读
文本内容:
实验一进程调度实验
一、目的要求用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.
二、例题设计一个有个进程并行的进程调度程序N进程调度算法采用最高优先数优先的调度算法即把处理机分配给优先数最高的进程和先来先服务算法每个进程有一个进程控制块PCB表示进程控制块可以包含如下信息进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等进程的优先数及需要的运行时间可以事先人为地指定也可以由随机数产生进程的到达时间为进程输入的时间进程的运行时间以时间片为单位进行计算每个进程的状态可以是就绪W Wait、运行R Run、或完成F Finish三种状态之一就绪进程获得CPU后都只能运行一个时间片用已占用CPU时间加1来表示如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1即降低一级,然后把它插入就绪队列等待CPU每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查重复以上过程,直到所要进程都完成为止调度算法的流程图如下//jingchendiaodu.cpp#include nstdio.hH#include stdlib.h#include conio.h#define getpcbtypetype*mallocsizeoftype#define NULL0定义进程控制块struct pcb{/*PCB*/char name
[10];char state;int super;int ntime;int rtime;struct pcb*link;产ready=NULL,*p;typedef structpcb PCB;建立对进程进行优先级排列函数*/void sortPPCB*first,*second;int insert=0;ifready==NULL||p-superready・super/*优先级最大者,插入队首*/p-link=ready;ready=p;进程比较优先级,插入适当的位置中因else/*first=ready;second=first-link;whilesecond!=NULL ifp・supersecoiid・siiper/*若插入进程比当前进程优先数大产/{/*插入到当前进程前面*/p-link=second;first-link=p;second=NULL;insert=l;插入进程优先数最低,则插入到队尾*/else Pfirst=first-link;second=second-link;ifinsert==O first-link=p;}建立进程控制块函数*/void input/*intprintfH\n请输入进程数”;scanfn%d,\num;{fori=l;i=num;i++printfu\n进程号No・%d:\n”,i;p=getpcbPCB;printfn\n输入进程名:;scanfM%su,p-name;printfu\n输入进程优先数:;scanfH%dn,p-super;printfu\n输入进程运行时间:;scanfM%dn,p-ntime;printfn\nH;p-rtime=O;p-state=,w,;p-link=NULL;;/*调用函数*/sort sort}int spaceint1=0;PCB*pr=ready;whilepr!=NULL1++;pr=pr-link;}returnl;}建立进程显示函数,用于显示当前进程*/void dispPCB*pr/*printfn\n进程名\t进程状态\t优先级\t运行时间\t已运行时间\n”;printfH%s\tH,pr-name;printfH%c\tn,pr-state;printfn\t%d\tn,pr-super;printfH%d\tf\pr-ntime;printfn\t%d\tM,pr-rtime;printfn\nu;/*建立进程查看函数*/void checkPCB*pr;printfM\n****当前正在运行的进程是:%spname;/*显示当前运行进程*/dispp;pr=ready;当前就绪队列状态为显示就绪队列状态刃{printf\n****:\n”;/*whilepr!=NULLdisppr;pr=pr-link;}/*建立进程撤消函数进程运行结束,撤消进程*/void destroyprintfM\n进程[%s]已完成・\n”pname;freep;}建立进程就绪函数进程运行时间到,置就绪状态*/void runningOprtime++;ifp-rtime==p-ntime调用函数*/destroy;/*destroy elsepsuper—;p-state=,w*;;/*调用函数*/sort sort/*主函数*/void main|int len,h=0;char ch;inputQ;Ien=space;whilelen!=Oready!=NULLch=getchar;h++;printfM\n Theexecute number:%d\nH,h;p=ready;ready=p-link;p-link=NULL;p-state=,R,;checkQ;runningO;printf(n\n按任一键继续……n);printfM\n\n进程已经完成An”;三.实验题
1、编写并调试一个模拟的进程调度程序,采用“高响应比优先”调度算法对五个进程进行调度“高响应比优先”调度算法的基本思想是把CPU分配给就绪队列中响应比最高的进程进程的运行时间以时间片为单位进行计算每运行一个时间片后,需要调整所有就绪队列中进程的响应比,在下一个时间片内选择响应比最高的进程运行
2、编写并调试一个模拟的进程调度程序,采用“时间片轮转法”调度算法对五个进程进行调度轮转法可以是简单轮转法、可变时间片轮转法,或多队列轮转法简单轮转法的基本思想是所有就绪进程按FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同如果运行进程用完它的时间片后还为完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程直至所有的进程运行完毕任选一个四.实验报告1试验题目;2试验目的;3程序中使用的数据结构及符号说明;4流程图;5程序中函数之间的调用关系;6源程序并附有注释对函数必须要有入口参数的说明、返回结果的说明以及函数所采用的算法及功能;7程序运行的初值及运行结果,包括进程控制块队列的初始状态;每个时间片运行时的运行进程及就绪队列中各进程的信息;每个时间片运行结束后如果有进程运行结束,输出结束进程的名称8试验中遇到的主要问题及解决方法;9收获和体会。
个人认证
优秀文档
获得点赞 0