广工操作系统实验报告.doc
《广工操作系统实验报告.doc》由会员分享,可在线阅读,更多相关《广工操作系统实验报告.doc(34页珍藏版)》请在三一办公上搜索。
1、 计算机 学院 软件工程 专业 2 班_组、学号 3110006294 姓名 黄煜财 协作者 无 教师评定_实验题目 进程调度 一、实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。二、实验内容和要求设计一个有 N个进程共行的进程调度程序。要求采用最高优先数优先算法,时间片轮转算法,多级队列调度算法这三种算法。 每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程
2、的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所有的进程都完成为止。三、实验原理
3、及设计方案1、进程调度算法:采用多级反馈队列调度算法。其基本思想是:当一个新进程进入内在后,首先将它放入第一个队列的末尾,按FCFS原则排队等待高度。当轮到该进程执行时,如能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚为完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行,以此类推。2、实验步骤:(1)按先来先服务算法将进程排成就绪队列。(2)检查所有队列是否为空,若空则退出,否则将队首进程调入执行。(3)检查该运行进程是否运行完毕,若运行完毕,则撤消进程,否则,将该进程插入到下一个逻辑队列的队尾。(4)是否再插入新的进程,若是则把它放到第一逻辑队列
4、的列尾。(5)重复步骤(2)、(3)、(4),直到就绪队列为空。四、程序流程图进程完成,撤消该进程就绪队列首进程投入运行时间片到,运行进程已占用CPU时间+1运行进程已占用CPU时间已达到所需的运行时间把运行进程插入到下一个队列的队尾插入新的进程开始初始化PCB,输入进程信息所有队列都为空各进程按FCFS原则排队等待调度五、重要数据结构及难程序列表typedef struct pcb/进程管理块char name10;/进程名字char state;/进程状态int queue;/进程所在的队列int ntime;/进程需要运行的时间int rtime;/进程已经运行的时间int etime;
5、/进程在本队列可运行的时间片struct pcb *link;PCB;PCB*ready = NULL, *pinsert = NULL, *pfend = NULL,*p =NULL;/就绪队列,进程插入位置的变量void insert()/插入进程if(!ready )ready = p;pfend = p;pinsert = p;else if(ready -queue = 1)/第一队列存在p-link = pfend-link;pfend-link = p;pfend = p;findpos();elsep-link = ready;ready = p;findpos();void
6、sort()/调整进程队列if(!ready-link |ready-queue link-queue) return;p = ready -link;ready -link = pinsert -link;pinsert -link = ready;pinsert = ready;ready = p;if (ready & ready - queue = pinsert -queue)findpos();六、运行结果七、分析与小结在这个多级反馈的实验中,我采取了用一条实际上的链表队列来模拟多个逻辑上的队列,通过维护几个链表的状态信息来找到每个进程运行完后应该插入的地方,还有一个标志位Fend
7、用来表明新插入的队列的位置。虽然实验原理很简单,但是在编写代码的过程中遇到了不少的问题,在两个小时之内已经完成的大体代码的编写,但是之中存在不少的问题,导致了用了差不多四个小时的时间去调试才把它弄好,这主要归咎于在开始设计代码的不太合理,在后期使得代码结构有些混乱,使得调试更加的麻烦,以及对编程的不熟悉。通过这个实验不仅使我对进程的调度算法有了更深的认识,使得理论知识得到的实践,也使我的编程能力得到了进一步提高。 计算机 学院 软件工程 专业 2 班_组、学号 3110006294 姓名 黄煜财 协作者 无 教师评定_实验题目 作业调度 一、 实验目标本实验要求学生模拟作业调度的实现,用高级语
8、言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。二、实验内容和要求为单道批处理系统设计一个作业调度程序(1)、编写并调试一个单道处理系统的作业调度模拟程序。(2)、作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 先来先服务就是每次调度都是从后备作业队列中,选择一个最先进入该队列的作业,将它调入内存,为它分配资源、创建进程,然后放入就绪队列,投入运行,一直运行到完成或发生某事件而阻塞后,才放弃处理。最短作业优先是从后备队列中选择一个估计运行时间最短的作业,将它调入内存运行并一直执行到
9、完成,或发生某事件而被阻塞放弃处理时,再重新调度。 响应比高者优先是通过计算出作业的响应比,按响应比高而进行调度的,其计算公式是:优先权(等待时间+要求服务时间)/要求服务时间.(3)、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。(4)、每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待
10、W。(5)、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。三、实验原理及设计方案1、实验原理 先来先服务算法:是按照作业进入输入井的先后次序来挑选作业,先进入输入井的作业优先被挑选,当系统中现有的尚未分配的资源不能满足先进入输入井的作业,那么顺序挑选后面的作业。 FCFS算法简单易行,但性能却不大好。短作业优先算法:总是按照作业要求运行时间来选择作业,每次挑选要求作业执行时间短且资源要求能满足的作业优先分派处理机,通常后来的短作业不抢先正在执行的作业。SJF改善平均周转时间和平均带权周转时间
11、,缩短作业的等待时间 ,提高系统的吞吐量,但对长作业非常不利。响应比高者优先算法:最高响应比优先法(HRN,Highest Response_ratio Next)是对FCFS方式和SJF方式的一种综合平衡。FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。因此,这两种调度算法在某些极端情况下会带来某些不便。HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 响应比R定义如下: R =(W+T)/T = 1+W/T 其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时
12、间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W / T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRN方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。2、 设计方案struct source /*定义资源需求结构*/char memery5; /*主存需求*/int machine; /*磁带机数量*/;struct jcb /* 定义作业控
13、制块PCB */ char name10; char state; /* 状态 */ double super; /* 响应比优先权 */ int ntime; /* 需要运行时间 */ int rtime; /* 开始运行时间 */int ptime; /*提交时间*/int ftime; /*完成时间*/ source *needsources; /*资源需求链*/ struct jcb* link; /* 下一个作业控制块的地址 */*ready=NULL,*run,*p;四、程序流程图12响应比高优先算法短作业优先算法先来先服务算法初始化作业JCB和资源source,所有作业按照先后顺
14、序排列,作业提交时间为系统默认时间p-ptime=Systemtim,作业完成时间p-ftime=03作业调度算法?开始YNNNYY用响应比高优先算法,先计算所有作业高响应比,调度队响应比最高的首作业投入运行,更改作业状态为R,记录作业开始运行时间和完成时间,修改下一作业指针等,计算运行作业i的完成时刻,周转时间和带权周转时间计算并打印这组作业的平均周转时间及带权平均周转时间用短作业算法调度需求时间最短的作业投入运行,更改作业状态为R,记住作业开始运行时间,修改下一作业指针等,计算运行作业i的完成时刻,周转时间和带权周转时间结束等待队列空?释放该作业占用资源作业运行完毕?用先来先服务算法调度队
15、首作业投入运行,更改作业状态为R,记住作业开始运行时间,修改下一作业指针等,计算运行作业i的完成时刻,周转时间和带权周转时间五、重要数据结构及难程序列表#include #include #include #define getpch(type) (type*)malloc(sizeof(type) int Select;int Systemtime = 0; /*系统初始时间*/int JCBnum = 0; /*总作业数*/int JCBtime = 0; /*总周转时间*/double JCBtotaltime =0; /*总带权周转时间*/struct source /*定义资源需求结
16、构*/char memery5; /*主存需求*/int machine; /*磁带机数量*/;struct jcb /* 定义作业控制块PCB */ char name10; char state; /* 状态 */ double super; /* 响应比优先权 */ int ntime; /* 需要运行时间 */ int rtime; /* 开始运行时间 */int ptime; /*提交时间*/int ftime; /*完成时间*/ source *needsources; /*资源需求链*/ struct jcb* link; /* 下一个作业控制块的地址 */*ready=NULL
17、,*run,*p; typedef struct jcb JCB;typedef struct source SOURCE;void sort() /* 建立对进程进行优先级排列函数*/ JCB *first, *second,*temp; int insert=0; switch(Select)case 1: /*先来先去服务算法*/if(ready=NULL) /*队首空插入队首*/p-link=ready;ready=p;else /*否则插入队尾*/first=ready;second=ready-link;while(second!=NULL)first=first-link;sec
18、ond=second-link;first-link=p;break;case 2: /*最短作业优先算法*/ if(ready=NULL)|(p-ntime)ntime) /*队首*/ p-link=ready; ready=p; else /* 往后搜索适当的位置插入*/ first=ready; second=first-link; while(second!=NULL) /*插入队伍中间*/ if(p-ntime)ntime) p-link=second; first-link=p; second=NULL; insert=1; else first=first-link; secon
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告
链接地址:https://www.31ppt.com/p-3090778.html