操作系统实验·模拟进程调度资料.pdf
上传人:13****51 上传时间:2024-09-12 格式:PDF 页数:9 大小:1.2MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

操作系统实验·模拟进程调度资料.pdf

操作系统实验·模拟进程调度资料.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验二程序模拟“进程调度”一、实验要求1.设计进程调度算法,进程数不定2.包含几种调度算法,并加以实现3.输出进程的调度过程——进程的状态、链表等。4.编写出源程序二、参考例1.题目——优先权法、轮转法简化假设1)进程为计算型的(无I/O)2)进程状态:ready、running、finish3)进程需要的CPU时间以时间片为单位确定2.算法描述1)优先权法——动态优先权当前运行进程用完时间片后,其优先权减去一个常数。2)轮转法3)FIFO调度三、实验部分流程图开始读入文件进程流文件FIFON优先权法?轮转法BY产生n个进程,对每个进程产生一个PCB,并用随机数产生进程的优先权及进程所需的CPU时间按优先权大小,把n个进程拉成一个就绪队列初始化其他数据结构区链首进程投入运行时间片到,进程所需的CPU时间减1,优先权减3,输出个进程的运行情况N所需的CPU时间=0?将进程插入就绪队列Y撤销进程N就绪队列为空?Y结束B产生n个进程,对每个进程用随机数产生进程的轮转时间片数及进程所需的时间片数,已占用CPU的时间片数置为0按进程产生的先后次序拉成就绪队列链链首进程投入运行时间片到,进程所需时间片数减1,已占用CPU时间片数加1输出各进程的运行情况NY进程所需时间片数=0?撤销该进程就绪队列为空吗?NYN占用CPU的时间片数=轮转时间片数?结束Y占用CPU的时间片数置为0把该进程插入就绪队列尾注意:1.产生的各种随机数的取值范围加以限制,如所需的CPU时间限制在1~20之间。2.进程数n不要太大通常取4~8个3.使用动态数据结构4.独立编程5.至少三种调度算法四、实验过程:(1)输入:进程流文件(1.txt),其中存储的是一系列要执行的进程,每个作业包括四个数据项:进程名进程状态(1就绪2等待3运行)所需时间优先数(0级最高)进程01502进程12104进程21150进程33285进程42191进程5387输出:进程执行流等待时间,平均等待时间本程序包括:FIFO算法,优先数调度算法,时间片轮转调度算法实验代码如下:#include<stdio.h>#include<string.h>#include<iostream.h>constintblock_time=10;//定义时间片的长度为10秒constintMAXPCB=100;//定义最大进程数//定义进程结构体typedefstructnode{charname[20];intstatus;inttime;intprivilege;intfinished;intwait_time;}pcb;pcbpcbs[MAXPCB];intquantity;//初始化函数voidinitial(){inti;for(i=0;i<MAXPCB;i++){pcbs[i].status=0;pcbs[i].time=0;pcbs[i].privilege=0;pcbs[i].finished=0;pcbs[i].wait_time=0;}quantity=0;}//读数据函数intreadData(){FILE*fp;charfname[20];inti;请输入进程流文件名cin>>fname;{错误,文件打不开,请检查文件名}else{while(!feof(fp)){&pcbs[quantity].time,&pcbs[quantity].privilege);quantity++;}//输出所读入的数据输出所读入的数据进程名进程状态所需时间优先数for(i=0;i<quantity;i++){}return(1);}return(0);}//重置数据,以供另一个算法使用voidinit(){inti;for(i=0;i<MAXPCB;i++){pcbs[i].finished=0;pcbs[i].wait_time=0;}}//先进先出算法voidFIFO(){inti,j;inttotal;//输出FIFO算法执行流算法执行流进程名等待时间for(i=0;i<quantity;i++){for(j=i+1;j<quantity;j++){pcbs[j].wait_time+=pcbs[j].time;}}total=0;for(i=0;i<quantity;i++){total+=pcbs[i].wait_time;}总等待时间平