收藏 分享(赏)

进程调度75694.doc

上传人:scg750829 文档编号:6934217 上传时间:2019-04-27 格式:DOC 页数:9 大小:147.50KB
下载 相关 举报
进程调度75694.doc_第1页
第1页 / 共9页
进程调度75694.doc_第2页
第2页 / 共9页
进程调度75694.doc_第3页
第3页 / 共9页
进程调度75694.doc_第4页
第4页 / 共9页
进程调度75694.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

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营业执照举报