《操作系统》课程设计报告多道批处理调度的模拟

上传人:无*** 文档编号:41070022 上传时间:2021-11-18 格式:DOC 页数:22 大小:264KB
收藏 版权申诉 举报 下载
《操作系统》课程设计报告多道批处理调度的模拟_第1页
第1页 / 共22页
《操作系统》课程设计报告多道批处理调度的模拟_第2页
第2页 / 共22页
《操作系统》课程设计报告多道批处理调度的模拟_第3页
第3页 / 共22页
资源描述:

《《操作系统》课程设计报告多道批处理调度的模拟》由会员分享,可在线阅读,更多相关《《操作系统》课程设计报告多道批处理调度的模拟(22页珍藏版)》请在装配图网上搜索。

1、课 程 设 计 课程名称 操作系统 _ 题目名称 多道批处理调度的模拟学生学院 计算机学院 专业班级 2007 级计科(5)班 2010年 07月 03日广东工业大学课程设计任务书一、课程设计的内容本课程设计要求模拟实现一个的多道批处理系统的两级调度。通过具体的作业调度、进程调度、内存分配等功能的实现,加深对多道批处理系统的两级调度模型和实现过程的理解。 二、课程设计的要求与数据1 要求作业从进入系统到最后完成,要经历两级调度:作业调度和进程调度。作业调度是高级调度,它的主要功能是根据一定的算法,从输入井中选中若干个作业,分配必要的资源,如主存、外设等,为它们建立初始状态为就绪的作业进程。进程

2、调度是低级调度,它的主要功能是根据一定的算法将CPU分派给就绪队列中的一个进程。2 假定某系统可供用户使用的主存空间共100KB,并有4台磁带机。主存分配采用可变分区分配方式且主存中信息不允许移动,对磁带机采用静态分配策略,作业调度分别采用先来先服务算法和最小作业优先算法,进程调度采用先来先服务和最短进程优先算法。(能增加实现更多的调度算法则可以获得加分)。3 假定“预输入”程序已经把一批作业的信息存放在输入井了,并为它们建立了相应作业表。测试数据如下: 作业 到达时间 估计运行时间 内存需要 磁带机需要JOB1 10:00 25分钟 15K 2台JOB2 10:20 30分钟 60

3、K 1台JOB3 10:30 10分钟 50K 3台JOB4 10:35 20分钟 10K 2台JOB5 10:40 15分钟 30K 2台4 分别在不同算法控制下运行设计的程序,依次显示被选中作业、内存空闲区和磁带机的情况。比较不同算法作业的选中次序及作业平均周转时间。5 选用程序设计语言:C、C等。三、课程设计应完成的工作1充分理解设计的任务,完成设计的基本要求。然后根据自己的基础和能力选择不同难度的算法和实现方式,以取得更高的分数。 2. 独立完成系统的分析、设计、编码、测试工作。3完成设计报告的撰写。4以光盘(以班为单位刻录)方式提交已调试通过的完整的相关源程序和能够运行的执行文件;提

4、交“课程设计报告”的书面和电子两种版本。四、课程设计进程安排序号设计各阶段内容地点起止日期1查阅资料、分析题目、概要设计分散周一2详细设计、编码分散周二3调试实验室周三4撰写设计报告分散周四5运行、验收实验室周五五、应收集的资料及主要参考文献1 计算机操作系统, 汤小丹等 ,西安电子科技大学出版社2 操作系统实验指导书,傅秀芬,广东工业大学(自编)3 计算机操作系统教程 ( 第二版 ), 张尧学、 史美林,清华大学出版社4 现代操作系统,A.S.Tanenbaum 著,陈向群等译机械工业出版社发出任务书日期:2010年6月27日 指导教师签名:林穗计划完成日期: 2010年7月3日 基层教学单

