第一范文网 - 专业文章范例文档资料分享平台

《操作系统》实验指导书2017

来源:用户分享 时间:2025/8/1 2:25:37 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

p=(PCB *)malloc(sizeof(PCB)); scanf(\ scanf(\ strcpy(p->name,na); p->cputime=0; p->needtime=time; p->state='W'; p->prio=50-time;

if(ready!=NULL) /*就绪队列不空则调用插入函数插入*/ insert1(p); else {

p->next=ready; /*创建就绪队列的第一个PCB*/ ready=p; } } void clrscr(void);

printf(\ 优先级调度算法模拟输出结果:\\n\ printf(\\ prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready->next; run->state='R'; }

/*****轮转法创建进程PCB*****/ void create2(char alg) { PCB *p; int i,time; char na[10]; ready=NULL; finish=NULL; run=NULL; printf(\请输入进程的名字和运行所需要的时间\\n\ for(i=1;i<=N;i++) { p=(PCB *)malloc(sizeof(PCB)); scanf(\ scanf(\ strcpy(p->name,na); p->cputime=0; p->needtime=time;

p->count=0; /*计数器*/ p->state='W'; p->round=2; /*时间片*/ if(ready!=NULL) insert2(p); else { p->next=ready; ready=p; tail=p; } } void clrscr(void);

printf(\ 时间片轮转法模拟输出结果:\\n\ printf(\n\ }

prt(alg); /*输出进程PCB信息*/

run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready->next; run->state='R';

/*****先来先服务算法创建PCB*****/ void create3(char alg) { PCB *p; int i;

ready=NULL; run=NULL; finish=NULL;

printf(\请输入进程的名字、到达时间和运行所需要的时间\\n\ for(i=0;i

p=(PCB *)malloc(sizeof(PCB)); scanf(\ scanf(\ scanf(\ p->starttime=0; p->finishtime=0; p->turnaroundtime=0; p->weightedturnaroundtime=0; p->state='W'; if(ready!=NULL) insert3(p);

else { p->next=ready; ready=p; } } void clrscr(void); printf(\ 先来先服务算法模拟输出结果:\\n\ printf(\******\\n\ prt(alg); }

run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready->next; run->state='R';

/*****优先数调度算法*****/ void priority(char alg) {

while(run!=NULL) /*当运行队列不空时,有进程正在运行*/ {

run->cputime=run->cputime+1; run->needtime=run->needtime-1;

run->prio=run->prio-3; /*每运行一次优先数降低3个单位*/ if(run->needtime==0) /*如所需时间为0将其插入完成队列*/ {

run->next=finish; finish=run;

run->state='F'; /*置状态为完成态*/ run=NULL; /*运行队列头指针为空*/ if(ready!=NULL) /*如果就绪队列不空*/

firstin(); /*将就绪对列的第一个进程投入运行*/ }

else /*没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列*/ if((ready!=NULL)&&(run->prioprio)) {

run->state='W'; insert1(run);

firstin(); /*将就绪队列的第一个进程投入运行*/ }

prt(alg); /*输出进程PCB信息*/ } }

/*****时间片轮转法*****/

void roundrun(char alg) {

while(run!=NULL) {

run->cputime=run->cputime+1; run->needtime=run->needtime-1; run->count=run->count+1;

if(run->needtime==0)/*运行完将其变为完成态,插入完成队列*/ {

run->next=finish; finish=run; run->state='F'; run=NULL;

if(ready!=NULL)

firstin(); /*就绪对列不空,将第一个进程投入运行*/ } else

if(run->count==run->round) /*如果时间片到*/ {

run->count=0; /*计数器置0*/

if(ready!=NULL) /*如就绪队列不空*/ {

run->state='W'; /*将进程插入到就绪队列中等待轮转*/ insert2(run);

firstin(); /*将就绪对列的第一个进程投入运行*/ } } } }

prt(alg); /*输出进程信息*/

/*****先来先服务调度算法*****/ void FIFO(char alg) { int time; while(run!=NULL) { time=run->arrivetime>time?run->arrivetime:time; run->starttime=time; time=time+run->servicetime; run->finishtime=time; run->turnaroundtime=run->finishtime-run->arrivetime; run->weightedturnaroundtime=run->turnaroundtime/run->servicetime; run->next=finish; finish=run; run->state='F';

搜索更多关于: 《操作系统》实验指导书2017 的文档
《操作系统》实验指导书2017.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c33y3q7ykhu6ksx797jw59jajr88ky400ww4_6.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top