ImageVerifierCode 换一换
格式:DOC , 页数:14 ,大小:294.50KB ,
资源ID:233877      下载积分:15 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/233877.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(优先调度时间片轮转.doc)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

优先调度时间片轮转.doc

1、计算机操作系统课程实验报告姓名: 学号:班级:完成日期: 实验题目进程调度模拟程序实验形式小组合作 独立完成 R设计目的1加深对进程、进程控制块及进程队列等概念的理解。2了解优先数调度算法、时间片轮转算法、先来先服务调度算法、短作业优先调度算法的具体实施办法,加深对进程管理各部分内容的理解。设计预备知识1.进程管理。2.优先数调度算法、时间片轮转算法、先来先服务调度算法、短作业优先调度算法。设计内容设计一个至少包含两种调度算法的模拟进程调度程序(已给出优先数算法模拟进程调度程序,要求再加进至少一种调度算法,模拟程序的设计可以在给出的优先数算法的基础上添加,也可以自行设计,开发语言可自选)。设计

2、的模拟程序要求如下:(1) 设计适合所选算法的进程控制块PCB表结构。(2) 对不同的算法建立进程就绪队列。(3) 设计的程序中能显示或打印进程控制块的动态变化过程。一、设计理论描述a) 优先数调度算法为了照顾紧迫型作业,使之在进入系统后便获取优先处理,引入了最高优先权优先调度算法,此算法常被用于批处理系统中,作为作业调度算法木,也作为多钟操作系统中的进程调度算法,还可以用于实时操作系统中。当把该算法用于作业调度时,系统将从后备队列中选择若干优先权最高的作业装入内存。b) 时间片轮转调度算法在早期的时间片轮转法中,系统将所有的就绪进程按照先来先服务的原则排成一个队列,每次调度时,把CPU分配桂

3、队首进程,并执行一个时间片。当执行时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号停止该进程的执行,并将它送往就绪队列的队尾。二、 设计思想、设计分析及数据结构模型1、 优先数调度算法(1)设计思想按某种原则对就绪队列中的每个进程赋予一个优先级,进程调度时则根据进程的优先级确定选择顺序,即把处理机分配给就绪队列中优先级高的进程。由于进程的优先级别通常用数字表示,所以又称为进程的优先数。有些操作系统中规定优先数愈小,其优先级愈高,本设计研究的是优先数愈高,优先级愈高的情况。优先数调度算法一般可以采用抢占式优先调度算法或非抢占优先调度算法。在采用抢占式优先调度算法时,系统同样是把处理

4、机分配给优先数最高的进程,使之执行。但在其执行期间,只要又出现了另一个其优先数更高的进程,进程调度程序就立即停止当前进程(原优先数最高的进程)的执行,重新将处理机分配给新到的优先数最高的进程。在采用非抢占式优先调度算法时,系统一旦把处理机分配给就绪队列中优先数最高的进程后,该进程便一直执行下去,直至结束;或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先数最高的进程。这种调度算法主要用于批处理系统中;也可用于某些对实时性要求不严的实时系统中。(2)设计分析进程调度所依赖的数据结构通常是调度队列,由于调度的原因不同,在单处理器系统中设置了多种等待队列;只有就绪队列中的进程能

5、够获得处理器而最终运行,其他队列中的进程从队列中调度出来后,必须进入就绪队列才能分配处理器。(3)数据结构模型用结构体变量定义进程控制块的优先级,进程需要占用CPU的时间(cputime),运行后还需要CPU的时间,进程的状态,及指向pcb结构体变量的指针。具体代码如下:typedef struct node char name10; /*进程标识符*/ int prio; /*进程优先数*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要的时间*/ char state; /*进程的状态*/ struct node *next; /*链指

6、针*/PCB;进程名next优先数占用CPU时间到完成还要的时间状态2、 时间片轮转调度算法(1) 设计思想时间片轮转的主要思想就是按顺序为每一个进程一次只分配一个时间片的时间。算法要完成的功能就是将各个进程按照时间片轮转运行的动态过程显示出来。时间片轮转算法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。时间片的大小从几ms到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将其送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就

