- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一 进程调度
一、实验目的
编写并调试一个模拟的进程调度程序,以加深对进程的概念及进程调度算法的理解.
二、实验内容
采用“短进程优先”调度算法对五个进程进行调度。每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、到达时间、需要运行时间、已用CPU时间、进程状态等等。
每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。
三、实现思路
主函数-输入函数-短作业优先调度函数-输出函数。
这是一条最基础的思路。输入函数使用文本导入完成数据输入,输出函数输出调度结果,主函数完成各子函数连接,最主要的是短作业优先的调度函数。我想到的方法就是排序,不断选择需要运行时间最短的作业,接着进行数据输入计算输出等,遍历全部数据并完成调度。
四、主要的数据结构
struct Process_struct{
char name[MaxNum]; //进程名称
int arrivetime; //到达时间
int servertime; //开始运行时间
int finishtime; //运行结束时间
int runtime; //运行时间
int runflag; //调度标志
int order; //运行次序
double weightwholetime; //周转时间
double averagewt_FCFS,averagewt_SJF; //平均周转时间
double averagewwt_FCFS,averagewwt_SJF; //平均带权周转时间
}pro[MaxNum];
五、算法流程图
运行程序
看菜单,选操作
0或1
1 0
input()输入导入函数
SJF()-第一个先到达先执行
printf()输出调度结果
是否完成
是
否
运行结束
SJF()-选最短作业调度
六、运行与测试
用书上数据对程序进行测试,结果如下:
另外随便添加一些数据进行测试,结果如下:
代码实现:
#includeiostream
#includewindows.h
#define MaxNum 100
using namespace std;
struct Process_struct{
char name[MaxNum]; //进程名称
int arrivetime; //到达时间
int servertime; //开始运行时间
int finishtime; //运行结束时间
int runtime; //运行时间
int runflag; //调度标志
int order; //运行次序
double weightwholetime; //周转时间
double averagewt_FCFS,averagewt_SJF; //平均周转时间
double averagewwt_FCFS,averagewwt_SJF; //平均带权周转时间
}pro[MaxNum];
int N; //实际进程个数
int SJF(); //短作业优先函数
int SJF()
{
int temp_time=0;
int i=0,j;
int number,temp_counter; //进程编号,当前已执行进程个数
float run_time;
int min=0;
run_time=pro[i].runtime;
j=1;
whi
文档评论(0)