进程调度模拟算法

上传人:ji****n 文档编号:45718841 上传时间:2018-06-18 格式:DOC 页数:7 大小:57.50KB
返回 下载 相关 举报
进程调度模拟算法_第1页
第1页 / 共7页
进程调度模拟算法_第2页
第2页 / 共7页
进程调度模拟算法_第3页
第3页 / 共7页
进程调度模拟算法_第4页
第4页 / 共7页
进程调度模拟算法_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《进程调度模拟算法》由会员分享,可在线阅读,更多相关《进程调度模拟算法(7页珍藏版)》请在金锄头文库上搜索。

1、课课 程程 计算机操作系统原理 实验名称实验名称 进程调度模拟算法 院院 系系 计算机科学与技术 专业班级专业班级 计0804 姓名姓名 李超 学学 号号 200807010409 实验日期实验日期 2011年 05月 11日 实验报告日期实验报告日期 2011年 05月 11日 1内容:设计一个简单的进程调度算法,模拟 OS 中的进程调度过程; 2要求: 进程数不少于 5 个; 进程调度算法任选;可以用动态优先数加时间片轮转法实现进程调度,每运行一个时间片优先数减 3; 用 C 语言编程; 程序运行时显示进程调度过程。 3步骤: 设计 PCB 及其数据结构:进程标识数:ID进程优先数:PRI

2、ORITY(优先数越大,优先级越高)进程已占用时间片:CPUTIME,每得到一次调度,值加 1;进程还需占用时间片:ALLTIME,每得到一次调度,该值减 1,一旦运行完毕, ALLTIME 为 0)进程队列指针:NEXT,用来将 PCB 排成队列进程状态:STATE(一般为就绪,可以不用) 设计进程就绪队列及数据结构; 设计进程调度算法,并画出程序流程图; 设计输入数据和输出格式;结构格式:当前正运行的进程:0当前就绪队列:2,1,3,4 编程上机,验证结果。 4提示: 假设调度前,系统中有 5 个进程,其初始状态如下: ID01234 PRIORITY93830290 CPUTIME000

3、00 ALLTIME32634可否考虑用 数组或链表 去实现 STATEreadyreadyreadyreadyready 以时间片为单位调度运行; 每次调度 ALLTIME 不为 0,且 PRIORITY 最大的进程运行一个时间片; 上述进程运行后其优先数减 3,再修改其 CPUTIME 和 ALLTIME,重复, 直到所有进程的 ALLTIME 均变为 0。 5书写实验报告 实验题目; 程序中所用数据结构及说明; 清单程序及描述; 执行结果。#include “stdio.h“ #include #include #define getpch(type) (type*)malloc(siz

4、eof(type) #define NULL 0 struct pcb / 定义进程控制块 PCB char name10; char state; int super; int runtime; int waittime; struct pcb *link; *ready,*p; /*ready=NULL,*p; /typedef struct pcb PCB;void sort() / 建立对进程进行优先级排列函数 /PCB *first, *second; pcb *first,*second;int insert=0; if(ready=NULL)|(p-super)(ready-su

5、per) /优先级最大者,插入队首 p-link=ready; ready=p; else/ 进程比较优先级,插入适当的位置中 first=ready; second=first-link; while(second!=NULL) if(p-super)(second-super) /若插入进程比当前进程优先数大 p-link=second; first-link=p; second=NULL; insert=1; /插入到当前进程前面 else first=first-link; second=second-link; if(insert=0) first-link=p; return ;

6、void sortruntime() /运行时间处理函数 /PCB *first, *second; pcb *first,*second;int insert=0; if(ready=NULL)|(p-runtime)runtime) /处理时间少的插入前边 p-link=ready; ready=p; else / 进程处理时间比较插入合适的位置,插入适当的位置中 first=ready; second=first-link; while(second!=NULL) if(p-runtime)runtime) /处理时间少的插入前边 p-link=second; first-link=p;

7、 second=NULL; insert=1; /插入到当前进程前面 else first=first-link; second=second-link; if(insert=0) first-link=p; return ; sortwaittime() / 等待时间处理函数 /PCB *first, *second; pcb *first,*second;int insert=0; if(ready=NULL)|(p-waittime)(ready-waittime) /等待时间长的插入到当前队 列前面 p-link=ready; ready=p; else / 进程比较优先级(即等待时间

8、长的优先级高),插入适当的位置中 first=ready; second=first-link; while(second!=NULL) if(p-waittime)(second-waittime) /若插入进程比当前进程优先数大 p-link=second; first-link=p; second=NULL; insert=1; /插入到当前进程前面 else first=first-link; second=second-link; if(insert=0) first-link=p; return ; void select()/判断函数(还可以改进算法) /pcb *first,*

9、second; if(ready = NULL) | (p-super) != (ready-super) sort(); else if(ready = NULL) | (p-super) = (ready-super) | (p-runtime) != (ready-runtime) sortruntime();else if(ready = NULL) | (p-super) = (ready-super) | (p-runtime) = (ready-runtime) | (p-waittime) != (ready-waittime) sortwaittime(); input()

10、/ 建立进程控制块函数 int i,num; printf(“n 请输入进程个数:“); scanf(“%d“, for(i=0;iname); printf(“n 输入进程优先数:“); scanf(“%d“, printf(“n 输入进程运行时间:“); scanf(“%d“,printf(“n 输入进程等待时间:“); scanf(“%d“,printf(“n“); /p-waittime=0; p-state=W; p-link=NULL; /sort(); / 调用 sort 函数 /sortruntime();/调用 sortrunrime 函数 /sorwaittime();/调

11、用 sortwaitrime 函数 select();/算法还可以改进 int space() int l=0; pcb* pr=ready; while(pr!=NULL) l+; pr=pr-link; return(l); disp(pcb * pr) /建立进程显示函数,用于显示当前进程! printf(“nqnametstatetsupertruntimetwaittimen“); printf(“%st“,pr-name); printf(“%ct“,pr-state); printf(“%dt“,pr-super); printf(“%dt“,pr-runtime); print

12、f(“%dt“,pr-waittime); printf(“n“); check() / 建立进程查看函数 pcb* pr; printf(“n * 当前正在运行的进程是:%s“,p-name); /显示当前运行进程 disp(p); pr=ready; printf(“n *当前就绪队列状态为:n“); /显示就绪队列状态 while(pr!=NULL) disp(pr); pr=pr-link; destroy() /建立进程撤消函数(进程运行结束,撤消进程) printf(“n 进程 %s 已完成.n“,p-name); free(p); running() / 建立进程就绪函数(进程运

13、行时间到,置就绪状态 (p-waittime)+; if(p-waittime=p-runtime) destroy(); else (p-super)-; p-state =W; sort(); /sortruntime(); main() int len,h=0; char ch; input(); len=space(); while(len!=0) h+; printf(“n The execute number:%d n“,h); p=ready; ready=p-link; p-link=NULL; p-state=R; check(); running(); printf(“n 按任一键继续.“); ch=getchar(); printf(“nn 进程已经完成.n“); ch=getchar();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

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