《2023年计算机操作系统进程调度实验报告.pdf》由会员分享,可在线阅读,更多相关《2023年计算机操作系统进程调度实验报告.pdf(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、操作系统实验题:设计一若干并发进程的进程调度程序一、实验目的无论是批解决系统、分时系统还是实时系统,用户进程数一般都大于解决机数,这将导致用户进程互相争夺解决机。这就规定进程调度程序按一定的策略,动态地把解决及分派给处在就绪队列中的某一进程,以使之执行。进程调度是解决机管理的核心内容。本实验规定采用最高优先数优先的调度算法(即把解决机分派给优先数最高的进程)和先来先服务算法编写和调试一个简朴的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念。并体会了优先数和先来先服务调度算法的具体实行办法。二、实验规定用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理
2、解.三、实验内容进程调度算法:采用最高优先数优先的调度算法(即把解决机分派给优先数最高的进程)和先来先服务算法(将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度解决)。每个进程有一个进程控制块(P C B)表达。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运营时间、已用CPU时间、进程状态等等。进程的优先数及需要的运营时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运营时间以时间片为单位进行计算。每个进程的状态可以是就绪 W(W ait)、运营R(R u n)、或完毕F(Finis h)三种状态之O就绪
3、进程获得CPU后都只能运营一个时间片。用已占用CPU时 间 加 1 来表达。假如运营一个时间片后,进程的已占用C P U 时间已达成所需要的运营时间,则撤消该进程,假如运营一个时间片后进程的已占用C P U 时间尚未达所需要的运营时间,也就是进程还需要继续运营,此时应将进程的优先数减1 (即减少一级),然后把它插入就绪队列等待CPUo每进行一次调度程序都打印一次运营进程、就绪队列、以及各个进程的PCB,以便进行检查。反复以上过程,直到所要进程都完毕为止。四、实验算法流程调度算法的流程图如下:五、实验程序清单#incl u d e ns t dio.h#in e l u d e#incl u d
4、e#defi n e getpch(type)(t y p e*)ma 1 1 o c(s izeo f(t y pe)#def i ne NULL 0struc t peb /*定义进程控制块PCB*/char n am e 1 0char s t ate;in t super;in t ntime;i nt rtim e;stru c t peb*link;*re a dy=N U L L,*p;ty p e d e f s tr u c t peb PCB;cha r so r t()/*建立对进程进行优先级排列函数*/PCB*fir s t,*s econd;int insert=0;
5、i f(re a dy=NULL)|(p-s uper)(read y-supe r)/*优先级最大者,插入队首*/(p-1 i n k=r ead y;rea d y=p;)else/*进程比较优先级,插入适当的位置中*/(fir s t=r e ady;se c o n d=firs t-1 ink;w h i 1 e(s econ d!=NULL)i f(p-s u p e r)(sec o nd-s u p e r)/*若插入进程比当前进程优先数大,*/*插入到当前进程前面*/pli n k=s e cond;first-link=p;second=NULL;insert=1;)els
6、e/*插入进程优先数最低,则插入到队尾*/(f irst=f i rstlink;secon d 二 seco n d-l i n k;)i f(i n s ert=O)firs t-link=p;)char inpu t()/*建立进程控制块函数*/(int i,n u m;/clrsc r();/*清屏*/prin t f f n 请输入被调度的进程数目:);sc a nf(%d”,&num);for(i=0;iname);p r intf(”n 输入进程优先数:”);s c anf(n%d H,&p s uper);p r i n tf(n 输入进程运营时间:);scan f(%d,&p
7、n t im e);p rin t f(n);p r time=0;p-sta t e=w;p lin k=NULL;sor t();/*调用sor t 函数*/)int s pace()(int 1=0;PCB*p r=read y;while(pr!=NULL)(1 +;p r=p r-l i nk;r e turn(1 );ch a r d i s p(PCB*p r)/*建立进程显示函数,用于显示当前进程*/(pri n t f(n q n am e t s tat e t super t ndtime t runtim e n);printf(|%st,p r n ame);prin
8、tf(|%ct,p r-s t a te);pr i ntf(I%dt,pr-super);p rintf(n|%dtH,p rntime);printf(n|%d t u,prrtim e);printf(nn);ch a r ch e ck()/*建立进程查看函数*/(P CB*p r;printf(nn*当前正在运营的进程是:%s 二 p-name);/*显示当前运营进程*/d isp(p);p r=rea d y;p rin tf(nn*当前就绪队列状态为:n );/*显示就绪队列状态刃while(pr!=NULL)(d isp(p r);p r=pr 1 ink;)c h a r d
9、estroy()/*建立进程撤消函数(进程运营结束,撤消进程)*/(printf(n 进 程%s 已完毕.n”,pname);fre e(p);)charrunning()/*建立进程就绪函数(进程运营时间到,置就绪状态*/(p-rtime)+;i f(p-rtime=p-ntime)de s tr o y();/*调用de s troy函数*/else(p-su p er);p-st a te=w;sort();/*调用sort函数*/)ma i n()/*主函数*/(i nt le n,h=0;char ch;i n put();1 en=spac e();whil e(len!=0)&(
10、r e ad y!=NULL)(c h=g etc h a r();h+;p ri n t f(n Th e execute num b e r:%d n M,h);p=r e ady;r e ad y=p-l i n k;p-link=NULL;p-st a te=,R ;c h e ck();ru n ni n g();p r i ntf(n n 按任一键继续 ”);c h=ge t c h ar();)pr i nt f(n n n进程已经完毕.n);c h=g e tc h ar();六、运营结果分析结果分析:根据上述输入的三个进程的信息可以得到:优先级最高的是进程pi ng,所以最先
11、调度进程ping,它的状态为运营态,需要执行的时间为5。而当前就绪队列状态为:进程 x u 的优先级比较高,处在就绪队列前面,而进程gui的优先级是三者中最低的,所以处在就绪队列的最后。而此时这两个进程的状态都为就绪态。结果分析:当进程P i ng执行了一个时间片之后而它已占用C P U 时间已达成所需要的运营时间,则将它的优先级减1之后,再将三个进程按优先级的大小排列,从中选择优先级大的进程进入运营状态,则该次进入运营态的是进程xu。按照这种方式一直运营下去,直到:结果分析:当进程p i n g 的 C P U 占用时间等于它需要的执行时间时,进程p i ng调度完毕。则这时进程调度中尚有两
12、个进程:进程g u i 和进程x u。结果分析:当调度进程中只剩下进程g ui和进程xu时,这时根据进程优先级的大小,进程gui将进入运营态。结果分析:当进程X U完毕调度时,进程调度程序中直剩下进程gu i 了,这时进程gu i将进入运营态,而当前就绪队列将为空。结果分析:当进程gu i 的C P U 占用时间等于所需要的执行时间时,进程gu i 调度完毕,则这时进程调度中已经没有需要调度的进程了,则整个进程调度完毕。七、总结与体会该实验运用进程调度中的优先级算法调度进程,开始给每一个进程设定一个优先级数,对于优先级高的进程先调度,优先级低的进程后调度,在调度一个进程时,其他进程将处在就绪态,而正在被调度的进程应处在运营态。一开始在做这个实验的时候,我感觉大脑一片空白,不知道该从哪里动笔。后来根据书上的内容和从网上下载的资料,我慢慢地了解了大体的流程。通过这次实验,一方面加深了我对进程调度方法和功能的结识,另一方面让我更加深刻地理解了操作系统中进程调度中优先级调度的基本原理。优先级调度算法只是进程调度算法的一种,我们还应依照书本去学习进程调度的其它算法,以便更好地了解进程调度。