5、位责任人签章:傅秀芬一 设计背景本次课程设计的目的是模拟实现一个多道批处理系统的两级调度。在这之前,我们的操作系统课程已经做过了四次实验,分别是进程调度,作业调度,主存空间的分配和回收,文件系统。而此次多道批处理系统的两级调度将在采用前三次实验(即进程调度,作业调度,主存空间的分配和回收)成果的基础上,对他们进行整合,完成一个完整的模拟多道批处理系统两级调度的系统程序。本课程设计将按要求规定的步骤进行:设计背景(查询资料和分析题目),概要设计,详细设计,编码,调试和测试,总结和撰写报告。二 概要设计1.要求作业从进入系统到最后完成,要经历两级调度:作业调度和进程调度。作业调度是高级调度,它的主

6、要功能是根据一定的算法,从输入井中选中若干个作业,分配必要的资源,如主存、外设等,为它们建立初始状态为就绪的作业进程。进程调度是低级调度,它的主要功能是根据一定的算法将CPU分派给就绪队列中的一个进程。2假定“预输入”程序已经把一批作业的信息存放在输入井了,并为它们建立了相应作业表。测试数据如下: 作业 到达时间 估计运行时间 内存需要 磁带机需要JOB1 10:00 25分钟 15K 2台JOB2 10:20 30分钟 60K 1台JOB3 10:30 10分钟 50K 3台JOB4 10:35 20分钟 10K 2台JOB5 10:40 15分钟 30K 2台3使用visual

7、c+设计如下各功能界面。放在输入井的作业列表:内存分配的情况:已经进入内存并存在的作业:已经完成的作业列表:程序设置区:包括开始时间,磁带机和内存初始值,调度算法的选择作业添加区,可以输入作业及它的各个参数。程序运行状态区。如开始,暂停,继续和重置等个人信息的显示:三 详细设计。1 相关数据结构的设计。typedef struct job/建立作业信息结构char jname10; /作业名int hour; /到达时刻时钟数int minute; /到达时刻分钟数int run; /运行时间int memory; /要求主存空间int sign; /所要磁带机数int fhour; /完成时

8、刻时钟数int fminute; /完成时刻分钟数int enterhour;/进入内存时时刻时钟数int enterminute;/进入内存时刻分钟数bool done;/记录是否作业已完成,完成true,否则falsejob,JOB;typedef struct jcb/作业信息结构Intnu/记录作业位于主存分区表的分区号char name10;/作业名int rtime;/运行时间int memory;/申请主存空间jcb,JCB;typedef struct spart/分区表信息结构int num;/分区序号int sadd;/分区始址int space;/分区大小char sit

9、u10;/分区状态spart,SPART;typedef struct pcb /* 定义进程控制块PCB */ char name10; / 进程名 int ntime; / 所需要的运行时间 int stime; /剩余时间pcb,PCB;typedef struct QBNode PCB base; struct QBNode *next;QBNode,*QCB;typedef struct int tip; / 就绪队列时间片 int num; / 就绪队列成员数 QCB front; / 队头指针 QCB rear; / 队尾指针 QueueJOB JWORK5=/定义五个作业&qu

10、ot;JOBA",10, 0,25,15,2,0,0,0,0,false,"JOBB",10,20,30,60,1,0,0,0,0,false,"JOBC",10,30,10,50,3,0,0,0,0,false,"JOBD",10,35,20,10,2,0,0,0,0,false,"JOBE",10,40,15,30,2,0,0,0,0,false;int disk=4;/磁带机数5int memory=100;/系统可用主存100KBint hour=9;/系统时间int minute=55;/9:5

11、5vector<JOB> Jexe;/主存作业队列vector<JOB> Jwait; /后备作业队列vector<JOB> Jdone;/完成作业队列vector<JOB> Jdisk;/输入井作业队列vector<JCB>Qjcb;/作业队列vector<JCB>Qproce;/位于主存的作业队列vector<SPART>Qpart;/分区表状态队列vector<SPART>Qfree;/空闲分区表项vector<int>Pronum;/完成作业的主存分区号vector<SPA

