操作系统实验处理机调度C语言实现_第1页
操作系统实验处理机调度C语言实现_第2页
操作系统实验处理机调度C语言实现_第3页
操作系统实验处理机调度C语言实现_第4页
操作系统实验处理机调度C语言实现_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<math.h>#defineN2#defineMAX10typedefstructPCB//pcb进程控制块定{intnum[N];//进程序号charname[10];//进程名charstate;//进程状态inttijiaotime;//进程到达时间intruntime;//进程开始时间intfinishtime;//进程结束时间intneedtime;//服务时间intpro;//进程优先structPCB*next;//链接指针指向下个作业}pcb;structPCB*head_inputstructPCB*head_runstructPCB*head_run_pre;unsignedlongcurrent;//记录系统当前时间的变inttime=10000,n;//计时器pcb*head=NULL,*p,*q;voidgetInfo()//创建进{intnum;

请输入要建立的进程个数 请输入要建立的进程个数 for(num=0;num<n;num++){p=(pcb*)malloc(sizeof(pcb));if(head==NULL){head=p;q=p;} 依次输入:进程号进程名到达时服务时间 if(p->tijiaotime<time)time=p->tijiaotime;

q->next=pp->runtime=0;p->finishtime=0;

p->next=NULL;p->state='W';

q=p;}}//*********************1.先来先服务调度算法*******************************voidrun_fcfo(pcb*p1)//定义先来先到服务的算{time=p1->tijiaotime>time?p1->tijiaotime:time;

p1->runtime=time;

开始运行进程 现在时间是%d开始运行进程开始运行进程 time+=p1->needtime;p1->state='F';p1->finishtime=time;结束时间 %d 结束时间 %d %d %d%d}voidfcfo()//定义运行进程函{inti,j,t;for(j=0;j<n;j++)

{p=head;

t=10000for(i=0;i<n;i++)//找到当前未完成的进{if(p->tijiaotime<t&&p->state=='W')

t=p->tijiaotime;q=p;//标记当前未完成的进

p=p->next;}

run_fcfo(q)}}// ************************2. 优 先 级 调 度 服 务 算 ************************************intreadydata(){//建立就绪队if(head_input->next==NULL)

return0structPCB*p1=head_input->next,*pmax,*p2;

intmaxpro=0xffff;pmax=p1p2=head_input

while(p1!=NULL)

if(p1->pro<maxpro) { maxpro=p1->pro;head_run_pre=p2 pmax=p1; } p2=p1 p1=p1->nexthead_run=pmax;

head_run_pre->next=head_run->next;

return1}voidrunprocess()//运行进程函数{head_run->runtime-=10;

head_run->pro++;structPCB*p1,*p2;

时间片的大小 current+=10 %s始

时间片的大小 %s结束结束 if(head_run->runtime<=0)

{//判断进程是否运行结 }

else {

p1=head_inputp2=head_input->next;p1->next=head_runhead_run->next=p2 }}intreadyprocess(){while(1)

if(readydata()==0 return0 elserunprocess();}voidInit(){head_input=newPCB;

head_input->next=NULL;

current=0intnumpro;

请重新输入要建立的进程个数 请重新输入要建立的进程个数 请依次输入进程名运行时间优先级 for(inti=0;i<numpro;i++) structPCB*p1=newPCB; p1->state='C'; p1->next=NULL; structPCB*p2=head_input->next; head_input->next=p1 p1->next=p2

}// ************************3. 时 间 片 轮 转 调 度 服 务 算 ************************************voidshijianpian(){ intb,i,X,t,kinta[MAX];//存放进程的剩余时

intcnt[MAX];//存放进程调度次请输入进程数 请输入进程数请输入进程数 大小 请输入时间片大小 请依次输入各个进程的服务时间for(i=0;i<X;i++{cnt[i]=0;}剩余时间 被调度进程进程调度次数本次运行时间结果剩余时间 k=1

while(k){for(i=0;i<X;i++{if(a[i]!=0)if(a[i]>=t){a[i]-=t;b+=t;

cnt[i]=cnt[i]+1 }else{b=b+a[i];

cnt[i]=cnt[i]+1

a[i]=0 }elsecontinue;}for(i=0;i<X;i++

if(a[i]!=0){k=1;break;}

elsecontinue;if(i>=X

k=0;}}voidmain()voidmain(){ 1.按先来先到服务调度的算法模拟 getInfo();

fcfo(); 2.按优先级调度的算法模拟按

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论