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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

西安石油大学操作系统原理实验一进程及其管理.docx

1、西安石油大学操作系统原理实验一进程及其管理实验报告课程名称 操作系统原理 实验名称 进程及其管理 姓 名 张文江 学 号 201107010122 专业班级 计科1201 成 绩 指导教师 赵安科 实验一 进程及其管理进程调度算法模拟,用动态优先数及时间片轮转法实现进程调度1内容:设计一个简单的进程调度算法,模拟OS中的进程调度过程2要求: 进程数不少于5个; 进程调度算法任选; 最好选用动态优先数法,每运行一个时间片优先数减3 用C+(或C)语言编程; 程序运行时显示进程调度过程。3步骤: 设计PCB及其数据结构: 进程标识数:ID 进程优先数:PRIORITY(优先数越大,优先级越高) 进

2、程已占用时间片:CPUTIME 进程尚需时间片:ALLTIME(一旦运行完毕,ALLTIME为0) 进程队列指针:NEXT,用来将PCB排成队列 进程状态:STATE(一般为就绪,不用) 设计进程就绪队列及数据结构; 设计进程调度算法,并画出程序流程图; 设计输入数据和输出格式; 结构格式:当前正运行的进程:0 当前就绪队列:2,1,3,4 编程上机,验证结果。4提示:假设调度前,系统中有5个进程,其初始状态如下:ID01234可否考虑用二维数组去实现PRIORITY93830290CPUTIME00000ALLTIME33634STATEreadyreadyreadyreadyready 以

3、时间片为单位调度运行; 每次总是从ALLTIME中不为0,且PRIORITY最大的进程调度运行一个时间片; 上述进程运行后其优先数减3,再修改其CPUTIME和ALLTIME,重复, 直到所有进程的ALLTIME均变为0。5书写实验报告 实验题目; 程序中所用数据结构及说明; 程序清单及描述; 执行结果。6 实验源代码:#include#includetypedef int Status;#define ERROR 0#define OK 1typedef struct PCB char NAME10; /进程名字 int PRIO; /进程优先数 int ROUNT; /轮转时间片 int

4、COUNT; /计数器 int NEEDTIME; /需要的CPU时间 int CPUTIME; /占用cpu时间 char *STATE; /进程状态ElemPCB;typedef struct QNode ElemPCB pcb; struct QNode *next;QNode, *QueuePtr;typedef struct /就绪队列 QueuePtr RUN; /当前运行进程指针 QueuePtr READY; /头指针 QueuePtr TAIL; /尾指针READYQueue;typedef struct /完成队列 QueuePtr FINISH; /头指针 QueuePt

