如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
操作系统实验报告学院:理学院专业班级:07应用数学-01学生学号:200713575学生姓名:何继胜指导教师:李升2010年5月4日一实验题目进程调度算法的实现二实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。二实验内容编写并调试一个模拟的进程调度程序,采用“基于时间片的轮转调度算法”对五个进程进行调度。每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、到达时间、需要运行时间、已运行时间、进程状态等等。进程的到达时间及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W(Wait)、运行R(Run)两种状态之一。就绪进程获得CPU后都只能运行一个时间片。用运行时间加1来表示。如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应分配时间片给就绪队列中排在该进程之后的进程,并将它插入就绪队列队尾。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所有进程都完成为止本实验是基于多级反馈队列调度算法的实现过程实现过程:pcb.h-structPCB{}定义PCB控制块-print(fin,obj1,obj2,ojb3,now)输出三个队列中的线程情况pcb.cpp-建立四个进程-执行运行进程四实验结果见dat.txt五实验中遇到的问题总结在对判断什么时候是一个词法结束的时候有的时候没有作出正确的判断;在程序设计之初,没有一个好的规划。写程序的时候,要适当的多加些注释,一方面方便了别人的阅读,另一方面,也可以理清自己的思路。六实验心得体会1.开始拿到设计要求的时候,一定要搞搞清楚设计的要求是什么。2.设计程序的时候,要合理的列出程序的步骤。3.合理的使用条件。4.要充分的使用库文件(一定要做到对库文件有所了解)。代码:文件:pcb.cpp#include"pcb.h"intmain(intargc,char*argv[]){list<PCB>obj1;//使用三级反馈队列来完成这是第1级list<PCB>obj2;//使用三级反馈队列来完成这是第2级list<PCB>obj3;//使用三级反馈队列来完成这是第3级//建立5个进程PCBpcb1(1,0,7,0,W,0);PCBpcb2(2,5,4,0,W,0);PCBpcb3(3,7,13,0,W,0);PCBpcb4(4,12,9,0,W,0);obj1.push_back(pcb1);obj1.push_back(pcb2);obj1.push_back(pcb3);obj1.push_back(pcb4);time_tt=time(NULL);time_tnow=0;ofstreamfout("dat.txt",ios::out);while((!obj1.empty()||!obj2.empty()||!obj3.empty())){LIST1:intkey=0;now=time(NULL)-t;list<PCB>::iteratorpos1=obj1.begin();//第一队列while(pos1!=obj1.end()){if(now>=pos1->p_rtime){++(pos1->p_htime);pos1->ready=1;pos1->state=R;if(pos1->p_htime>=pos1->p_ntime){//总共运行的时间已经满足的情况pos1->p_htime=pos1->p_ntime;Print(fout,obj1,obj2,obj3,now);//输出进程信息sleep(1);pos1=obj1.erase(pos1);}else{Print(fout,obj1,obj2,obj3,now);//输出进程信息//总共运行的时间没有满足的情况pos1->state=W;//时间片用完PCBtmppcb(*pos1);//复制进程信息obj2.push_back(tmppcb);//从第1队列复制到第2队列po