操作系统实验处理机调度C语言实现

上传人:豆浆 文档编号:92306109 上传时间:2019-07-08 格式:DOCX 页数:8 大小:184.20KB
返回 下载 相关 举报
操作系统实验处理机调度C语言实现_第1页
第1页 / 共8页
操作系统实验处理机调度C语言实现_第2页
第2页 / 共8页
操作系统实验处理机调度C语言实现_第3页
第3页 / 共8页
操作系统实验处理机调度C语言实现_第4页
第4页 / 共8页
操作系统实验处理机调度C语言实现_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《操作系统实验处理机调度C语言实现》由会员分享,可在线阅读,更多相关《操作系统实验处理机调度C语言实现(8页珍藏版)》请在金锄头文库上搜索。

1、#include#include#include #include#define N 20#define MAX 100typedef struct PCB /pcb进程控制块定义 int numN; /进程序号 char name10; /进程名 char state; /进程状态 int tijiaotime; /进程到达时间 int runtime; /进程开始时间 int finishtime; /进程结束时间 int needtime; /服务时间 int pro;/进程优先级 struct PCB *next; /链接指针 指向下个作业的pcb;struct PCB *head_i

2、nput;struct PCB *head_run;struct PCB *head_run_pre;unsigned long current; /记录系统当前时间的变量int time=10000,n; /计时器 pcb *head=NULL,*p,*q;void getInfo() /创建进程 int num; printf(n请输入要建立的进程个数:); scanf(%d,&n); for(num=0;numnum,&p-name,&p-tijiaotime,&p-needtime); if(p-tijiaotime tijiaotime; q-next=p; p-runtime=0;

3、 p-finishtime=0; p-next=NULL; p-state=W; q=p; / *1.先来先服务调度算法*void run_fcfo(pcb *p1)/定义先来先到服务的算法 time = p1-tijiaotime time? p1-tijiaotime:time; p1-runtime=time; printf(n现在时间是%d,开始运行进程%sn,time,p1-name); time+=p1-needtime; p1-state=F; p1-finishtime=time; printf(进程名 开始时间 所需时间 结束时间n); printf(%s %d %d %d

4、,p1-name,p1-runtime,p1-needtime,p1-finishtime);void fcfo()/定义运行进程函数 int i,j,t; for(j=0;jn;j+) p=head; t=10000; for(i=0;itijiaotimestate=W) t=p-tijiaotime; q=p; /标记当前未完成的进程 p=p-next; run_fcfo(q); / *2.优先级调度服务算法*int readydata() /建立就绪队列 if(head_input-next=NULL) return 0; struct PCB *p1=head_input-next,

5、*pmax,*p2; int maxpro=0xffff; pmax=p1; p2=head_input; while(p1!=NULL) if(p1-propro; head_run_pre=p2;pmax=p1; p2=p1; p1=p1-next; head_run=pmax; head_run_pre-next=head_run-next; return 1;void runprocess() /运行进程函数 head_run-runtime-=10; head_run-pro+; struct PCB *p1,*p2; printf(时间片的大小 %d,current); curre

6、nt+=10; printf( %s 开始n,head_run-name); printf(时间片的大小 %d,current); printf( %s 结束n,head_run-name); if(head_run-runtimenext; p1-next=head_run; head_run-next=p2; int readyprocess() while(1) if(readydata()=0) return 0; else runprocess(); void Init() head_input=new PCB; head_input-next=NULL; current=0; in

7、t numpro; printf(请重新输入要建立的进程个数:); scanf(%d,&numpro); printf(请依次输入 进程名 运行时间 优先级n); for(int i=0;iname); scanf(%d,&p1-runtime); scanf(%d,&p1-pro); p1-state=C; p1-next=NULL; struct PCB *p2=head_input-next; head_input-next=p1; p1-next=p2; / *3.时间片轮转调度服务算法*void shijianpian()int b,i,X,t,k;int aMAX;/存放进程的剩余

8、时间int cntMAX;/存放进程调度次数printf(请输入进程数:);scanf(%d,&X);printf(n请输入时间片t大小:);scanf(%d,&t);printf(n请依次输入各个进程的服务时间);for(i=0;iX;i+)scanf(%d,&ai);cnti=0;printf(被调度进程t进程调度次数 t本次运行时间结果t剩余时间n);k=1;while(k)for(i=0;i=t) ai-=t; b+=t; cnti=cnti+1; printf(nt%dtt%dtt%dtt%d,i+1,cnti,b,ai); else b=b+ai; cnti=cnti+1; ai=

9、0; printf(nt%dtt%dtt%dtt%d,i+1,cnti,b,ai);else continue;for(i=0;i=X) k=0;void main() printf( *); printf(n 1. 按先来先到服务调度的算法模拟n); printf( *); getInfo(); fcfo(); printf(n *); printf(n 2. 按优先级调度的算法模拟n); printf(n *n); Init(); readyprocess(); printf(n *); printf(n 3. 按时间片轮转调度的算法模拟n); printf( *n);shijianpian(); printf( n);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号