12、RT>:iterator pnext;/记录空闲分区表分配主存后下一个空闲位置intsystime = 0;/系统时间,初始化为0intsysmemory = 100;/主存空间100KBintpnadr = -1;/记录pnext所要指向的分区始址,-1表示无空闲分区float progressflag = 0;/进度条标志位Status InitQueue(Queue &Q)/* 构造空队列Q */ Q.front=(QCB)malloc(sizeof(QBNode); Q.rear=Q.front; if(!Q.front)return -2;Q.num=0;Q.tip=0

13、; Q.front->next=NULL; return 1;Status EnQueue(Queue &Q,PCB &e)/* 插入元素e为Q的新的队尾元素 */ QCB p; p=(QCB)malloc(sizeof(QBNode); if(!p)return -2; p->base=e; p->next=NULL; Q.rear->next=p;Q.rear=p; return 1;Status DeQueue(Queue &Q,PCB &e)/* 若队列非空,则删除Q的队头元素,用e返回其值 */ QCB p; if(Q.fron

14、t=Q.rear)return 0;/* 空队列 */ p=Q.front->next; e=p->base; Q.front->next=p->next; if(Q.rear=p)Q.rear=Q.front; p->next=NULL; free(p); return 1;Status EmptyQueue(Queue &Q)/判断Q是否为空队列,是返回1,否返回0if(Q.front->next=NULL)return 1;elsereturn 0;Queue Al;/进程队列2主存空间分配和回收的设计:循环首次适应法。使用链指针把所有的空闲分

15、区链成一条链,为了实现对空闲分区的分配和链接,在每个分区的起始部分设置状态位、分区的大小和链接各个分区的前向指针,由状态位指示该分区是否分配出去了;同时,在分区尾部还设置有一后向指针,用来链接后面一个分区;分区的中间部分是用来存放作业的空闲内存空间,当该分区分配出去后,状态位改变。设计一个内存空闲分链,内存空闲分区通过空闲分区链来管理,在进行内存分配时系统统优先使用空闲区低端的空间。设计一个空闲分区说明链,设计一个某时刻主存空间占用情况表,作为主存当前使用基础。初始化空闲区和已分配区说明表的值。设计作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收。当一个作业执行完成撤离时,作业所占的

16、分区应该归还给系统。归还的分区如果与其它空闲区相邻,则应合成一个较大的空闲区,登记在空闲区说明表中。此时,相邻空闲区的合并问题,要求考虑四种情况:1)、释放区下邻空闲区(低地址邻接)2)、释放区上邻空闲区(高地址邻接)3)、释放区上下都与空闲区邻接4)、释放区上下都与空闲区不邻接3作业调度算法:先来先服务和短作业优先。(1)先来先服务算法:是按照作业进入输入井的先后次序来挑选作业,先进入输入井的作业优先被挑选,当系统中现有的尚未分配的资源不能满足先进入输入井的作业时,那么顺序挑选后面的作业。(2)短作业优先算法:总是按作业要求运行的时间来选择作业,每次挑选要求运行时间短且资源要求能满足的作业先

17、进入主存执行。(3)程序流程图(仅以先来先服务调度算法说明过程)4进程调度算法:短进程优先和先来先服务。(1)先来先服务算法:是按照作业进入内存的先后次序来创建进程,先进入内存的作业优先被挑选,只要CPU一空闲,立即分配给队首的进程,让它拥有处理机资源,运行。(2)短进程优先算法:总是按进程要求运行的时间来选择进程,每次挑选要求运行时间最短进程先分配CPU执行。(3)程序流程图(仅以先来先服务调度算法说明过程)四编码。相应算法的实现(其中的重点部分):void Pclock(int &hour,int &minute)/时钟函数+minute;if(minute>59)m

