进程调度模拟设计——优先级法、最高响应比优先调度算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附件1:
课程设计
进程调度模拟设计——优先级
题目
法、最高响应比优先调度算法
学院计算机科学与技术
专业计算机科学与技术
班级计算机科学与技术
姓名
指导教师
2011 年01 月18 日
课程设计任务书
学生姓名:专业班级:计算机科学与技术
指导教师:工作单位:计算机科学与技术学院
题目: 进程调度模拟设计——优先级法、最高响应比优先调度算法初始条件:
1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写
等具体要求)
1.模拟进程调度,能够处理以下的情形:
⑴能够选择不同的调度算法(要求中给出的调度算法);
⑵能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;
⑶根据选择的调度算法显示进程调度队列;
⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。
2.设计报告内容应说明:
⑴课程设计目的与功能;
⑵需求分析,数据结构或模块说明(功能与框图);
⑶源程序的主要部分;
⑷测试用例,运行结果与运行情况分析;
⑸自我评价与总结:
i)你认为你完成的设计哪些地方做得比较好或比较出色;
ii)什么地方做得不太好,以后如何改正;
iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);
iv)完成本题是否有其他方法(如果有,简要说明该方法);
v)对实验题的评价和改进意见,请你推荐设计题目。
时间安排:
设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试。
周4、周5:验收、撰写课程设计报告。
(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)
指导教师签名:年月日
系主任(或责任教师)签名:年月日
进程调度模拟设计
(优先级法、最高响应比优先调度算法)
1设计目的与实现功能
模拟进程调度,使程序能够完成:选择不同的调度算法(优先级法或者最高响应比法),选毕算法,能够输入若干进程,包括进程的一些基本信息,如进程名、优先级、到达时间和运行时间等;根据选择的调度算法显示进程调度队列;根据选择的调度算法计算平均周转时间和平均带权周转时间。
2需求分析
2.1实验原理
最高响应比优先算法(HRN):最高响应比是对先来先服务和最短进程优先法德一种综合平衡。HRN调度策略同时考虑每个进程的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的进程投入执行。
响应比R定义如下:
R=(W+T)/T=1+W/T
其中T为该进程的估计需要的执行时间,W为进程在后备状态队列的等待时间。每当要进行进程调度是,系统计算每个进程的响应比,选择其中R最大者投入执行。
优先级法:系统和用户按某种原则为进程制定一个优先级来表示该进程所享有的调度优先权。根据优先级的高低来对进程加以调度。
3. 数据结构
3.1主要结构及函数
struct elment
{
char name[10]; //进程的名称
prigle pri;
int hour; //进程提交的时间(小时)
int min; //进程提交(分钟)
int time; //进程运行需要的时间
int time1; //记录进程开始运行的时间
int test; // 进程是否在等待的判断位
};
struct prigle
{
float prii; //记录进程优先级或者响应比
int num; //作用一:定位进程,作用二,标记进程是否运行
};
void input() //输入进程信息
void Getpriorder() //按优先级从大小排列进程
void HRN() //最高响应比算法
void Getorder() //与void Getpriorder() 连用,完成优先级算法最高响应比算法思路:
参数自己按照提示输入;中断时机,某进程执行完成;
调度算法思路:系统时间取的第一个进程的提交时间,并执行第一个进程;当某进程执行完成时,系统时间加上该完成进程的运行时间,并删除该节点。
3.2流程图
4. 源程序的主要部分
4.1,输入函数
void input() //输入进程信息
{
while(1)
{
int d=0;
cout<<"请输入第"< if(or==1)cout<<"优先级,"; cout<<"到达时间,运行时间"< scanf("%s",e[all].name); if(or==1)cin>>e[all].pri.prii; else e[all].pri.prii=0; fflush(stdin); char t[5]; scanf("%s",&t); d=(t[0]-48)*10+(t[1]-48); if(d>24||d<0) { cout<<"输入有误(24小时形式),请重新输入"< continue; } e[all].pri.num=all; e[all].hour=d; d=(t[3]-48)*10+(t[4]-48); e[all].min=d; e[all].test=0; cin>>e[all].time; e[all].time1=e[all].hour*60+e[all].min; all++; int test1; cout< cout<<"是否继续输入,继续输入请按1,否则按其他键"; cin>>test1; if(test1!=1)break; }} 4.2,最高响应比 void HRN() //最高响应比算法 { elment temp=e[0];