进程调度算法实验报告doc_第1页
进程调度算法实验报告doc_第2页
进程调度算法实验报告doc_第3页
进程调度算法实验报告doc_第4页
进程调度算法实验报告doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、进程调度算法实验报告篇一:操作系统进程调度算法模拟实验报告进程调度算法模拟专业:XXXXX学号:XXXXX姓名:XXX实验日期:20XX 年 XX月XX日一、实验目的通过对进程调度算法的模拟加深对进程概念和进程调 度算法的理解。二、实验要求编写程序实现对5个进程的调度模拟,要求至少采用两 种不同的调度算法分别进行模拟调度。三、实验方法内容1.算法设计思路将每个进程抽象成一个控制块PCB,PCB用一个结构体 描述。构建一个进程调度类。将进程调度的各种算法分装在一 个类中。类中存在三个容器,一个保存正在或未进入就绪队列的进程, 一个保存就绪的进程,另一个保存已完成的进程。还有一个 PCB实例。主要

2、保存正在运行的进程。类中其他方法都是围 绕这三个容器可以这个运行中的PCB展开。主要用到的技术是STL中的vector以维护和保存进程 容器、就绪容器、完成容器。当程序启动时,用户可以选择不同的调度算法。然后用 户从控制台输入各个进程的信息,这些信息保存到进程容器中。进程信 息输入完毕后,就开始了进程调度,每调度一次判断就绪队 列是否为空,若为空则系统时间加一个时间片。判断进程容 器中是否有新的进程可以加入就绪队列。2.算法流程图 主程序的框架:();/先来先服务();/最短进程优先调度/简单时间片轮转/最高优先 数优先/输入进程信息();.m_WaitQueue.empty()|.m_Pro

3、cessQueue.empt()();();进程调度过程:;算法中用到的数据结构struct fcfs/先来先服务算法从这里开始char name10;float arrivetime;float servicetime;float starttime;float finishtime;float zztime;float dqzztime;;/定义一个结构体,里面包含的有一个进程相关的信 息主要的常量变量vectorm_ProcessQueue;/进程输入队列vectorm_WaitQueue;/ 进程就绪队列 vectorm_FinishQueue;/ 完 成队 列 vector:iter

4、ator m_iter;/迭代器PCB m_runProcess;/运行中的进程int m_ProcessCount;/进程数 float m_RunTime;/运 行时间int m_tagIsRun;/是否在运行标志。表示正在运行, 表示没有float m_TimeSlice;/时间片大小int m_TimeSliceCount;/指时间片轮转中一次分到的 时间片个数char m_SchedulerAlgorithm;/调度算法主要模块void PCBInput();/输入进程信息void PCBSort();/对进程控制块按照优先级排序(采用 冒泡排序)void ProcessSelect

5、();/若当前就绪队列不为空则根 据选择的调度算法开始调度。否则,系统时间void PCBDisplay();/打印当前状况下。就绪队列、完成队列、 运行中的进程信息void ProcessRun();/进程运行一次。运行时间加个时 间片。并判断进程是否达到完成条件。若是则void ProcessQueueProcess();/查看当前时间下,有无进程加入。 若有则把该进程调入就绪队列void ProcessDispatch();/ 进程分派,进程执行完成后决定进程该进入哪个队列(就绪、 完 成 ) void TimePast() m_RunTime +=m_TimeSlice; Proces

6、sQueueProcess();/当前系统时间加个时间voidSchedulerStatistics();/调度统计,计算周转时间等 void FCFS();/先来先服务void SJF();/最短进程优先调 度void RR();/简单时间片轮转void PD();/最高优先数 优先加.以等待新的进程到来ProcessStatus=f.否则为w;片,并检查是否有新的进程加入四、实验代码#include #include #includeusing namespace std;struct fcfs/先来先服务算法从这里开始char name10;float arrivetime;float

7、servicetime;float starttime;float finishtime;float zztime;float dqzztime;/定义一个结构体,里面包含的有一个进程相关的信fcfs a100;void input(fcfs *p,int N) int i;cout for(i=0;i void Print(fcfs *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) int k;printf(nn调用先来先服务算法以

8、后进程运行的顺 序是:);printf(s,);for(k=1;k%s,);cout printf(t进程名到达时间服务时间 开始时间结束时间周转时间带权周转时间n);for(k=0;k printf(t%st%-.2ft %-.2ft%-.2ft %-.2ft %-.2f t %-.2fn,,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk .zztime,pk.dqzztime);getchar(); /此处必须要有这个函数,否则就看不到 显示器上面的输出,可以看到的结果只是一闪而

9、过的一个框、 剪void sort(fcfs *p,int N) /排序篇二:进程的调度算法实验报告-计算机操作系统教程(第三 版)进程的调度算法实验报告(完整版)一、实验目的:用高级语言编写和调试一个简单的进程调度程序。加深 了解有关进程控制块,进程队列的概念,并体会和了解优先 数和时间片调度算法的具体实施方法。二、实验内容:根据不同的调度算法模拟操作系统对进程的调度。调度 算法有二种:动态优先级法和时间片循环法。1、设计进程控制块PCB表结构,分别适用优先数调度 算法和循环时间片轮转算法。2、PCB结构通常包括以下信息:进程名、进程优先数、 轮转时间片、进程的CPU时间,进程状态等。根据调

10、度算法 不同,PCB结构可作适当的调整。3、建立进程队列。对不同的算法编制不同的入链程序 编制两种进程调度算法:a、优先数调度;b、循环时间轮转 调度三、实验设计实验原理:算法思想:以时间片为计量单位A:优先数调度算法1)系统初始化时给每一个进程赋一个NEEDTIME和初始 PRI。并按优先数入队。2)系统每次选定一个优先级最高的进程投入运行,进 程每执行一次,优先数减2,并将它的进程占用的CPU时间 加10,进程到完成还要的CPU时间减10。3)每当一个进程运行一个时间片后,系统根据它的 CPUTIME来判断它是否已经结束,若CPUTIME0,那么将它重 新排入就绪队列。4)如果系统中尚有进

