操作系统原理---进程调度试验报告_第1页
操作系统原理---进程调度试验报告_第2页
操作系统原理---进程调度试验报告_第3页
操作系统原理---进程调度试验报告_第4页
操作系统原理---进程调度试验报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、、实验目的通过对进程调度算法的设计,深入理解进程调度的原理.进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位.进程调度分配处理机,是限制协调进程对 CPU的竞争,即按一定的调度算法从就绪队列中选中 一个进程,把CPU的使用权交给被选中的进程.进程通过定义一个进程限制块的数据结构PCB 来表示;每个进程需要赋予进程ID、进程到达时间、进程需要运行的总时间的属性;在RR中,以1为时间片单位;运行时,输入假设干个进程序列,根据时间片输出其执行序列.二、实验环境VC+6.0三、实验内容实现短进程优先调度算法SPF和时间片轮转调度算法RR提示:1先来先效劳FCFS 调度算法

2、原理:每次调度是从就绪队列中,选择一个最先进入就绪队列的进程,把处理器分配给该进程,使之得到执行.该进程一旦占有了处理器,它就一直运行下去,直到该进程完成或因发生事件而阻 塞,才退出处理器.将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并根据先来先效劳的方式进行调度处理,是一种最普遍和最简单的方法.它优先考虑在系统中等待时间最长的作业,而不管 要求运行时间的长短.根据就绪进程进入就绪队列的先后次序进行调度,简单易实现,利于长进程,CPU繁忙型作业,不利于短进程,排队时间相对过长.222时间片轮转调度算法RR原理:时间片轮转法主要用于进程调度.采用此算法的系统,其程序就绪队列往往按

3、进程到达的时间来排序.进程调度按一定时间片(q)轮番运行各个进程进程按到达时间在就绪队列中排队,调度程序每次把CPU分配给就绪队列首进程使用一个时间片,运行完一个时间片释放 CPU,排到就绪队列末尾参加下一轮调度,CPU分配给就绪队列的首进程.浙讲样 就绪队炭厂|调戌 駆JS机L 冋 I I唤聲I阮塞队列殂塾固定时间片轮转法:1所有就绪进程按 FCFS规那么排队.2处理机总是分配给就绪队列的队首进程.3如果运行的进程用完时间片,那么系统就把该进程送回就绪队列的队尾,重新排队.4因等待某事件而阻塞的进程送到阻塞队列.5系统把被唤醒的进程送到就绪队列的队尾.可变时间片轮转法:1进程状态的转换方法同

4、固定时间片轮转法.2响应时间固定,时间片的长短依据进程数量的多少由T = N X( q + t )给出的关系调整.3根据进程优先级的上下进一步调整时间片,优先级越高的进程,分配的时间片越长.多就绪队列轮转法:(3)算法类型r<FCFS)價虞算谨L不善时闵片轮鞋r推占式优丸枫非推占式嫌龙叔 静态躯L钛I动态优北挟 年IH间片疑辆Yj多觴直墳佻列算(4)模拟程序可由两局部组成,先来先效劳(FCFS )调度算法,时间片轮转.流程图如下(5)按模拟算法设计程序,运行设计的程序,观察得到的结果.四、实验结果(含程序、数据记录及分析、实验总结等)MFC的设计框如下:实验代码以及分析:RR 算法实现分

5、析:先根据到达时间对进程进行排序,然后调度时,超出时间片的就放至队尾,然 后继续调度.变量添加:int m_id; 用来输入进程 ID int m_reachtime; 用来输入进程到达时间 int m_run; 用来输出正在运行的进程 int m_runtime; 用来输入进程运行时间 int m_timeslice; 用来输入时间片 CString m_result; 用来输出最终调度队列 CString m_readyqueue; 用来输出等待队列 CString m_pcb; 用来显示输入的进程信息 数据存储:利用结构体来存储进程信息IDC_EDIT_IDIDC_EDIT_REACHT

6、IMEIDC_EDIT_RUNIDC_EDIT_RUNTIMEIDC_EDIT_TIMELICEIDC_EDIT_RESULTIDC_EDIT_READYQUEUEIDC_EDIT_PCBstruct PCBint id;int reachtime;int runtime;pcb1000,pcb11000;添加进程:void CMfcDlg:OnADD()/ TODO: Add your control notification handler code here UpdateData(true);CString str1;pcbNO.id=m_id; pcbNO.reachtime=m_re

7、achtime; pcbNO.runtime=m_runtime;str1.Format("%-8d %-8d %-8drn",m_id,m_reachtime,m_runtime); m_pcb+=str1;m_id=0; m_id=0; m_reachtime=0;m_runtime=0;NO+;UpdateData(false);RR 算法void CMfcDlg:OnRr()/ TODO: Add your control notification handler code here UpdateData(true);m_result.Empty();UpdateD

8、ata(FALSE); UpdateWindow();int NO2=NO;int a1000;for(int i=0;i<NO;i+)ai=pcbi.reachtime;int temp;/冒泡排序for(i=1;i<NO;i+)for(int j=NO-1;j>=i;j-) if(aj<aj-1) temp=aj-1; aj-1=aj; aj=temp;for(i=0;i<NO;i+)for(int j=0;j<NO;j+)if(ai=pcbj.reachtime)readyqueuei=pcbj.id;pcb1i=pcbj; / 按进程到达时间进行排序

9、, 并把排好序的进程队列赋给临 时进程队列 pcb1 .for(i=0;i<NO;i+)if(pcb1i.runtime<=m_timeslice) m_run=pcb1i.id;CString str1;for(int k=i+1;k<NO;k+) str1.Format("%d ",readyqueuek); m_readyqueue += str1; m_readyqueue += " "UpdateData(FALSE);UpdateWindow(); m_readyqueue.Empty();Sleep(pcb1i.runti

10、me*1000);elsepcb1NO=pcbi; readyqueueNO=pcb1NO.id; pcb1NO.runtime -= m_timeslice;NO+;m_run=pcb1i.id;CString str1;for(int k=i+1;k<NO;k+) str1.Format("%d ",readyqueuek); m_readyqueue += str1; m_readyqueue += " "UpdateData(FALSE);/如果进程运行时间小于时间片/如果进程运行时间大于时间片/将该进程放至临时进程队列尾部/改变等待队列/运行时间改变/进程数增加UpdateWindow();m_readyqueue.Empty();Sleep(pcb1i.runtime*1000);m_run=O;CStri ng str;for( i=0;i<NO;i+)str.Format("%d ,readyqueuei);m_result += str;m_result +=""/恢复以前的进程数,便于进行其他算法.NO=NO2;UpdateData(false);实验结果:使用RR算法对进程进行调度测试中使用的数据:时间片是2进程到达时间运行时间111222333结果如下:实验总结:在该实验完

温馨提示

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

评论

0/150

提交评论