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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

进程调度75694.doc

1、第 1 页共 9 页实 验 报 告课程名称: 操作系统(nachos)实验项目名称:进程调度 实验时间:2010-9-8 班级: 姓名 实 验 目 的: 用高级语言编写和调试一个有 N 个进程并行的进程调度程序,以加深对进程的概念及进程调度算法的理解。实 验 环 境:PC 机、 windows2000 操作系统、 Turbo C 2.0 / VC+6.0实 验 内 容 及 过 程: 设计一个有 N 个进程并行的进程调度程序。进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。具体描述如下:每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如

2、下信息:进程名、优先数、到达时间、需要运行时间、已用 CPU 时间、进程状态等等。 分析:进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生) 。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait) 、运行 R(Run) 、或完成F(Finish)三种状态之一。 就绪进程获得 CPU 后都只能运行一个时间片。用已占用 CPU 时间加 1 来表示。 如果运行一个时间片后,进程的已占用 CPU 时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用 CPU 时间还未达所需要的运行时间,也就是进程还需要

3、继续运行,此时应将进程的优先数减 1(即降低一级) ,然后按照优先数的大小把它插入就绪队列等待 CPU。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。 成 绩:指导教师(签名):第 2 页共 9 页重复以上过程,直到所要进程都完成为止。调度算法的参考流程图如下:实验步骤1编写一个有 N 个进程并行的进程调度程序。2在上机环境中输入程序,调试,编译。3设计输入数据,写出程序的执行结果。4根据具体实验要求,填写好实验报告。实验结果及分析第 3 页共 9 页第 4 页共 9 页分析:先为每个进程创建一个结点结构体:typedef struct nodecha

4、r name10; /*进程标识符*/int prio; /*进程优先数*/int round; /*进程时间轮转时间片 */int cputime; /*进程占用 CPU 时间*/int needtime; /*进程到完成还要的时间*/int count; /*计数器*/char state; /*进程的状态*/struct node *next; /*链指针*/PCB;在分别的定义各个函数的子功能:创建进程初始化的函数 void create1()、结点按优先级排第 5 页共 9 页序函数 void sort1(PCB *q)、队列中第一个结点运行函数 void firstrun()、输出

5、进程的信息函数 void display2(PCB *q)、输出所有的进程函数 void display()、优先级调度算法函数 void priority()。最后用主函数分别调用各个子函数,分别完成各个函数的各功能。完成实验的要求。实验心得:在这次的实验中,不知道开头该什么弄,于是都是到最后的几天才开始做的,但是写的程序还是不能运行,花了很多的时间,不知道为什么一个进程可以运行,几个进程就不能运行,结果就是输不出来,而且经过这次的实验重新复习了 C+语言。-郭彩云附录:程序如下:#include “stdio.h“#include “stdlib.h“#include “string.h“

6、#include “iostream.h“typedef struct nodechar name10; /*进程标识符*/int prio; /*进程优先数*/int round; /*进程时间轮转时间片 */int cputime; /*进程占用 CPU 时间*/int needtime; /*进程到完成还要的时间*/int count; /*计数器*/char state; /*进程的状态*/struct node *next; /*链指针*/PCB;PCB *finish,*start,*tail,*run; /*队列指针*/int N; /*进程数*/=将就绪队列中的第一个进程投入运

7、行=void firstrun()run=start; /*就绪队列头指针赋值给运行头指针*/run-state=R; /*进程状态变为运行态*/start=start-next; /*就绪对列头指针后移到下一进程*/= 一个进程 PCB 的输出 =void display2(PCB *q) coutnamecputimeneedtimepriostatenext;p=finish; /*输出完成队列的 PCB*/while(p!=NULL)display2(p);p=p-next;/=优先数的插入算法=void sort1(PCB *q)PCB *p1,*s,*r;int b;s=q; /*

8、待插入的 PCB 指针*/p1=start; /*就绪队列头指针*/r=p1; /*r 做 p1 的前驱指针*/b=1;while(p1!=NULL)p1=p1-next;elseb=0;if(r!=p1) /*如果条件成立说明 s 插入在 r 与 p1 之间*/r-next=s;s-next=p1;第 7 页共 9 页elses-next=p1; /*否则插入在就绪队列的头*/start=s;/=优先数创建初始 PCB 信息=void create1()PCB *p;int i,time;char na10;start=NULL; /*就绪队列头指针*/finish=NULL; /*完成队列

9、头指针*/run=NULL; /*运行队列指针*/coutna;cintime;if(time30) coutname,na);p-cputime=0;p-needtime=time;p-state=w;p-prio=30-time;if(start!=NULL) /*就绪队列不空调用插入函数插入*/sort1(p);elsep-next=start; /*创建就绪队列的第一个 PCB*/start=p;coutnext;run-state=R;/=优先数调度算法=void priority()while(run!=NULL) /*当运行队列不空时,有进程正在运行*/run-cputime=r

10、un-cputime+1;run-needtime=run-needtime-1;run-prio=run-prio-3; /*每运行一次优先数降低 3 个单位*/if(run-needtime=0) /*如所需时间为 0 将其插入完成队列*/run-next=finish;finish=run;run-state=F; /*置状态为完成态*/run=NULL; /*运行队列头指针为空*/if(start!=NULL) /*如就绪队列不空*/firstrun(); /*将就绪对列的第一个进程投入运行*/else /*没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列*/if(star

11、t!=NULL)sort1(run);firstrun(); /*将就绪队列的第一个进程投入运行*/display(); /*输出进程 PCB 信息*/=时间片轮转法=void roundrun()while(run!=NULL)run-cputime=run-cputime+1;run-needtime=run-needtime-1;run-count=run-count+1;if(run-needtime=0)/*运行完将其变为完成态,插入完成队列*/run-next=finish;finish=run;第 9 页共 9 页run-state=F;run=NULL;if(start!=NU

12、LL)run=start; /*就绪队列头指针赋值给运行头指针 */run-state=R; /*进程状态变为运行态*/start=start-next; /*就绪对列头指针后移到下一进程 */*就绪对列不空,将第一个进程投入运行*/elseif(run-count=run-round) /*如果时间片到*/run-count=0; /*计数器置 0*/if(start!=NULL) /*如就绪队列不空*/run-state=W; /*将进程插入到就绪队列中等待轮转 */run=start; /*就绪队列头指针赋值给运行头指针 */run-state=R; /*进程状态变为运行态*/start=start-next; /*就绪对列头指针后移到下一进程 */ /*将就绪对列的第一个进程投入运行*/display(); /*输出进程信息 */=主函数=void main()char algo; /*算法标记*/coutN; /*输入进程数*/if(N10) cout“输入值有误,请重新输入 !“endl; N=1;exit(0); if(N1) cout“输入值有误,无法运行 !“endl; N=1;exit(0); create1(); priority();

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报