下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 进程调度算法模拟

进程调度算法模拟.doc

进程调度算法模拟

x******i
2013-07-11 0人阅读 举报 0 0 暂无简介

简介:本文档为《进程调度算法模拟doc》,可适用于IT/计算机领域

操作系统实验报告(一)班级:计姓名:车琛学号:实验一进程调度算法模拟.内容:设计一个简单的进程调度算法模拟OS中的进程调度过程.要求:①进程数不少于个②进程调度算法任选可以用动态优先数加时间片轮转法实现进程调度每运行一个时间片优先数减③用C语言编程④程序运行时显示进程调度过程。.步骤:①设计PCB及其数据结构:进程标识数:ID进程优先数:PRIORITY(优先数越大优先级越高)进程已占用时间片:CPUTIME每得到一次调度值加进程还需占用时间片:ALLTIME每得到一次调度该值减一旦运行完毕ALLTIME为)进程队列指针:NEXT用来将PCB排成队列进程状态:STATE(一般为就绪可以不用)②设计进程就绪队列及数据结构③设计进程调度算法并画出程序流程图④设计输入数据和输出格式结构格式:当前正运行的进程:当前就绪队列:⑤编程上机验证结果。.提示:假设调度前系统中有个进程其初始状态如下:IDPRIORITY可否考虑用数组或链表去实现CPUTIMEALLTIMESTATEreadyreadyreadyreadyready①以时间片为单位调度运行②每次调度ALLTIME不为且PRIORITY最大的进程运行一个时间片③上述进程运行后其优先数减再修改其CPUTIME和ALLTIME重复②③④直到所有进程的ALLTIME均变为。.书写实验报告①实验题目②程序中所用数据结构及说明③清单程序及描述④执行结果。代码清单#include<iostreamh>#include<stdlibh>#include<malloch>#include<windowsh>#include<stdioh>#defineMINSIZEtypedefenumSTATE{ready,running,stop,}STATEtypedefstructPCB{intpidintpriority进程优先级intcputimeintalltimeSTATEstatestructPCB*prevstructPCB*next}PCBtypedefPCBNodevoidinitprocess(Node*head){head=(PCB*)malloc(sizeof(PCB))head>next=headhead>prev=head}voidpush(Node*head,Node*pnode){if(head==||pnode==)returnNode*p=head>nextwhile(p!=headpnode>priority<p>priority){p=p>next}pnode>next=p>prev>nextpnode>prev=p>prevp>prev>next=pnodep>prev=pnode}voidshowprocess(Node*head){if(head==)returnNode*p=head>nextcout<<"当前的就绪队列有:"<<endlcout<<"****************************进程调度表**************************"<<endlwhile(p!=head){cout<<endlcout<<"进程号为"<<p>pid<<""cout<<"优先级为"<<p>priority<<""cout<<"剩余ALLTIME为"<<p>alltime<<""cout<<"运行时间cputime为"<<p>cputime<<""cout<<endlcout<<endlp=p>next}cout<<"****************************************************************"<<endl}Node*popfront(Node*head){if(head==||head>next==head)returnNode*p=head>nextp>prev>next=p>nextp>next>prev=p>prevreturnp}PCB*createprocess(intid,intpriority,intcputime,intalltime,STATEstate){PCB*p=(PCB*)malloc(sizeof(PCB))p>pid=idp>cputime=cputimep>alltime=alltimep>priority=priorityp>state=statep>next=p>prev=returnp}voiddestroyhead(Node*head){if(head==)returnfree(head)}voiddestroy(Node*pnode){if(pnode==)returnNode*p=pnodep>prev>next=p>nextp>next>prev=p>prevcout<<"进程"<<p>pid<<"已经销毁!"<<endlfree(p)}voidprocessrunning(Node*head){if(head==||head>next==head)returnNode*p=while(head>next!=head){p=head>nextp=popfront(head)p>cputime=p>alltime=p>priority=p>state=runningcout<<endlcout<<"当前正在执行的进程为:"<<p>pid<<endlif(p>priority<=){p>priority=}cout<<endlcout<<"进程号为"<<p>pid<<""cout<<"优先级为"<<p>priority<<""cout<<"剩余ALLTIME为"<<p>alltime<<""cout<<"运行时间cputime为"<<p>cputime<<""cout<<endlcout<<endlcout<<endlcout<<endlif(p>alltime<=){p>state=stopdestroy(p)p=}if(p!=){p>state=readypush(head,p)}showprocess(head)charc=getchar()}destroyhead(head)}intmain(){PCB*head=initprocess(head)PCB*p=intPRIORITY=intCPUTIME=intALLTIME=STATEstate=readyintcount=intnum=cout<<"请输入当前运行的进程数至少个"<<endlcin>>numfor(inti=i<numi){count=cout<<"请输入第"<<count<<"个进程的优先级和总运行时间ALLTIME"<<endlcin>>PRIORITY>>ALLTIMEp=createprocess(count,PRIORITY,CPUTIME,ALLTIME,state)push(head,p)}showprocess(head)processrunning(head)return}屏幕截图优先级最高的进程运行完实验心得这次实验开始觉得无从下手于是在网上搜了些类似代码借鉴懂得了基本算法思想。操作系统这门课是初次接触刚开始编程序不知道该干什么但是随着理解深入对题目的要求也就慢慢清晰明了了。这次的编程主要用了链表排序也顺便复习了数据结构中以前学过的知识。实验代码并不是独立完成的有经验的同学帮了很大忙希望自己再接再厉有一天也可以像他们一样独立编写一段无差错的程序代码。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/10

进程调度算法模拟

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利