11、程没有运行完毕,那么转入2)。B:循环时间片轮转算法1)系统初始化时给每一个进程赋以一个NEEDTIME,并 将所有进程按进入的次序排成一个队列。2)取队头进程,并投入运行。3)采用相对固定时间片(ROUND),进程每执行一次, 进程占用的CPU时间加ROUND,进程到完成还要的CPU时间 减ROUND。并排到就绪队列的尾部。4)如果当前进程的NEEDTIME0,那么将它排到队尾。5)如果尚有进程在队列中,那么转入2)编程语言、主要数据结构和意义使用VC6.0语言PCB结构:name进程名pri /round进程优先数/进程轮转时间片cputime进程占用的CPU时间needtime进程到完成

12、还要的时间state进程状态(假设状态为Ready、Run、Finish)next链指针void showlist(link,char*,int);/ 显示进程队列void instlist(link,link);/按优先数插入进程void appenlist(link,link);/按就绪先后加入进程link gethead(link);/取队首进程流程图(优先数算法)源程序(含主要注释)#include stdlib.h#include iostream.h#include string.hconst int MAX= 5;const int ROUND=2;constchar*ITOA1

13、0 = 0,1,2,3,4,5,6,7,8,9;typedef enum flagReady,Run,Finish;struct pcbpublic:char name10;/进程名int pri; /进程优数int round; /进程轮转时间片int cputime; 进程占用的CPU时间int needtime; /进程到完成还要的CPU时间flag state; /进程状态struct pcb *next;/链指针;typedef struct pcb plist;typedef plist *link;void main()void showlist(link,char*,int);

14、/ 显示进程队列 v oid instlist(link,link);/ 按优先数插入进程 void appenlist(link,link);/按就绪先后加入进程link gethead(link);/取队首进程int num=MAX+1;char str10;link ptr,head1,head2;int i;int j=0;head1=new plist;head1-next=NULL;/就绪队首指针head2=new plist;head2-next=NULL;/完成队首指针while (numMAX)|(num / printf(请输入演示进程数n);cout / scanf(d,

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

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

17、转调度算法RR原理:时间片轮转法主要用于进程调度。采用此算法 的系统,其程序就绪队列往往按进程到达的时间来排序。进 程调度按一定时间片)轮番运行各个进程.进程按到达时间在就绪队列中排队,调度程序每次把CPU分配给就绪队列首进程使用一个时间片,运行完一个时 间片释放CPU,排到就绪队列末尾参加下一轮调度,CPU分 配给就绪队列的首进程。固定时间片轮转法:1所有就绪进程按FCFS规则排队。2处理机总是分配给就绪队列的队首进程。3如果运行的进程用完时间片,则系统就把该进程送 回就绪队列的队尾,重新排队。4因等待某事件而阻塞 的进程送到阻塞队列。5系统把被唤醒的进程送到就绪队列的队尾。可变时间片轮转法

18、:1进程状态的转换方法同固定时间片轮转法。2响应时间固定,时间片的长短依据进程数量的多少 由T = N X ( q+ t )给出的关系调整。3根据进程优先级的高低进一步调整时间片,优先级 越高的进程,分配的时间片越长。多就绪队列轮转法:算法类型模拟程序可由两部分组成,先来先服务(FCFS) 调度算法,时间片轮转。流程图如下:按模拟算法设计程序,运行设计的程序,观察得 到的结果。四、实验结果(含程序、数据记录及分析、实验总结等)MFC的设计框如下:实验代码以及分析:RR算法实现分析:先根据到达时间对进程进行排序, 然后调度时,超出时间片的就放至队尾,然后继续调度。变量添加:int m_id; I

19、DC_EDIT_ID用来输入进程IDint m_reachtime; IDC_EDIT_REACHTIME 用来输入进程到达时间 int m_run;IDC_EDIT_RUN用来输出正在运行的进程int m_runtime;IDC_EDIT_RUNTIME用来输入进程运行时间int m_timeslice; IDC_EDIT_TIMELICE 用来输入 时间片CString m_result; IDC_EDIT_RESULT用来输出最终调度队列CString m_readyqueue;IDC_EDIT_READYQUEUE用来输出等待队列CString m_pcb;IDC_EDIT_PCB用来显示输入的进程信息数据存储:利用结构体来存储进程信息stru

温馨提示

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

评论

0/150

提交评论