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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验一进程调度.docx

1、实验一进程调度一、 实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。二、实验内容和要求编写并调试一个模拟的进程调度程序,采用“简单时间片轮转法”调度算法对几个进程进行调度。每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、到达时间、需要运行时间、已运行时间、进程状态等等。 进程的到达时间及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)两种状态之一。就绪进程获得 CPU后都只能运行一个时间片

2、。用运行时间加1来表示。 如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应分配时间片给就绪队列中排在该进程之后的进程,并将它插入就绪队列队尾。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。三、实验主要仪器设备和材料硬件环境:PC机XP系统软件环境:VC+6.0四、实验原理及设计方案1、进程调度算法:采用多级反馈队列调度算法。其基本思想是:当一个新进程进入内在后,首先将它放入第一个队列的

3、末尾,按FCFS原则排队等待高度。当轮到该进程执行时,如能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚为完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行,以此类推。2、实验步骤:(1)按先来先服务算法将进程排成就绪队列。(2)检查所有队列是否为空,若空则退出,否则将队首进程调入执行。(3)检查该运行进程是否运行完毕,若运行完毕,则撤消进程,否则,将该进程插入到下一个逻辑队列的队尾。(4)是否再插入新的进程,若是则把它放到第一逻辑队列的列尾。(5)重复步骤(2)、(3)、(4),直到就绪队列为空。五、流程图退出程序 是 是六、结果过程及截图初始化队

4、列输入所有进程后的进程信息如下:按Y键继续运行进程:按Y键继续运行进程:运行若干次后的状态:添加新的进程:运行到结束时的状态显示:七、所遇困难的解决以及心得体会在这个实验中,我采取了用一条实际上的链表队列来模拟多个逻辑上的队列,通过维护几个链表的状态信息来找到每个进程运行完后应该插入的地方,还有一个标志位Fend用来表明新插入的队列的位置。虽然实验原理很简单,但是在编写代码的过程中遇到了不少的问题,在两个小时之内已经完成的大体代码的编写,但是之中存在不少的问题,导致了用了差不多四个小时的时间去调试才把它弄好,这主要归咎于在开始设计代码的不太合理,在后期使得代码结构有些混乱,使得调试更加的麻烦,

5、以及对编程的不熟悉。通过这个实验不仅使我对进程的调度算法有了更深的认识,使得理论知识得到的实践,也使我的编程能力得到了进一步提高。七、源代码#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 rtime; /进程已经运行的时

6、间 int etime; /进程在本队列可运行的时间片 struct pcb *link;PCB;PCB *ready=NULL; /就绪队列,进程插入位置的变量PCB *pinsert=NULL;PCB *pfend=NULL;PCB *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(ch9|chlink|(ps-link-q

7、ueue-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; findpos(); else p-link = ready; ready = p; findpos(

8、); void input()/*建立进程控制块函数*/ int i,num; printf(请输入进程的个数:); num = geti(); for(i=0; i name); printf(输入进程运行时间:); 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)/*建立进程现实函数,用于显示当前进程*/ printf(nnamet statet queuet ntime

9、t 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);/*显示当前运行的进程*/ disp(ready); pr= ready -link; printf(n*当前就绪队列状态为:

10、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 = pinsert -queue) findpos(); void addnew()/添加新的进程 if(rea

11、dy -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 - queue = pinsert -queue) findpos(); void running()/*建立进程就绪

12、函数(进程运行时间到,置就绪状态)*/ (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函数*/ 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();

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

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