18、inute=0;+hour;if(hour>23)hour=0;void Calt(JOB &job,int hour,int minute) /计算完成时刻job.fminute=minute;job.fhour=hour;void PfcfsInput(Queue &Al1,vector<JOB> &Q)/* 建立先来先服务进程队列模块函数 */if(Al1.num != Q.size()/此时有新作业进入内存,则为它建立进程PCB p;while(Al1.num < Q.size()strcpy(p.name,QAl1.num.jname)

19、;p.ntime = QAl1.num.run;EnQueue(Al1,p);Al1.num +;void PsjfInput(Queue &Al1,vector<JOB> &Q) /建立短进程优先进程队列模块if(Al1.num != Q.size()PCB p;QCB ip1,ip2;int id = Al1.num;while(Al1.num < Q.size()/ 有新作业进入内存QCB pi;pi = (QCB)malloc(sizeof(QBNode);strcpy(p.name,QAl1.num.jname);p.ntime = QAl1.num

20、.run;ip1 = Al1.front;ip2 = Al1.front->next;/指向队列的首元素while(ip2 != NULL)if(p.ntime <= ip2->base.ntime)/新进程比正在运行的进程还要短break;ip1 = ip2;ip2 = ip1->next;pi->base = p;/插入进程pi->next = ip2;ip1->next = pi;Al1.num +;while(Al1.rear->next != NULL)/派完序注意要更新队尾指针Al1.rear = Al1.rear->next;

21、vector<JOB>:iterator ip;for(ip = Q.begin();ip != Q.end();+ip)if(ip->jname = Qid.jname)break;vector<JOB> jev(ip,Q.end();/记录将要被删除作业Q.erase(ip,Q.end();/把这部分删除,以便从新排序for(id = 0;id < jev.size();+id)/插入排序ip = Q.begin();while(ip != Q.end()if(jevid.run <= ip->run)break;else+ip;Q.inse

22、rt(ip,jevid);void PRun(Queue &Al1)/进程队列运行模块Pclock(hour,minute); if(EmptyQueue(Al1) = 0)/进程队列非空,则执行Al1.front->next->base.ntime -;/进程队列首元素正在执行if(Al1.front->next->base.ntime < 0)Al1.front->next->base.ntime = 0;int sub = Jexe0.run - Al1.front->next->base.ntime; progressfla

23、g = (float)(sub)/(float)(Jexe0.run);if(Al1.front->next->base.ntime = 0)/进程已完成要撤销该进程PCB e;Jexe0.done = true;DeQueue(Al1,e);Al1.num -;vector<JCB>:iterator itor = Qproce.begin();while(itor != Qproce.end()if(strcmp(itor->name,e.name) = 0)itor->rtime = 0; break;else+itor;void Insert(vec

24、tor<JCB> &Q)/插入作业处理模块vector<SPART>:iterator itor = pnext;sysmemory -= Q0.memory;/分配主存空间if(Q0.memory = itor->space)/空闲分区大小恰好等于作业大小strcpy(Qpartitor->num.situ,Q0.name);/将作业装入内存相应分区中JCB job = Q0;Q.erase(Q.begin();/删除已装进主存的作业队列的作业job.num = pnext->num;/新作业的分区号int sub = Qpart.size(

25、) - 1;if(pnext->num = sub)/新作业恰好位于末尾分区Qproce.push_back(job);/新作业插入主存作业队列末尾elsevector<JCB>:iterator jp;int id;id = pnext->num + 1;jp = Qproce.begin();while(jp->num != id) /找到要插入新作业的位置+jp;Qproce.insert(jp,job);+itor;if(itor = Qfree.end()/指向原空闲分区表的最后一个元素Qfree.erase(pnext);/删除已分配的空闲分区项pne

26、xt = Qfree.begin();/pnext指向Qfree首元素elsevector<SPART>:iterator reg ;/记录要删除项的下一项reg = Qfree.erase(pnext);/删除已分配的空闲分区项pnext = reg;/令pnext指向下一个空闲分区else/空闲分区大小大于作业申请空间大小SPART part;/分割后位于分区表的空闲分区part.num = pnext->num + 1;part.sadd = pnext->sadd + Q0.memory;part.space = pnext->space - Q0.mem

27、ory;strcpy(part.situ,pnext->situ);JCB job = Q0;job.num = pnext->num;int sub = Qpart.size() - 1;if(pnext->num = sub)/新作业装入原分区的最后的空闲分区Qproce.push_back(job);elsevector<JCB>:iterator jp;int id;jp = Qproce.begin();id = pnext->num + 1;while(jp->num != id)/记录作业分区号需要改变的首位置+jp;vector<

28、JCB>:iterator ip;ip = jp;while(ip != Qproce.end()/改变新作业之后作业的分区序号+(ip->num);+ip;Qproce.insert(jp,job);/插入新作业vector<SPART>:iterator spt;vector<SPART>:iterator reg;spt = Qpart.begin();while(spt->sadd !=Qpartpnext->num.sadd)/记录分区表插入Qpart所需要的位置+spt;Qpartpnext->num.space = Q0.me

29、mory;strcpy(Qpartpnext->num.situ,Q0.name);/把作业装进主存相应分区下+spt;reg = spt;while(reg != Qpart.end()/更改其下的分区号+(reg->num);+reg;Qpart.insert(spt,part);/插入part,分区表相应项序号已更改(*pnext) = part;/分割后的空闲分区项+itor;while(itor != Qfree.end()/更改其下的空闲分区号+(itor->num);+itor;Q.erase(Q.begin();/删除已装进主存的作业队列的作业if(pnext

30、 != Qfree.end()/空闲分区表非空pnadr = pnext->sadd;/赋pnext所指空闲分区的分区始址elsepnadr = -1;int DisProce(vector<JCB> &Q)/主存分配处理模块if(Qfree.empty()/无空闲空间分配Q.erase(Q.begin();/直接删除首元素return 0;elseif(Q0.memory <= pnext->space)/空闲分区足够装入作业Insert(Q);return 1;else/搜索其它空闲分区if(Qfree.size() > 1)vector<

31、SPART>:iterator itor;itor = pnext;+itor;while(itor != pnext)if(itor = Qfree.end()itor = Qfree.begin();if(Q0.memory <= itor->space)/Z找到合适的分区break/跳出while循环,停止搜索+itor;if(Q0.memory <= itor->space)pnext = itor;Insert(Q);return 1;Q.erase(Q.begin();/直接删除首元素return 0;void Jsjfpro(vector<JC

32、B> &M) /短作业优先作业调度vector<JOB>:iterator itor;vector<JOB>:iterator reg;itor = Jdisk.begin();while(itor != Jdisk.end()/输入井作业if(itor->hour <= hour && itor->minute <= minute) /当有作业在特定时刻申请进入主存Jwait.push_back(*itor);/将作业插入就绪队列reg = Jdisk.erase(itor);itor = reg;else+ito

33、r;if(!Jwait.empty()/后备队列非空,按短作业排序vector<JOB> jev(Jwait);Jwait.clear();vector<JOB>:iterator ip;for(vector<JOB>:size_type id = 0;id < jev.size();+id)ip = Jwait.begin();while(ip != Jwait.end()if(jevid.run <= ip->run )break;else+ip;Jwait.insert(ip,jevid);M.clear();int i = 0;JC

34、B m;ip = Jwait.begin();while(ip != Jwait.end()m.memory = ip->memory;m.rtime = ip->run;strcpy(m.name,ip->jname);M.push_back(m);+i;+ip;/就绪队列作业,存放已到达而因资源不足而阻塞的作业itor=Jwait.begin();while(itor!=Jwait.end()if(disk>=itor->sign) /当主存空间磁带机足够用时if(DisProce(M) = 1)JOB job=*itor; /复制作业信息job.enterh

35、our = hour;/进入主存时钟数job.enterminute = minute;/进入主存分钟数memory-=itor->memory; /分配主存空间disk-=itor->sign;/分配磁带机reg=Jwait.erase(itor); /删除就绪队列将要插入主存的作业Jexe.push_back(job); /将job插入主存队列尾itor=reg;/指向被删除作业的下一个位置else+ itor;/往主存队列添加作业直至主存空间不足或者就绪作业队列为空else+itor;M.erase(M.begin();void Jfcfspro(vector<JCB&

36、gt; &M)/先来先服务作业调度vector<JOB>:iterator itor;vector<JOB>:iterator reg;itor = Jdisk.begin();while(itor != Jdisk.end()/输入井作业if(itor->hour <= hour && itor->minute <= minute) /当有作业在特定时刻申请进入主存Jwait.push_back(*itor);/将作业插入就绪队列reg = Jdisk.erase(itor);itor = reg;else+itor;i

37、f(!Jwait.empty()M.clear();int i = 0;JCB m;vector<JOB>:iterator ip;ip = Jwait.begin();while(ip != Jwait.end()m.memory = ip->memory;m.rtime = ip->run; strcpy(m.name,ip->jname);M.push_back(m);+i;+ip; /就绪队列作业,存放已到达而因资源不足而阻塞的作业itor=Jwait.begin();while(itor!=Jwait.end()if(disk >= itor-&g

38、t;sign) /当主存空间磁带机足够用时if(DisProce(M) = 1)JOB job= *itor; /复制作业信息job.enterhour = hour;/进入主存时钟数job.enterminute = minute;/进入主存分钟数memory-=itor->memory; /分配主存空间disk-=itor->sign;/分配磁带机reg=Jwait.erase(itor); /删除就绪队列将要插入主存的作业Jexe.push_back(job); /将job插入主存队列尾itor=reg;/指向被删除作业的下一个位置else+ itor;/往主存队列添加作业直

39、至主存空间不足或者就绪作业队列为空else+itor;M.erase(M.begin();void JFinjob()/完成作业处理模块if(!Jexe.empty()/主存作业非空if(Jexe0.done = true) /如果作业已完成 JOB work=*Jexe.begin();/作业完成,要将其插入到完成作业队列Calt(work,hour,minute);memory+=Jexe.begin()->memory; /释放占用的主存空间disk+=Jexe.begin()->sign;/释放磁带机Jexe.erase(Jexe.begin(); /删除主存模块的首作业J

40、done.push_back(work);/添加到完成队列void RecProce()/作业释放处理模块for(vector<int>:size_type i = 0;i < Pronum.size();+i)sysmemory += QpartPronumi.space;/释放主存strcpy(QpartPronumi.situ,"空闲内存");/释放已完成的作业Pronum.clear();vector<SPART>:iterator del;vector<SPART>:iterator it;del = Qpart.begi

41、n();+del;/主存队列首分区分配已给系统while(del != Qpart.end()/更新分区表Qpartif(strcmp(del->situ,"空闲内存") = 0)/指定分区为空闲分区it = del;+it;if(it != Qpart.end()if(strcmp(it->situ,"空闲内存") = 0)/del的下一分区也空闲/合并del和it指向的分区int adr1,adr2;adr1 = del->sadd;adr2 = it->sadd;it->num = del->num;it->

42、;sadd = del->sadd;it->space += del->space;it = Qpart.erase(del);/合并分区,删除无用分区if(pnadr != -1)if(pnadr = adr1)|(pnadr = adr2) /pnext记录的内容恰好指向原分区表的del和it位置pnadr = it->sadd;/记录pnext所要指向it所指位置的始址,以便更新Qfree表elsepnadr = it->sadd;elseif(pnadr = -1)/原空闲分区表为空pnadr = del->sadd;/令pnext指向分区表的第一个

43、空闲分区位置,便于更新Qfreedel = it;else/指向的分区为作业分区,则跳过+del;void MemfreeProce()/主存释放处理模块vector<JCB>Preg;/记录主存作业队列中未完成的作业队列for(vector<JCB>:size_type i = 0;i < Qproce.size();+i)if(Qprocei.rtime = 0)/说明作业已完成Pronum.push_back(Qprocei.num);/记录要释放的主存分区号elsePreg.push_back(Qprocei);Qproce.clear();Qproce

44、= Preg;if(!Pronum.empty()/有作业要释放RecProce();Qfree.clear();/清除Qfree,更新vector<JCB>:iterator itor;itor = Qproce.begin();for(vector<SPART>:size_type i = 1;i < Qpart.size();+i)Qparti.num = i;/更新分区号if(strcmp(Qparti.situ,"空闲内存") = 0)/找到空闲分区Qfree.push_back(Qparti);/记录分区的空闲分区号else if(

45、strcmp(Qparti.situ,itor->name) = 0)/找到与主存作业队列作业匹配的作业位置itor->num = i;/更改主存作业相应的分区号+itor;pnext = Qfree.begin();while(pnext->sadd != pnadr)+pnext;五调试和测试1首先选好程序运行参数:默认是开始时间为9时55分钟,磁带机数4台,内存大小100KB,作业调度算法为短作业优先算法,进程调度算法为短进程优先调度算法。2 在作业输入区输入作业并在输入井输出窗口输出:课程设计要求提纲中提供的默认作业在程序开始运行时已经默认放入了输入井中:3在程序控制

46、区中控制程序的运行:点击开始后,在运行过程中可以观察到正在运行的当前作业进程,现在的时刻,磁带机剩余的的量,主存剩下的容量。并且可以随时暂停和继续程序,或者重置程序,开始新的调度过程。4点击运行:在10时00分,作业JOBA进入内存,下图为内存分配示意图:继续运行,10时28分的全部情况为;5选择短作业调度,短进程调度的运行结果为:选择短作业调度,先来先服务进程调度的运行结果为:选择先来先服务作业调度,短进程调度的运行结果为:选择先来先服务作业调度,先来先服务进程调度的运行结果为:六总结。由周转时间和到达时间的对比可以知道先来先服务算法比较有利于长作业,而不利于短做业。有利于CPU繁忙型的作业

47、,而不利于I/O繁忙型的作业,而目前的大多数事物处理都属于I/O繁忙型作业。而短作业调度算法能有效地降低作业的平均等待时间,提高系统的吞吐量。但是它也有不容忽视的缺点:第一,该算法对长作业不利,更严重的是如果有一长作业进入系统的后配队列,由于调度程序总是优先调度那些短作业,将导致长作业长期不被调度;第二,该算法完全未考虑作业的紧迫程度,因而不能保证长作业会被及时处理;第三,由于作业的长短只是根据用户所提供的估计执行时间而定的,而用户又可能无意或有意的缩短作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。对比进程调度,原理和区别和作业调度相差不大,不再罗嗦叙述了。通过这一次课程设计,

48、我掌握了很多,对调度的过程和机制也有了自己的理解。在使用面向对象的编程方法和可视化编程方面了一定的提高。在三次实验的基础上,加深了对知识的巩固,以及对各方面知识的整合能力。往往一个整体并不是由多个部分的简单的相加,因为很多接口不一致,必须采用自顶向下的分析设计方法,一步一步将系统完善。这也符合了很多经典软件项目的开发设计方法。总之,通过这次课程设计,我学到了很多,我也会继续努力!七参考文献1 计算机操作系统, 汤小丹等 ,西安电子科技大学出版社2 操作系统实验指导书,傅秀芬,广东工业大学(自编)3 计算机操作系统教程 ( 第二版 ), 张尧学、 史美林,清华大学出版社4 现代操作系统,A.S.Tanenbaum 著,陈向群等译机械工业出版社

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!