学生实验报告
实验课名称:计算机操作系统 实验项目名称:进程调度
专业名称:计算机科学与技术(交通信息工程) 班学
级: 2012240204 号: 201224020425
学生姓名: 刘涛 教师姓名: 刘晓春
2014 年 12 月 20 日
一、实验名称: 进程调度
二、实验目的与要求:
要求学生通过实验加深理解进程调度的特点,并掌握几种常见的调度算法。
三、实验内容:
编写模拟程序实现FIFO算法和轮转法,比较他们的不同之处。
四、实验原理
不同的调度算法,平均周转时间和平均带权周转时间有很大差别,应根据具体情况具体选择。
FIFO算法每次调度都选择最先进入就绪队列的进程调度,轮转法能够保证就绪队列总的所有进程在一给定的时间内,均能获得一个时间片的处理机执行时
五、源代码及实验结果
#include
//定义最大进程数
//定义进程控制块PCB结构体类型 typedef struct PCB_Node{ char sName[20]; //进程名 int iStatus; //进程状态(1就绪 2等待 3运行) 当前程序中暂时全部默认为就绪处理 int iRunTime; //进程运行时间(纳秒) int iPriority; //进程优先数(数字越小优先级越高) int iBeFinished; //进程是否执行完成标志(1:已完成;0:末完成) int iWaitTime; //进程等待时间(纳秒) }PCB;
PCB pcbs[MAXPCB]; //PCB数组队列 int iPCBNum; //实际进程数 char sFileName[20]; //进程流文件名 void InitPCB(); int ReadPCBFile(); void ReSetPCB(); void FIFO(); void RR(); void Hint();
void InitPCB() {
int i; for(i=0;i int ReadPCBFile() //读进程流文件数据,存入PCB数组队列pcbs,并输出 { FILE *fp; int i; char cHead; cout<<\请输入要打开的进程流(文本)文件名(注意:包括路径名和后缀名): \ cin>>sFileName; if((fp=fopen(sFileName,\ { cout<<\错误:进程流文件 \打不开,请检查文件名和路径!!\ return -1; } else { cHead=fgetc(fp); while(cHead==' '||cHead==10||cHead==9) cHead=fgetc(fp); } if(cHead==EOF) { printf(\错误:进程流文件:%s 为空!!\\n\ return -1; } else { fseek( fp, -1, SEEK_CUR); while(!feof(fp)) { fscanf(fp,\s[iPCBNum ].iPriority); iPCBNum++; } //输出所读入的进程数据 cout< } void ReSetPCB() //重置PCB完成标志、等待时间,以供另一个调度算法使用,并输出所读入的进程数据 { int i; //输出所读入的进程数据 cout< void FIFO() //先进先出调度算法 { int i,j; int iSum; //总等待时间 //输出先进先出调度算法执行流 cout< void RR() //时间片轮转调度算法 { int i; int iNotEnded=1; //循环控制标志:不是所有进程都已经获得足够时间片运行完成,需要继续轮转。 int iNum; //到目前为止末执行完的进程数 int iRound=0; //轮转周期数 int iSum=0; //总时间片数 float fBlockTime=10; //时间片的长度(纳秒) cout< cin>>fBlockTime; cout< void Hint() { cout<<\二、本程序包括:FIFO,优先级调度算法(静态优先级),时间片轮转调度算法,。\ cout<<\输入:进程流文件(文本文件),其中存储的是一系列要执行的进程,每个进程包括四个数据项: \ cout<<\进程名 进程状态(1就绪 2等待 3运行) 所需时间 优先级(0级最高) \ cout<<\输出:进程执行流 等待时间 平均等待时间 \ cout<<\ \ cout<<\━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ \ cout< void main() { int iInput; //用户输入的整数以选择算法 bool bGoOn; //是否继续进程调度算法模拟的标志 char sGoOn[1]; //用户输入是否继续进程调度算法模拟的字母:y、Y、N、n Hint();