




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、淮海工学院计算机工程学院实验报告书课程名: 操作系统原理 题 目: 进程调度 班 级: 学 号: 姓 名: 评语:成绩: 指导教师: 批阅时间: 年 月 日一、实验目的进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用C语言编写一个进程调度模拟程序,使用优先级或时间片轮转法实现进程调度。本实验可加深对进程调度算法的理解。实验环境Turbo C 2.0/3.0或VC+6.0实验学时4学时,必做实验。二、实验内容1、设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。2、模拟调度程序可任选两种调度算法之一实现。3、程序执行中应能在屏幕上显示出各进程的状态变化
2、,以便于观察调度的整个过程。3、 实验说明1、优先级算法说明(1)PCB的结构:IdSpanUsedNeedSatusNext优先级算法中,设PCB的结构如右图所示,其中各数据项的含义如下:Id:进程标识符号,取值15。Prior:优先级,随机产生,范围15。Used:目前已占用的CPU时间数,初值为0;当该进程被调用执行时,每执行一个时间片,Used加1。Need:进程尚需的CPU时间数,初值表示该进程需要运行的总时间,取值范围为510。并随机产生,每运行一个时间片need减1;need为0则进程结束。Status:进程状态R(运行),J(就绪),F(完成);初始时都处于就绪状态。Next:
3、指向就绪队列中下一个进程的PCB的指针。(2)初始状态及就绪队列组织:5个进程初始都处于就绪状态,进程标识15,used初值都为0。各进程的优先级随机产生,范围15。处于就绪状态的进程,用队列加以组织,队列按优先级由高到低依次排列,队首指针设为head,队尾指针设为tail。(3)调度原则以及运行时间的处理:正在执行的进程每执行一个时间片,其优先级减1(允许优先级为负)。进程调度将在以下情况发生:当正在运行的程序其优先级小于就绪队列队首进程的优先级时。程序中进程的运行时间以逻辑时间片为单位。2、时间片轮转算法说明(1)PCB的结构(如下图所示):轮转法中,设PCB的结构如右图所示,其中各数据项
4、的含义如下:IdSpanUsedNeedSatusNextId:进程标识符号,取值15。Span:在某一轮中,分配给先运行进程的时间片数,取值13。Used:现运行进程在本轮执行过程已用的时间片数。Need:进程尚需的CPU时间数,初值表示该进程需要运行的总时间,取值范围510。并随机产生,每运行一个时间片need减1;need为0则进程结束。Status:进程状态R(运行),J(就绪),F(完成);初始时所有进程处于就绪状态。Next:指向就绪队列中下一个进程的PCB的指针。(2)初始状态及就绪队列组织:Span、Used在每轮开始时赋初值,Used初值值为0,Span初值要求随机产生。(3
5、)调度原则:当一个进程被调度程序执行时,每经过一个时间片,Need减1,Used加1,如果Need为0,表示该进程结束,如果Need不为0,并且Used小于本轮Span值,则该进程可继续运行,若Need不为0,且Used等于Span值,则该进程本轮运行时间已到,应调度下一个队首进程运行。4、 实验步骤1、 理解本实验中关于两种调度算法的说明。2、 根据调度算法的说明,画出相应的程序流程图。3、 按照程序流程图,用C语言编程并实现。五、分析与思考1、 逻辑时间片该如何实现?系统将所有的就绪进程按先来先服务算法的原则,排成一个队列,每次调度时,系统把处理机分配给队列首进程,并让其执行一个时间片。当
6、执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序根据这个请求停止该进程的运行,将它送到就绪队列的末尾,再把处理机分给就绪队列中新的队首进程,同时让它也执行一个时间片。2、 如果不使用指针操作,是否也可以使用数组实现进程就绪队列的组织?可以。六、测试数据与实验结果采用先来先服务调度算法的进程调度流程图如图(1)图(1)采用先来先服务调度算法的进程调度流程图采用高优先权优先调度算法的进程调度流程图如图(2)图(2)采用高优先权优先调度算法的进程调度流程图先来先服务测试数据与结果1.初始化队列如图(3)图(3)初始化队列2.输入所有进程后的进程信息如下如图(4)图(4)进程信息3. 按除i
7、键以外的任意键继续运行进程如图(5)图(5)继续运行4.继续运行进程如图(6)图(6)继续运行5. 运行若干次后的状态如图(7)图(7)运行若干次后的状态6. 添加新的进程如图(8)图(8)添加新进程高优先权优先测试数据与结果1、 就绪队列如图(9)图(9)2、 运行过程如图(10)图(10)图(11)3、 最终结果如图(11)图(12)七、实验心得与体会通过这次实验,知道了,.界面设计应该在编写之前确定,因为本程序是用来模拟一个调度算法,需要不断地刷新显示结果,其清晰性很重要,界面不能很潦草,固然需要一开始就设计好。而不是作为一个中间环节在程序中不断调试。关键算法的编写。通常在编写时都是在I
8、DE下直接写代码,如果有问题就进行调试,直到正确通过。但是有的关键算法稍微有点复杂,在运行出错时候多次调试后仍然不能正确,此时静下心来,在纸上画一下算法流程,以及数据结构图示,并将代码写到纸上修改,实践证明,如此方法效率更高。用C语言编写了一个进程调度模拟程序,使用优先级算法实现了进程调度。通过这次实验加深了对进程调度算法的理解。附录1. 先来先服务#include#include#include#define getpch(type) (type*)malloc(sizeof(type)#define NULL 0#define TIME 2/时间片长度typedef struct pcb/
9、进程管理块char name10;/进程名字char state;/进程状态int queue;/进程所在的队列int ntime;/进程需要运行的时间int rtime;/进程已经运行的时间int etime;/进程在本队列可运行的时间片struct pcb *link;PCB;PCB*ready = NULL, *pinsert = NULL, *pfend = NULL,*p =NULL;/就绪队列,进程插入位置的变量int geti()/使用户仅能输入整数char ch;int i = 0;fflush(stdin);ch = getchar();while(ch = n)printf
10、(tf输入不能为空.请重新输入n);fflush(stdin);ch = getchar();while(ch != n)if(ch 9 | ch link | (ps- link-queue - ps-queue) 1) pinsert = ps;elsewhile (ps-link & ps -link-queue != (pfend -queue +2)ps = ps-link;pinsert = ps;void insert()/插入进程if(!ready )ready = p;pfend = p;pinsert = p;else if(ready -queue = 1)/第一队列存在
11、p-link = pfend-link;pfend-link = p;pfend = p;findpos();elsep-link = ready;ready = p;findpos();void input()/*建立进程控制块函数*/int i,num;printf(n请输入进程的个数?);num = geti();for(i=0; i name);printf(n输入进程运行时间:);p -ntime = geti();printf(n);p-rtime=0;p-state=w;p-queue =1;p-etime = TIME;p-link=NULL;insert();/*调用inse
12、rt函数*/void disp(PCB *pr)/*建立进程现实函数,用于显示当前进程*/printf(nnamet statet queuet ntimet rtimet在队列可停留时间t n);printf(|%st,pr-name);printf( |%ct,pr-state);printf( |%dt,pr-queue);printf( |%dt,pr-ntime);printf( |%dt,pr-rtime);printf( |%dt,pr-etime);printf(n);void check()/*建立进程查看函数*/PCB *pr;printf(n *当前正在运行的进程是:%s
13、,ready-name);/*显示当前运行的进程*/disp(ready);pr= ready -link;printf(n*当前就绪队列状态为:n);/*显示就绪队列状态*/while(pr!=NULL)disp(pr);pr=pr-link;void 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 -
14、queue = pinsert -queue)findpos();void addnew()/添加新的进程if(ready -queue != 1)(ready - queue)+;ready-etime *= 2;ready - state=w;sort();/*调用sort函数*/input();elseinput(); void destroy()/*建立进程撤销函数(进程运行结束,撤销进程)*/printf(n进程%s已完成.n,ready-name);p = ready;ready = ready-link;free(p);if (ready & ready - queue = pi
15、nsert -queue)findpos();void running()/*建立进程就绪函数(进程运行时间到,置就绪状态)*/(ready - rtime)+;ready -etime -;if(ready-rtime = ready-ntime)destroy();return;else if(ready -etime = 0)int time = 2;(ready - queue)+;for(int i = 2; i != ready-queue; +i)time *= 2;ready-etime = time;ready - state=w;sort();/*调用sort函数*/voi
16、d main()char ch;input();while(ready != NULL)printf(nThe execute name:%sn,ready -name);ready -state = R;check();running();printf(n按i键添加新进程.按其他任意键继续运行.);fflush(stdin);ch = getchar();if (ch = i| ch=I)addnew();printf(nn 进程已经完成n);getchar();2.2高优先权优先#include stdio.h #include stdlib.h #include #define getp
17、ch(type) (type*)malloc(sizeof(type)struct pcb /* 定义进程控制块PCB */ char name10; char state; int super; int ntime; int rtime; struct pcb* next; *ready=NULL,*p;typedef struct pcb PCB;void sort(PCB *a) /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=0; if(ready=NULL)|(a-super)(ready-super) /*优先级最大者,插入队
18、首*/ a-next=ready; ready=a; else /* 进程比较优先级,插入适当的位置中*/ first=ready; second=first-next; while(second!=NULL) if(a-super)(second-super) /*若插入进程比当前进程优先数大,插入到当前进程前面*/ a-next=second; first-next=a; second=NULL; insert=1; else /* 插入进程优先数最低,则插入到队尾*/ first=first-next; second=second-next; if(insert=0) first-nex
19、t=a; void createpcb() /* 建立进程控制块函数*/ int i,num; printf(*-*n);printf(|*最高优先权优先调度算法模拟*|n);printf(*-*n);printf(n 请输入进程数目:); scanf(%d,&num); for(i=0;iname,&p-super,&p-ntime); p-rtime=0; p-state=w; p-next=NULL; sort(p); void display1() /*建立进程显示函数,用于显示当前进程*/ printf(n进程名 状态 优先数 要求服务的时间 已运行时间 n); void display2(PCB * pr) printf(%3.5s %7c %6d %12d %10d,pr-name,pr-state,pr-super,pr-ntime,pr-rtime);printf(n); void check() /* 建立进程查看函数 */ PCB *pr; printf(n-);printf(n * 当前正在运行的进程是%s,它的状态如下:,p-name); /*显示当前运行进程*/ display1();display2(p); pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年城管历年笔试试题及答案
- 2025年大学生业务技能竞赛题库
- 2025年低级钳工考试题及答案
- 2025年宝马中国笔试题及答案
- 2025年中级财管测试题库及答案
- 2024年起重机司机(限桥式起重机)证考试题库及解析
- 2025年危险化学品经营单位主要负责人考试试题附答案
- 2025年成人逻辑笔试题目及答案
- 2025年医院应知应会竞赛题库
- 2025年秋招:会计岗笔试题库及答案
- 60岁职工劳务合同协议
- 总裁助理培训课件
- 双碳背景下:甲醇技术应用与发展
- 宁波2025年浙江宁波慈溪市机关事业单位招聘编外工作人员7人(三)笔试历年参考题库附带答案详解
- 2025年全国青少年禁毒知识竞赛题库附答案(共150题)
- 施工进场施工方案
- 物业管理服务委托及费用结算协议
- CP控制计划(control-plan培训内容)
- 夏日嘉年华活动策划案
- 个人软件项目合同范本
- 4S店售后服务顾问求职简历
评论
0/150
提交评论