进程调度模拟实验报告中南财经政法大学.doc_第1页
进程调度模拟实验报告中南财经政法大学.doc_第2页
进程调度模拟实验报告中南财经政法大学.doc_第3页
进程调度模拟实验报告中南财经政法大学.doc_第4页
进程调度模拟实验报告中南财经政法大学.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

进程调度模拟实验实验报告实验序号:1实验项目名称:进程调度模拟实验学号姓名专业、班信管1203实验地点指导教师时间2013-11-1一、实验目的进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间共享CPU的方法。在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的进程调度,目的是加深对进程调度工作的理解,掌握不同调度算法的优缺点。二、实验环境1. 硬件设备:PC机或终端一台 2. 软件环境: Windows操作系统c+编译器vc6.0。三、实验内容实现以下函数:删除进程函数delete_process_by_name( );时间片轮转进程调度函数RR( );优先数进程调度函数HPF( );多级反馈队列进程调度函数MFBQ( );四、设计思路和流程框图时间片轮转法:将对头元素的运行所需时间减去对应的时间片,然后将其从对头删除,放入就绪队列队尾。优先数法:将队列中的元素按照优先数的大小进行直接选择排序,然后在借用FIFO中的思想调度进程。多级反馈轮转法:先创建三级队列,分别令他们的优先数为3,2,1;时间片依次为2,4,8。然后如果第一级队列非空则运行队首进程,将其所需运行时间减去2,删除队首进程,放入第二级队列队尾;如果第一次队列为空,检验第二级队列是否为空,如果第二级队列非空则运行队首进程,将其所需运行时间减去4,删除队首进程,放入第三级队列队尾;如果第二级队列为空,检验第三级队列是否为空,如果第二级队列非空则按照时间片轮转法调度进程,将其所需运行时间减去8,删除队首进程,放入第三级队列队尾。五、源程序(含注释)清单void delete_process_by_name()char process_name20; pcb *p=pcb_ready;pcb *previous_p=pcb_ready; if(p=NULL)printf(run queue is empty,no process can be deleted!n);return; display_process_queue(pcb_ready);printf(enter the process name you want to delete :n);scanf(%s,process_name);while(p!=NULL) /在就绪队列中查找指定名称的进程if(!strcmp(p-process_name,process_name)break;previous_p=p;p=p-next;if(p=NULL) /没有找到指定名称的进程printf(no such a process in ready queue:%snyou typed the wrong namen,process_name);return;else /找到了指定名称的进程if(p=pcb_ready_rear) /找到的进程是就绪队列中最后一个进程pcb_ready_rear=previous_p; previous_p-next=p-next; /将指定名称的进程从就绪队列中删除/思考能不能运行,就绪,等待队列中进程的删除void RR( )pcb *q,*p=pcb_ready; if(pcb_ready=NULL)printf(ready queue is empty,no process to run.n);elsepcb_run=pcb_ready;if(pcb_ready=pcb_ready_rear)pcb_run=pcb_ready;pcb_ready=pcb_ready_rear=NULL;else q=pcb_run; p-process_need_time-=p-process_time_slice;pcb_ready=pcb_ready-next;pcb_run=NULL;pcb_run=p; pcb_ready_rear-next=q; pcb_ready_rear=pcb_ready_rear-next; q-next=NULL;/优先数调度算法void HPF()if(pcb_ready=NULL)printf(ready queue is empty,no process to run.n);elsepcb *p,*q,*max,*ahead;p=pcb_ready;q=p-next;max=p;pcb *temp=pcb_ready-next;while(q)if(max-process_priorityprocess_priority)ahead=p;max=q;p=p-next;q=q-next;if(max!=pcb_ready)ahead-next=max-next;max-next=pcb_ready;pcb_ready=max;elsetemp=temp-next;temp=pcb_ready-next;pcb *aheadtemp=pcb_ready;while(temp-next)p=temp; q=p-next; max=p; while(q) if(max-process_priorityprocess_priority) ahead=p; max=q; p=p-next; q=q-next; if(max!=temp) ahead-next=max-next; max-next=temp; aheadtemp-next=max;aheadtemp=max;else aheadtemp=temp;temp=temp-next; temp = aheadtemp-next; pcb_run=pcb_ready; /注意if(pcb_ready=pcb_ready_rear) /头指针等于尾指针,表示就绪队列里只有一个进程pcb_ready=pcb_ready_rear=NULL;/就绪队列为空elsepcb_ready=pcb_ready-next; /若就绪队列不为空 则指向下一个就绪进程pcb_run-next=NULL; /多级反馈轮转法,包含两个程序PCB *creatMFBQqueue_process( )用以创建多级反馈需要的队列(这里规定为三级);void MFBQ()是该调度算法的主体。主函数main()的case语句中加一条case语句先调用PCB *creatMFBQqueue_process( ),然后多次调用void MFBQ()。在头文件里加入以下语句:PCB *creatMFBQqueue_process( );PCB *pcb_readyzero=NULL; /进程就绪队列头指针PCB *pcb_readyzero_rear=NULL; PCB *pcb_readyone=NULL; /进程就绪队列头指针PCB *pcb_readyone_rear=NULL; PCB *pcb_readytwo=NULL; /进程就绪队列头指针PCB *pcb_readytwo_rear=NULL; /进程就绪队列尾指针 /进程就绪队列尾指针 /进程就绪队列尾指针PCB *creatMFBQqueue_process( )int n;cout请输入进程总数:n; for(int j=0;jnext; system(cls); printf(please enter the following fields:n); printf(| name | start_moment | need_time | time_slice | priority |n); scanf(%s%d%d%d%d,p-process_name,&(p-process_start_moment),&(p-process_need_time),&(p-process_time_slice),&(p-process_priority); p-process_number=(process_number+1)%100; /生成进程编号 process_number+; p-next=NULL; if(p-process_priority=3) if(pcb_readyzero=NULL) pcb_readyzero=pcb_readyzero_rear=p; else pcb_readyzero_rear-next=p; pcb_readyzero_rear=p; else if(p-process_priority=2) if(pcb_readyone=NULL) pcb_readyone=pcb_readyone_rear=p; else pcb_readyone_rear-next=p; pcb_readyone_rear=p; else if(p-process_priority=1) if(pcb_readytwo=NULL) pcb_readytwo=pcb_readytwo_rear=p; else pcb_readytwo_rear-next=p; pcb_readytwo_rear=p; cout初始表格endl; cout这是0号队列即第一级队列:endl; display_process_queue(pcb_readyzero); cout这是1号队列即第二级队列:endl; display_process_queue(pcb_readyone); cout这是2号队列即第三级队列:process_need_time-=8; pcb_readytwo=pcb_readytwo-next; pcb_run=NULL; pcb_run=pcb_readytwo; pcb_readytwo_rear-next=p; pcb_readytwo_rear=pcb_readytwo_rear-next; p-next=NULL;else pcb_run=pcb_readyone; if(pcb_readyone=pcb_readyone_rear)q=pcb_readyone; pcb_readyone-process_need_time-=4; pcb_readyone=pcb_readyone-next=NULL; pcb_readytwo_rear-next=q; pcb_readytwo_rear=pcb_readytwo_rear-next; pcb_readyone=pcb_readyone_rear=NULL; else q=pcb_readyone; pcb_readyone-process_need_time-=4; pcb_readyone=pcb_readyone-next; pcb_readytwo_rear-next=q; pcb_readytwo_rear=pcb_readytwo_rear-next; pcb_run-next=NULL;elsepcb_run=pcb_readyzero;if(pcb_readyzero=pcb_readyzero_rear)q=pcb_readyzero;pcb_readyzero-process_need_time-=2;pcb_readyzero=pcb_readyzero_rear=NULL;pcb_readyone_rear-next=q; pcb_readyone_rear=pcb_readyone_rear-next;elseq=pcb_readyzero;pcb_readyzero-process_need_time-=2;pcb_readyzero=pcb_readyzero-next; pcb_readyone_rear-next=q; pcb_readyone_rear=pcb_readyone_rear-next;pcb_run-next=NULL;cout 运行后 endl;cout这是0号队列即第一级队列:endl;display_process_queue(pcb_readyzero);cout这是1号队列即第二级队列:endl;display_process_queue(pcb_readyone);cout这是2号队列即第三级队列:endl;display_process_queue(pcb_readytwo);六、测试结果以及实验总结1.删除进程测试结果:在主菜单中键入b,进入删除界面如上图,现在输入进程p2,然后按任意键回到主菜单,在主菜单中键入5,得到下图。如图可见,进程中少了p2,按任意键回到主菜单。2.测试时间片轮转法这是此时就绪队列中的进程。按任意键回到主菜单,键入2,得到如下图按任意键回到主菜单然后,键入5后,会发现原来在队列首部的进程p1已经到就绪队列的队尾,并且进程p1的运行所需时间process_need_time,减少了一个process_slice_time,具体如下图:然后按任意键回到主菜单,键入数字7,得到运行队列中的进程情况,如下图:3.优先数调度算法测试如下初始化进程就绪队列如下:按任意键回到主菜单,键入3得的下图按任意键回到主菜单,按下5得到就绪队列按任意键回到主菜单,键入7,得到运行队列4.多级反馈轮转法首先先调用创建三级队列的算法,键入4然后键入回车键输入P1 3 13 2 3P2 5 20 2 3P3 9 31 4 2P4

温馨提示

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

评论

0/150

提交评论