进程调度模拟实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
盛年不重来,一日难再晨。及时宜自勉,岁月不待人。
操作系统课程设计报告题目:进程调度算法的模拟实现
专业计算机科学与技术
学生姓名刘远强
班级计算机131
学号**********
指导教师韩立毛
完成日期2015.7.10
信息工程学院
目录
1 概述 (3)
1.1 设计目的 (3)
1.2 设计要求 (3)
2 设计原理 (3)
2.1 先来先服务算法 (3)
2.2 短进程优先算法 (3)
2.3高优先权优先算法 (3)
2.4高响应比优先算法 (3)
3 概要设计 (4)
3.1 功能结构 (4)
4 详细设计 (4)
4.1 用户界面模块设计 (4)
4.2 算法模块设计 (5)
5 测试与分析 (12)
5.1 测试方案 (12)
5.2 测试结果 (12)
5.3 结果分析 (14)
6 设计小结 (15)
7 参考文献 (15)
附录源程序代码 (15)
题目:进程调度算法的模拟实现
1 概述
1.1 设计目的
在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个,也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。
1.2设计要求
a)至少有四种作业调度算法;
b)能根据不同的调度算法算出每个作业的周转时间和带权周转时间,并通过一组作业算出系统的平均周转时间和平均带权周转时间,比较各种算法的优缺点;
c)设计一个实用的用户界面,以便选择不同的作业调度算法。
2 设计原理
2.1 先来先服务算法
每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源创建进程,然后放入就绪队列。
2.2 短进程优先算法
短进程优先调度算法是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。
2.3高优先权优先算法
a)当该算法用于作业调度时,系统从后备作业队列中选择若干个优先级最高的,且系统能满足资源要求的作业装入内存运行。
b)当该算法用于进程调度时,将把处理机分配给就绪进程队列中优先级最高的进程。
2.4高响应比优先算法
高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。
3 概要设计
3.1 功能结构
函数调用流程图如图3—1
图3—1
4 详细设计
4.1 用户界面模块设计
用户界面包含4种算法的选择项及退出项,并能根据对应选项做出相应反应。选择算法则进入所选算法进行进一步计算,选择退出则关闭界面,输入其他错误字符会显示错误提示。
void main()
{
int choice;
cout<<" *进程调度算法模拟实现*"< cout<<"***1.先来先服务算法******2.短作业优先算法***"< cout<<"***3.高优先权优先算法******4.高响应比优先算法*****"< cout<<"****************5.退出**********************************"< l1: cout<<"请输入您的选择:"< l2:cin>>choice; JCB *head=NULL; switch(choice) { case 1:head=create(head);FCFS(head);goto l1; case 2:head=create(head);SJF(head,jnum);goto l1; case 3:head=create(head);SUPER(head,jnum);goto l1; case 4:head=create(head);HRN(head,jnum);goto l1; case 5:break; default:cout<<"输入错误!\n请重新输入:"< } } 4.2算法模块设计 先来先服务算法:直接复制首个作业的链表HEAD作为先来先服务的链表(因为首个原始输入作业的链表就是按输入顺序进行链接形成的)。 void FCFS(JCB *head)//先来先服务算法 { dealFCFS(head); JCB *p,*q,*s; p=head->next; cout<<"作业执行顺序为:"; while(p!=NULL) { cout<<"--"< p=p->next; } cout< cout<<"作业名提交时间开始时间结束时间周转时间带权周转时间\n"; s=head->next; while(s!=NULL) { cout<