7、可以保证就绪队列中的所有进程在一定给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定时间内响应所有用户的请求。(2) 设计分析每个进程用一个PCB表示。PCB包括进程名,到达时间,运行时间,剩余时间,进程状态,链接指针。其中,进程名,到达时间和运行时间由用户输入,剩余时间的初值等于运行时间。为简单起见,进程状态设为三种:就绪,运行和完成。链接指针指向下一个进程的PCB;按照进程到达的先后顺序排成一个队列。设置一个队头指针指向队列中第一个进程,并设置一个队尾指针指向队列中的最后一个进程;执行调度时,先选择队首的第一个进程运行。另外设置一个指向当前运行进程的指针。(3) 数据结构模

8、型用结构体变量定义进程控制块的优先级,进程需要占用CPU的时间(cputime),运行后还需要CPU的时间,进程的状态,分配cpu时间,执行次数及指向pcb结构体变量的指针。具体代码如下:typedef struct node char name10; /*进程标识符*/ int prio; /*进程优先数*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要的时间*/ char state; /*进程的状态*/ int round; /*分配cpu的时间片*/ int count; /*执行次数*/struct node *next; /*

9、链指针*/PCB;进程名next优先数占用CPU时间到完成还要的时间状态分配CPU的时间片执行次数三、变量说明及程序流程图优先数调度算法:时间片轮转调度算法:四、源代码#include#include#include#includetypedef struct node char name10; /*进程标识符*/ int prio; /*进程优先数*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要的时间*/ char state; /*进程的状态*/ struct node *next; /*链指针*/ int round; /*分配c

10、pu的时间片*/ int count; /*执行次数*/PCB;PCB *finish,*ready,*run; /*队列指针*/int N; /*选择数*/*将就绪队列中的第一个进程投入运行*/void firstin() run=ready; /*就绪队列头指针赋值给运行头指针*/ run-state=R; /*进程状态变为运行态*/ ready=ready-next; /*就绪对列头指针后移到下一进程*/void prt1() /*标题输出函数*/if(N=1)printf( name cputime needtime priority staten);elseprintf( name

11、cputime needtime state countn);void prt2(PCB *q) /*进程PCB输出*/if(N=1)printf( %-10s%-10d%-10d%-10d %cn,q-name, q-cputime,q-needtime,q-prio,q-state);elseq-count=q-cputime/q-round; printf( %-10s%-10d%-10d %ct%-10dn,q-name,q-cputime,q-needtime,q-state,q-count);void prt() /*输出函数*/ PCB *p; prt1(); /*输出标题*/

12、if(run!=NULL) /*如果运行指针不空*/ prt2(run); /*输出当前正在运行的PCB*/ p=ready; /*输出就绪队列PCB*/ while(p!=NULL) prt2(p); p=p-next; p=finish; /*输出完成队列的PCB*/ while(p!=NULL) prt2(p); p=p-next; getch(); /*按任意键继续*/void insert(PCB *q) /*优先数的插入算法*/ PCB *p1,*s,*r; int b; s=q; /*待插入的PCB指针*/ p1=ready; /*就绪队列头指针*/ r=p1; /*r做p1的前

13、驱指针*/ b=1; while(p1!=NULL)&b) /*根据优先数确定插入位置*/ if(p1-prio=s-prio) r=p1; p1=p1-next; else b=0; if(r!=p1) /*如果条件成立说明插入在r与p1之间*/ r-next=s; s-next=p1; else s-next=p1; /*否则插入在就绪队列的头*/ ready=s; void create() /*优先数创建初始PCB信息*/ PCB *p; int i,time; char na10; ready=NULL; /*就绪队列头指针*/ finish=NULL; /*完成队列头指针*/ run=NULL; /*运行队列指针*/ printf(nn输入5个进程标识和所需时间n); /*输入进程标识和所需时

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1