- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE
PAGE 15
中北大学
操作系统课程设计
说 明 书
?
学 院、系:
软件学院
专 业:
软件工程
学 生 姓 名:
郑丽波
学 号:
1121011747
设 计 题 目:
基于Linux的模拟进程调度
算法的实现
起 迄 日 期:
2013年11月22日- 2013年12月6日
指 导 教 师:
康珺
?
?
?2013 年
需求分析
在操作系统中,进程调度实际就是给进程分配内存资源,随着计算机系统的发展,为了更充分的利用系统资源以及提高计算机的运行效率,因此需要在不同的环境下采用不同的调度算法,使得系统具有合理的响应时间,就要求系统能按照某种算法,动态的把处理机分配给就绪队列中的一个进程,使之执行。因此,就需要设计出几种不同的算法,通过比较,选出一种最优的。
本程序主要实现基于linux的进程调度算法的实现。共实现了三种不同的调度算法,分别是:先来先服务调度算法,短作业优先调度,高响应比调度算法。
在程序的执行过程中,可以自主输入进程的个数以及进程必要的信息,如:进程的创建时间,服务时间等,然后通过不同的调度算法实现进程的调度,每一种算法都能动态的演示进程调度的过程,时间间隔为一秒钟,并且可以计算出每种调度算法下的平均周转时间和平均带权周转时间,通过排序比较各种调度算法的优劣。
总体设计
本程序主要分为四大模块:
创建进程:可以手动创建进程,用户可以自主决定进程的个数,并且在创建进程时自主决定进程名,进程的创建时间以及执行时间。
几种不同的调度算法:分别是先来先服务调度算法,短作业优先调度和高响应比调度算法。
显示结果函数:在各个调度算法中,每一步执行完后都会以表格的形式显示出进程的信息,包括:进程名,创建时间,服务时间,开始执行时间,完成时间,周转时间,带权周转时间。
比较各算法的优劣:对平均周转时间和平均带权周转时间按照由小到大的顺序进行排序比较。
结构图如下:
基于linux的进程调度算法
基于linux的进程调度算法
三种调度
算法
显示结果
先来先服务
FCFS
短作业优先
SJF
高响应比调度
HHRN
存放PCB信息结构体数组
录入PCB信息
比较各算法的优劣
程序中采用结构体来存储进程信息,其中包括:进程名,进程的创建时间,服务时间,执行时间,完成时间,周转时间,带权周转时间,等待时间,优先权,时候完成等,各个进程共同组成一个结构体数组。数据结构如下:
struct Pro//进程调度信息结构体
{
char name;//进程名
float creat_time;//创建时间
float serve_time;//服务时间
float excute_time;//执行时间
float finish_time;//完成时间
float zhou_time;//周转时间
float d_time;//带权周转时间
float wait_time;//等待时间
float priority;//优先权
int finish;//是否已经完成
};
3.详细设计
先来先服务调度算法:当在进程调度算法中采用该算法时,每次调度都是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行,该进程一直到运行完成或是发生某时间而阻塞后才放弃处理机。
核心代码:
int Input(struct Pro a[])//输入函数
{
int n,i;
printf(输入要创建的进程个数:);
scanf(%d,n);
printf(输入进程名、开始时间和服务时间:\n);
getchar();
for(i=0;in;i++)
{
scanf(%c %f %f,a[i].name,a[i].creat_time,a[i].serve_time);
getchar();
a[i].d_time=0;
a[i].finish_time=0;
}
return n;
}
void compare() //比较函数
{
float temp;
if(fsss)
{
temp=fs;
fs=ss;
ss=temp;
}
if(fshs)
{
temp=fs;
fs=hs;
hs=temp;
}
if(sshs)
{
temp=ss;
ss=hs;
hs=temp;
}
printf(平均周转时间由小到大以此为: %8.2f %3.2f %3.2f\n,fs,ss,hs);
if(ftst)
{
temp=ft;
ft=st;
st=temp;
}
if(fth
文档评论(0)