进程调度算法模拟程序设计.doc

进程调度算法模拟程序设计.doc

ID:55483306

大小:172.00 KB

页数:12页

时间:2020-05-14

进程调度算法模拟程序设计.doc_第1页
进程调度算法模拟程序设计.doc_第2页
进程调度算法模拟程序设计.doc_第3页
进程调度算法模拟程序设计.doc_第4页
进程调度算法模拟程序设计.doc_第5页
资源描述:

《进程调度算法模拟程序设计.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、华北科技学院计算机学院综合性实验实验报告课程名称操作系统B实验学期2011至2012学年第二学期学生所在系部计算机学院年级09专业班级网络工程B093学生姓名李金栋学号4任课教师杜杏菁实验成绩计算机学院制《操作系统B》课程综合性实验报告开课实验室:基础实验室七2012年5月10日实验题目进程调度算法模拟程序设计一、实验目的通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。二、设备与环境1.硬件设备:PC机一台。2.软件环境:安装Windows操作系统或Linux操作系统,并

2、安装相关的程序开发环境,如C/C++/Java等编程语言环境。三、实验内容(1)用C语言(或其它语言,如Java)编程实现对N个进程采用某种进程调度算法(如动态优先权调度算法、先来先服务算法、短进程优先算法、时间片轮转调度算法)调度执行的模拟。(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:²进程标识数ID。²进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。²进程已占用CPU时间CPUTIME。²进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。²进程的阻

3、塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。²进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。²进程状态STATE。²队列指针NEXT,用来将PCB排成队列。(3)优先数改变的原则:²进程在就绪队列中呆一个时间片,优先数增加1。²进程每运行一个时间片,优先数减3。(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。(5)分析

4、程序运行的结果,谈一下自己的认识。四、实验结果及分析1.主程序流程图:2.关键算法:(1)PCB结构:设置进程ID、剩余服务时间、剩余阻塞时间、NEXT指针四项记录。typedefstructPCBType{intid;intallTime;/*剩余服务时间*/intblockTime;/*剩余阻塞时间*/structPCBType*next;}Process;(2)创建新进程:使用函数creatProcess()创建一个进程的PCB,并挂接在队列一的末尾。voidcreatNew(){charchoose[8];do{pr

5、intf("请输入新进程信息:");printf("----------------------------");firstRear->next=creatProcess();firstRear=firstRear->next;printf("----------------------------");printf("是否继续创建新进程?:");scanf("%s",choose);while(strcmp(choose,"y")&&strcmp(choose,"Y")&&strcmp(choos

6、e,"n")&&strcmp(choose,"N")){printf("输入有误,请重新输入!");printf("是否继续创建新进程?:");scanf("%s",choose);}}while(!strcmp(choose,"y")

7、

8、!strcmp(choose,"Y"));}(3)改变进程所在队列:对头指针只需改变其NEXT指针指向,对尾指针则需使用指针的指针。voidchangeQueue(Process*oldHead,Process**oldRear,Process**newRear){(*new

9、Rear)->next=oldHead->next;*newRear=(*newRear)->next;oldHead->next=oldHead->next->next;if(NULL==oldHead->next)/*若摘去进程后队列为空,则复位尾指针*/(*oldRear)=oldHead;(*newRear)->next=NULL;}(4)搜索并阻塞进程:使用两个辅助指针实现阻塞进程的队列转换。intsearchBlock(Process*head,Process**rear,intid){Process*p=hea

10、d;Process*q=NULL;if(*rear!=head){while(p!=*rear){q=p;p=p->next;if(id==p->id){printf("请输入阻塞时间(1-8):");scanf("%d",&p->blockTime);while(p->blockTime

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。