5、r TAIL; /尾指针FINISHQueue;Status Create(READYQueue &ready); Status Print(READYQueue ready,FINISHQueue finish);Status Printr(READYQueue ready,FINISHQueue finish);Status Fisrt(READYQueue &ready); Status Insert1(READYQueue &ready);Status Insert2(READYQueue &ready);Status Prisch(READYQueue &ready,FINISHQu

6、eue &finish);Status Roundsch(READYQueue &ready,FINISHQueue &finish);void main() char ch; READYQueue ready; FINISHQueue finish; ready.READY=ready.TAIL=(QueuePtr)malloc(sizeof(QNode); /存储分配 ready.RUN=(QueuePtr)malloc(sizeof(QNode); ready.RUN-next=NULL; finish.FINISH=finish.TAIL=(QueuePtr)malloc(sizeof

7、(QNode); Create(ready); /创建后就绪对列中 printf(n就绪对列中初始值:n); Print(ready,finish); Fisrt(ready); printf(请输入要选择调度的算法(p-优先数调度,r-时间片轮转法):n); while(1) do ch=getchar(); scanf(%c,&ch); while(ch!=p & ch!=r); switch(ch) case p: /优先数调度 Prisch(ready,finish); break; case r: /时间片轮转法 Roundsch(ready,finish); break; Stat

8、us Print(READYQueue ready,FINISHQueue finish) /打印就绪队列中的进程状态 QueuePtr p,q; p=ready.READY; q=finish.FINISH; /运行中的进程 if(ready.RUN-next!=NULL) printf(%s,ready.RUN-next-pcb.NAME); printf(:%st,ready.RUN-next-pcb.STATE); printf(优先数:%dn,ready.RUN-next-pcb.PRIO); /就绪队列的进程 while(p!=ready.TAIL) printf(%s,p-nex

9、t-pcb.NAME); printf(:%st,p-next-pcb.STATE); printf(优先数:%dn,p-next-pcb.PRIO); p=p-next; /完成队列的进程 while(q!=finish.TAIL) printf(%s,q-next-pcb.NAME); printf(:%st,q-next-pcb.STATE); printf(优先数:%dn,q-next-pcb.PRIO); q=q-next; return OK;Status Printr(READYQueue ready,FINISHQueue finish) /打印就绪队列中的进程状态 Queue

10、Ptr p,q; p=ready.READY; q=finish.FINISH; /运行中的进程 if(ready.RUN-next!=NULL) printf(%s,ready.RUN-next-pcb.NAME); printf(:%st,ready.RUN-next-pcb.STATE); printf(剩余时间:%dn,ready.RUN-next-pcb.NEEDTIME); /就绪队列的进程 while(p!=ready.TAIL) printf(%s,p-next-pcb.NAME); printf(:%st,p-next-pcb.STATE); printf(剩余时间:%dn,

11、p-next-pcb.NEEDTIME); p=p-next; /完成队列的进程 while(q!=finish.TAIL) printf(%s,q-next-pcb.NAME); printf(:%st,q-next-pcb.STATE); printf(剩余时间:%dn,q-next-pcb.NEEDTIME); q=q-next; return OK;Status Create(READYQueue &ready) QueuePtr p; int i=0 ; int n; printf(请输入进程个数:); scanf(%d,&n); while(ipcb.NAME); printf(输

12、入进程需要的时间:); scanf(%d,&p-pcb.NEEDTIME); printf(输入进程的进程优先数:); scanf(%d,&p-pcb.PRIO); p-pcb.STATE=W; p-pcb.ROUNT=2; p-pcb.COUNT=0; i+; p-next=NULL; ready.TAIL-next=p; ready.TAIL=p; return OK;Status Fisrt(READYQueue &ready) if(ready.READY=ready.TAIL) return ERROR; ready.RUN-next=ready.READY-next; ready.

13、RUN-next-pcb.STATE=RUN; /修改进程状态 if(ready.TAIL=ready.READY-next) ready.READY=ready.TAIL; else ready.READY-next=ready.READY-next-next; /头指针后移 printf(n%s被从就绪队列调度运行n,ready.RUN-next-pcb.NAME); return OK;Status Insert1(READYQueue &ready) int i=0,j=0; QueuePtr p=ready.READY,q; ElemPCB temp; QueuePtr s=(Que

14、uePtr)malloc(sizeof(QNode); s-pcb=ready.RUN-next-pcb; s-next=NULL; /将未完成的进程插入就绪队列 ready.TAIL-next=s; ready.TAIL=s; /按优先数从大到小排序 for(p;p!=ready.TAIL;p=p-next) for(q=p-next;q!=ready.TAIL;q=q-next) if(p-next-pcb.PRIO next-pcb.PRIO) temp=p-next-pcb; p-next-pcb=q-next-pcb; q-next-pcb=temp; return OK; Stat

15、us Insert2(READYQueue &ready) QueuePtr p=ready.RUN-next; if(p-pcb.NEEDTIME 0) ready.TAIL-next=p; /插入到就绪队列 ready.TAIL=p; ready.RUN-next=NULL; return OK;Status Prisch(READYQueue &ready,FINISHQueue &finish) int i=0 ; while(ready.RUN-next!=NULL) ready.RUN-next-pcb.CPUTIME+; ready.RUN-next-pcb.NEEDTIME-;

16、 ready.RUN-next-pcb.PRIO-=3; if(ready.RUN-next-pcb.NEEDTIME=0) finish.TAIL-next=ready.RUN-next; /插入到完成队列 finish.TAIL=ready.RUN-next; /尾指针后移 ready.RUN-next-pcb.STATE=FINISH; ready.RUN-next=NULL; if(ready.READY!=ready.TAIL) Fisrt(ready); else if(ready.READY != ready.TAIL & (ready.RUN-next-pcb.PRIO) ne

17、xt-pcb.PRIO) ready.RUN-next-pcb.STATE=W; printf(%s被调到就绪队列里n,ready.RUN-next-pcb.NAME); Insert1(ready); Fisrt(ready); i+; printf(n进程执行第%d个时间片的结果:n,i); Print(ready,finish); return OK;Status Roundsch(READYQueue &ready,FINISHQueue &finish) int i=0; while(ready.RUN-next!=NULL) ready.RUN-next-pcb.CPUTIME+;

18、 ready.RUN-next-pcb.NEEDTIME-; ready.RUN-next-pcb.COUNT+; if(ready.RUN-next-pcb.NEEDTIME=0) finish.TAIL-next=ready.RUN-next; /插入到完成队列 finish.TAIL=ready.RUN-next; /尾指针后移 ready.RUN-next-pcb.STATE=FINISH; ready.RUN-next=NULL; if(ready.READY!=ready.TAIL) Fisrt(ready); else if(ready.RUN-next-pcb.COUNT=re

19、ady.RUN-next-pcb.ROUNT) ready.RUN-next-pcb.COUNT=0; if(ready.READY != ready.TAIL) ready.RUN-next-pcb.STATE=W; printf(%s被调到就绪队列里n,ready.RUN-next-pcb.NAME); Insert2(ready); Fisrt(ready); i+; printf(n进程执行第%d个时间片的结果:n,i); Printr(ready,finish); return OK;7 运行结果截图:8实验心得 操作系统是计算机系统中必不可少的系统软件,它是计算机系统中各种资源的管理者和各种活动的组织者、指挥者。操作系统采用时间片法调度进程,是系统资源得到充分利用,用户可以花更少的时间完成过多的工作。通过这次实验,将以前只会做题的过程转化外程序执行的过程,模拟了在单处理机情况下的处理及调度问题,体会到了程序执行的过程,加深了对进程调度的理解。

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

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