下载

1下载券

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

上传资料

关闭

关闭

关闭

封号提示

内容

首页 操作系统进程调度算法模拟

操作系统进程调度算法模拟.doc

操作系统进程调度算法模拟

萧秋寒
2017-09-30 0人阅读 举报 0 0 暂无简介

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

操作系统进程调度算法模拟实验一进程调度算法模拟一实验题目:设计一个简单的进程调度算法模拟OS中的进程调度过程二(要求:进程数不少于个进程调度算法任选可以用动态优先数加时间片轮转法实现进程调度每运行一个时间片优先数减用C语言编程程序运行时显示进程调度过程。三(程序中所用数据结构及说明:进程控制块结构体:typedefstructnode{intID进程标识数intPRIORITY进程优先数intCPUTIME进程已占用时间片intALLTIME进程还需占用时间片}Block,pcb就绪进程链表节点:typedefstructnode{pcbdatastructnode*next}process四(清单程序及描述:Procelinkh:typedefstructnode{intID进程标识数intPRIORITY进程优先数intCPUTIME进程已占用时间片intALLTIME进程还需占用时间片charSTATE进程状态structnode*next进程队列指针}Block,pcbtypedefstructnode{pcbdatastructnode*next}processvoidInitlink(process**PQ){*如果有内存空间申请头结点空间并使头指针head指向头结点*if((*PQ=(process*)malloc(sizeof(process)))==)exit()(*PQ)>next=*置链尾标记*}intIsEmpty(process*PQ){if(PQ>next==)returnelsereturn}voidEnInitlink(process*PQ,pcbp){while(PQ>next!=)PQ=PQ>nextprocess*temp=(process*)malloc(sizeof(Block))temp>dataPRIORITY=pPRIORITYtemp>dataID=pIDtemp>dataCPUTIME=pCPUTIMEtemp>dataALLTIME=pALLTIMEtemp>next=PQ>nextPQ>next=temp}插入pcbDeInitlink(process*PQ)选择优先数最小的出列{if(IsEmpty(PQ)){printf("所有进程已运行完!n")exit()退出}process*temp=(process*)malloc(sizeof(Block))temp=PQ>nextprocess*te=(process*)malloc(sizeof(Block))process*t=(process*)malloc(sizeof(Block))te=PQ>next优先数最小的进程while(temp>next!=){if(te>dataPRIORITY<temp>next>dataPRIORITY){te=temp>nextt=temp>next>nextPQ=temp}temp=temp>next}PQ>next=PQ>next>nextpcbpp=te>datafree(temp)free(t)free(te)returnpp}出队列voidoutid(process*PQ)输出就绪队列函数{printf("当前就绪队列为:")while(!IsEmpty(PQ)){printf("d",PQ>next>dataID)PQ=PQ>next}printf("n")}voiddispatch(pcbp,process*PQ)进程运行函数{if((pALLTIME)!=){pPRIORITY=pCPUTIME=pALLTIME=printf("进程d运行n",pID)printf("进程优先数:d进程已占用时间片:d进程还需占用时间片:dn",pPRIORITY,pCPUTIME,pALLTIME)outid(PQ)输出就绪队列}if((pALLTIME)==){printf("进程d运行完成!n",pID)return完成则不加入链表}EnInitlink(PQ,p)return运行之后再加入链表}oscpp:#include<stdioh>#include<stdlibh>#include"procelinkh"voidmain(){process*PQintnn为进程数pcbproInitlink(PQ)printf("请输入进程个数:")scanf("d",n)printf("请输入各个进程的进程标识数ID,进程优先数进程已占用时间片进程还需占用时间片n")for(inti=i<=ni){printf("第d进程:",i)scanf("dddd",proID,proPRIORITY,proCPUTIME,proALLTIME)EnInitlink(PQ,pro)}while(!IsEmpty(PQ)){dispatch(DeInitlink(PQ),PQ)进程运行函数调用}if(IsEmpty(PQ))printf("所有进程已运行完!n")free(PQ)释放内存空间}五(执行结果:六(实验总结:通过这次操作系统中进程调度算法的模拟使我对操作系统中的进程调度有了更清晰的认识和了解程序中也有不足之处该程序是顺序进链出链时再选择优先数最大的进程。比如调度某个进程时若该进程大于一个时间片(即调度一次不能结束)则可以直接修改进程信息而不必使其先出链在进链增加了时间复杂度。

VIP免券下载文档

用户评价(0)

关闭

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

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

提示

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

文档小程序码

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

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/7

操作系统进程调度算法模拟

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利