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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验一进程调度实验报告.docx

1、实验一进程调度实验报告广东技术师范学院实验报告学院:计算机科学学院专业:计算机科学与技术(师范)班级:成绩:姓名:学号:组别:组员:实验地点:实验日期:指导教师签名:预习情况操作情况考勤情况数据处理情况实验名称: 实验一、进程调度实验 一、实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解二、实验类别综合性实验。综合高级语言编程、进程调度模型、进程调度算法及数据结构等多方面的知识三、实验内容和步骤 1编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。 “最高优先数优先”调度算法的基本思想是把CPU分配给就绪队列中优先数最高的进

2、程。 静态优先数是在创建进程时确定的,并在整个进程运行期间不再改变。 动态优先数是指进程的优先数在创建进程时可以给定一个初始值,并且可以按一定原则修改优先数。例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待的时间超过某一时限时增加其优先数的值,等等该题根据老师给的代码用Visual C+运行,结果以及分析如下:结果分析:根据上述输入的三个进程的信息可以得到:优先级最高的是进程cc最先调度进程cc的状态为运行态,需要执行的时间为10当前就绪队列状态为:进程aa先级比较高,处于就绪队列前面,而进程bb先级是三者中最低的,所以处于就绪队列的最后。而此时这两个进程的状态都为就绪态。结果分

3、析:当进程cc了一个时间片之后而它已占用 CPU时间已达到所需要的运行时间,则将它的优先级减1之后,再将三个进程按优先级的大小排列,从中选择优先级大的进程进入运行状态,则该次进入运行态的是进程aa按照这种方式一直运行下去:直到:结果分析:当进程bb的CPU占用时间等于它需要的执行时间时,进程bb度完成。则这时进程调度中还有两个进程:进程aa进程cc结果分析:当调度进程中只剩下进程aa程cc这时根据进程优先级的大小,进程aa入运行态。当进程aa调度时,进程调度程序中直剩下进程cc这时进程cc进入运行态,而当前就绪队列将为空。直到:结果分析:当进程i的CPU占用时间等于所需要的执行时间时,进程cc

4、调度完成,则这时进程调度中已经没有需要调度的进程了,则整个进程调度完成。2、编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。 轮转法可以是简单轮转法、可变时间片轮转法,或多队列轮转法。 简单轮转法的基本思想是:所有就绪进程按 FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。如果运行进程用完它的时间片后还为完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。直至所有的进程运行完毕。将老师给的源程序修改成简单的时间片轮转法流程图如下:进程完成,撤消该进程就绪队列首进程投入运行时间片到,运行进程已占用CPU时间+1运行进程已占

5、用CPU时间已达到所需的运行时间把运行进程插入到下一个队列的队尾插入新的进程开始初始化PCB,输入进程信息所有队列都为空各进程按FCFS原则排队等待调度时间片轮转法#include#include#include#define getpch(type) (type*)malloc(sizeof(type)#define NULL 0#define TIME 2/时间片长度/typedef struct pcb /进程管理块 char name10;/进程名字 char state; /进程状态 int queue; /进程所在的队列 int ntime; /进程需要运行的时间 int rtim

6、e; /进程已经运行的时间 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(tf输入不能为空.请重新输入n); fflush(stdin); ch = getchar(); while(ch != n) if(

7、ch 9 | ch link | (ps- link-queue - ps-queue) 1) pinsert = ps; else while (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) /第一队列存在 p-link = pfend-link; pfend-link = p; pfend = p; find

8、pos(); Else p-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();/*调用insert函数*/ void disp(PCB *pr)/*建立进程

9、现实函数,用于显示当前进程*/ 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,ready-name);/*显示当前运

10、行的进程*/ 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 - queue

11、= pinsert -queue) findpos(); void addnew()/添加新的进程 if(ready -queue != 1) (ready - queue)+; ready-etime *= 2; ready - state=w; sort();/*调用sort函数*/ input(); else input(); void destroy()/*建立进程撤销函数(进程运行结束,撤销进程)*/ printf(n进程%s已完成.n,ready-name); p = ready; ready = ready-link; free(p); if (ready & ready - q

12、ueue = pinsert -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;

13、 sort();/*调用sort函数*/ void 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(); 运行结果如下:根据题意输入五个进程按任意键继续四、实

14、验问题及原因 (1)本次试验,思路设计不难在这个多级反馈的实验中,我采取了用一条实际上的链表队列来模拟多个逻辑上的队列,通过维护几个链表的状态信息来找到每个进程运行完后应该插入的地方,还有一个标志位Fend用来表明新插入的队列的位置。(2)在建立优先数就绪队列时主要运用,链表插入模型。但是由于本题是从建立、到完成一个就绪对列,所以必须分多种情况讨论。五、实验体会和收获(1)本次试验后对优先数调度算法和时间片轮转调度算法实现的过程,有了很清楚的认识、理解。设计计数器来对进程执行状态的时间分析,使得进程调度这一抽象模型得到具体化。之后,便是对进程的插入(执行完,插入到完成队列,否则插入到就绪)和再次调度(当改进程再次满足条件时,从就绪队列调度到执行队列)重复过程。(2)通过设计PCB结构,模拟进程调度,加深了对进程的理解。(3)提高了C语言编程动手能力

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

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