2023年操作系统实验报告2.pdf
《2023年操作系统实验报告2.pdf》由会员分享,可在线阅读,更多相关《2023年操作系统实验报告2.pdf(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、操作系统实验报告学生学院 计算机学院专业班级 计算机科学与技术3班学 号 _ _ _ _ _ _ _ _ _ _ _ _ _学生姓名_ _ _ _ _ _ _ _ _ 林虹_ _ _ _ _ _ _ _ _ _ _ _ _指导教师 丁国芳_ _ _ _ _ _ _ _ _ _ _202 3 年 1 2月 1 5曰目录1实验一进程调度.1。2实验二 银行家算法.16。3实验三 动态分区分派方式的模拟.204实验四仿真各种磁盘调度算法.2600。实 验 一 进 程 调 度1.实验目的编写并调试一个模拟的进程调度程序,分别 采 用“短进程优先”、“时间片轮转”、“高响应比优先”调度算法对产生的五个进
2、程进行调度,并比较算法的平均周转时间。以加深对进程的概念及进程调度算法的理解。2.实验规定1.每个进程由一个进程控制块(PCB)表达,进程控制块可以包含如下信息:进程名、优先数(响应比)、到达时间、需要运营时间(进程的长度)、已运营时间、进程状态等等(可以根据需要自己设定).2.由程序自动生成进程(涉及需要的数据,要注意数据的合理范围),第一个进程到达时间从0开始,其余进程到达时间产生。3.采用时间片轮转调度算法时,进程的运营时间以时间片为单位进行计算。4.每个进程的状态可以是就绪 W(W ait)、运 营R(Run)、或完毕F(F i nish)三种状态之一。5.每进行一次调度,程序都要输出
3、一次运营结果:正在运营的进程、就绪队列中的进程、完毕的进程以及各个进程的P C B,以便进行检查。6.最后计算各调度算法的平均周转时间,并进行比较、分析。3.实验内容%.算 法 原 理0(1)短进程优先调度算法。“短进程优先”调度算法的基本思想是把CPU分派给就绪队列中需要时间最短的进程。(2)时间片轮转算法。将系统中所有的就绪进程按照F C F S 原则,排成一个队列。每次调度时将C P U-分派给队首进程,让其执行一个时间片。时间片的长度从几个m s 到几百m s。在一个时 间片结束时,发生时钟中断。调度程序据此暂停当前进程的执行,将其送到就绪队列的 末尾,并通过上下文切换执行当前的队首进
4、程。进程可以未使用完一个时间片,就出让。CPU。(3 )高响应比优先算法。H R R N 调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。每个作业完毕后要打印该作业的开始运营时刻、完毕时刻、周转时间和带权周转时间,这一组作业完毕后要计算并打印这组作业的平均周转时间、带权平均周转时间。b.程序流程图C.重要数据结构struct PCB char name20;double prio;intintintintintintarivtime;needtime;wastime;state;fishtime;waitime;bool operator (c
5、onst PCB ppcb)const return(waitime+needtime)/needtime (ppcb.waitime+ppcb.needtime)/ppcb.needtime;pcb100;queue wait;queue run;vector finish;d.各程序说明及关系 1.v oid inpu t()输入进程函数v o id i n p u t()c h a r*nam e 2 0 j is c a n-F(*%s*,p c b p c b s u m .n a m e)sp c b C p c b s u m.p r i o *0 jp c b p c b s
6、u m .a r iv t im e 0;p c b p c b s u m.n e e d tim e -r a n d()%1 7;p c b p c b s u m j.w a s tim e =0;p c b p c b s u m .w a it im e =e;p c b p c b s u m l.s t a t e =工;p c b p c b s u m .-F is h-tim e =-1;pcbsum-;2.void pr i n t()打印进程函数void print()(PCB pb;printpcb.clear();printf(Now Time:nowtime);
7、printf(Running PCB:n);for(int i=0;i run.size();*+i)pb run.front。;run.pop();printpcb.push_back(pb);printf(%sn,pb.nare);run.push(pb);)printf(Wait PCB:n);for(int i 0;i wait.size();+i)(pb=wait.front();wait.pop();VWprintf(%sn,pb.name);wait.push(pb);)printf(Finish PCB:n);for(int i 0;i finish.size();+i)pb=
8、finishi;printpcb.push_back(pb);printf(%sn,pb.name);)cout .-.-.endl;cout left;cout setw(6)(yj5-setw(12)Name setw(12)cXg setw(12)toxTsetw(12)NeedT,setw(12)WasteTsetw(12)FinishT,setw(12)Stateendl;cout -endl)for(int i=0;i printpcb.size();+i)pb=printpcbi;cout setw(6)i*l setw(12)pb.name setw(12)pb.prio se
9、tw(12)pb.arivtine setw(12)pb.needtimesetw(12)pb.wastime setw(12)pb.fishtime setw(12)pb,state endl;)cout -endl;puts();3.in t mai n()主函数调用int main()while(l)print(input the number of PCB:n)jint n;pcbsum=1;&n);print-F(please name the new PCB:n);for(int i=1;i=n;+i)input();nowtime-*;print-F(nthe In-Format
10、ions o-F PCB:n);ini_print();printf(,*S3F*n)SJF();printfC*RR*nM)RR();print(*HRRN*n0);HRRN();print-F(Output all dispatching algorithm the PCB turnaround t i m e:n);Printf(“矮 法 摄 发 线 墓 读S”:SDF_Rp);(而短矮RR:RR_Rp);Pintf(“高 迪 在 总 战 线HRRN:%ifnny,HRRN.Rp);return 0;4.各函数代码void S J F O 短进程优先函数void SJF()finish.
11、clear();sort(pcb+l,pcb+pcbsum,SJFcmp);for(int i=1;i pcbsum;+i)run.push(pcbi);nowtime=0;PCB pb;while(!run.empty()pb=run.front。;run.pop();nowtime+=pb.needtime)S3F_Rp+=nowtime;pb.state=3;pb.wastime=nowtime;pb.fishtime=nowtime;finish.push_back(pb);int ci=run.size();while(ci-)pb=run.front();run.pop();pb.
12、waitime=nowtime;pb.prio=1.0*(pb.waitime+pb.needtime)/pb.needtime;run.push(pb);print();SJF_Rp=SJF_Rp/(pcbsum-l)*1.0;e运营结果截图th e I n f o r m ati o n s o f P C B:N u mN am eP r i oA r i v TN e e d TV a s t e TF i n i s h!S t a t e1a0070-11b0050-11c00100-114d00140-115e00100-11N o w T i m e:5R un n i n g
13、 P C B:acedW a i t P C B:F i n i s h P C B:bN umN a m eP r i oA r i v TN e e d TV a s t e TF i n i s h TS t a t e1a1.7 14 29070-112c1.50100-11e1.50100-114d1.3 5 7 140140-11b005553N o w T i m e:12R un n i n g P C B:edf a i t P C B:F i n i s h P C B:N umN a m eP r i oA r i v TN e e d TV a s t e TF i n
14、 i s h?S t a t e1c2.20100-11二e2.20100-11一d1.8 5 7 140140-114b005553a1.7 14 290712123l o w T i m e:22R un n i n g P C B:edf a i t P C B:f i n i s h P C B:bN a m eP r i oA r i v TN e e d Tl a s t e TF i n i s h TS t a t ee3.20100-11d2.5 7 14 30140-11b005553a1.7 14 290712123c2.201022223短进程优先算法S J F:23.
15、4 00000Now Time:32Running PCB:dWait PCB:Finish PCB:baceNum NameP r i oA r i v TN e e d TW a s t e TF i n i s h TS t a t e1 d3.28 5 7 10140-112 b0055533 a1.7 14 2907121234 c2.2010222235 e3.20103 23 23N o w T i m e:4 6R un n i n g P C B:f a i t P C B:F i n i s h P C B:bacedN um N a m eP r i oA r i v T
16、N e e d TV a s t e TF i n i s h TS t a t e1 b0055532 a1.7 14 2907121233 c2.2010222234 e3.20103 23 235 d3.28 5 7 10144 64 63void R R()短进程优先函数in t RRq;.v o id R R()RRq=ra n d O%5+l;F in ish .c l e a r();p rin t-F(MThe q o-F RR:RRq);f o r(i n t i =I;i =pcbsum;+i)ru n.p u s h(p c b i);PCB pb;now tim e=0
17、;owhile(I run.empty()pb=run.front();run.pop();if(pb.needtime-pb.wastime=RRq)pb.state=3;nowtime+=pb.needtime-pb.wastime;pb.fishtime=nowtime;pb.wastime=pb.needtime;pb.prio=1.0*(pb.waitime+pb.needtime)/pb.needtime;finish.push_back(pb);if(wait.size()PCB nex=wait.front();wait.pop();pb.prio=1.0*(pb.waitim
18、e+pb.needtime)/pb.needtime;run.push(nex);)print();continue;else(nowtime+=RRq;pb.wastime+=RRq;pb.prio=1.0*(pb.waitime+pb.needtime)/pb.needtime;run.push(pb);RR_Rp=0;int num=finish.size();for(int i=0;i num;+i)RR_Rp+=finishi.fishtime;)RR_Rp=RR_Rp/num*1.0;)运营结果截图The q of RR:5Now Time:5Running PCB:edVait
19、PCB:F inish PCB:bNamePrioArivTNeedTWasteTFinishTStatea0070-11c00100-11e00100-11d00140-11000000b105553Now Time:25Running PCB:aced a it PCB:F in ish PCB:bDum NameS ta teP rioArivTNeedTWasteTFinishTlow Time:27Running PCB:cedfa it PCB:fin ish PCB:bNum NamePrioArivTNeedTYasteTFinishTStateeda1111nan100000
20、0101014507555507-1-1-152527111333Now Time:32Running PCB:edf a it PCB:Finish PCB:bacjm NamePrioArivTNeedTlasteTFinishTStateedbac111nan110000001014507105550710-1-15252732113333Gow Time:37Running PCB:Fait PCB:finish PCB:baeNum NamePrioArivTNeedTTasteTFinishTStatedb11nanae100000014507101055071010-152527
21、3237133333void H R R N O 高响应比优先函数priority_queue hrrn;void HRRN()for(int i=1;i pcbsum;+i)hrrn.push(pcbi);finish.clear();PCB pb;nowtime=0;while(!hrrn.empty()pb=hrrn.top();hrrn.pop();int tmp=pb.needtime;nowtime+=tmp;HRRN_Rp+=nowtime;pb.state=3;pb.wastime=nowtime;pb.fishtime=nowtime;finish.push_back(pb)
22、;while(Ihrrn.empty()pb=hrrn.top();hrrn.pop();pb.waitime+=tmp;pb.prio=1.0*(pb.waitime+pb.needtime)/pb.needtime;run.push(pb);print();while(!run.empty()pb=run.front();run.pop();hrrn.push(pb);)HRRN_Rp=HRRN_Rp/(pcbsum-l)*l.0;程序运营结果此刻时间:1运行队列:进程名进程状态进程优先级运行时间已用CPUS寸 间5 Run550等待队列:进程名进程状态进程优先级运行时间已用CPUB寸 间
23、4 Wait4403 Wait3302 Wait2201 Wait110此刻时间:9运行队列:进程名进程状态进程优先级运行时间已用CPUS寸 间4 Run242等待队列:进程名进程状态进程优先级运行时间已用CPU间2 Wait2205 Wait1543 Wait1321 Wait110此刻时间:12运行队列:进程名进程状态进程优先级运行时间已用CPUB寸间4 Run143等待队列:进程名进程状态进程优先级运行时间已用CPUB寸间5 Wait1543 Wait1321 Wait110进 程4已完成完成所有进程需要完成时间:15所有进程已结束4.结果分析与实验小结。作业调度本质与进程调度类似,但是
24、多道的话,就要多考虑空间的容量了。单道的情况就不作分析了,对于多道调度,要考虑清楚,什么时候可以接纳新的作业进来;对于给定的空间来说,一次能让作业同时执行的数量应当是多少;根据算法,应当按照怎么样的先后顺序选择等待的作业逐步分析后,对于非抢占的CPU,一旦作业进入了执行状态,它的结束时间也就定了下来,一旦有作业结束,就会释放空间,释放之后就能立即选择新的作业进来。根据不同算法,对等待队列也有不同的排序结果,无论如何,都按先后顺序放入队列中,所以每次选择的时候,都要遍历一遍所有等待中的进程,假如这个作业满足空间需求,则放入CPU中执行,同时更新结束时间,否则则跳过这个作业,判断下一个作业,直到询
25、问完所有等待的作业为止。不断反复上面的环节,直到所有的作业都执行完所以模拟的时候,分别开了一个运营队列和一个等待队列,运营队列作为判断有哪个作业已经执行结束。通过这个实验,对操作系统的作业调度已有了更深一层的理解了,望以后能再接再厉。,。0实验二银行家算法1.实验目的用银行家算法避免死锁,实现系统合理分派资源,加深对进程同步及死锁理解。2.实验规定1.假定系统有3 类资源A(10个)、B(1 5 个)、C(12个),系有5 个进程并发执行,进程调度采用时间片轮转调度算法。2.每个进程由一个进程控制块(P C B)表达,进程控制块可以包含如下信息:进程名、需要的资源总数、已分派的资源数、进程状态
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 操作系统 实验 报告
限制150内