操作系统课程设计.docx
- 文档编号:28354135
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:33
- 大小:168.29KB
操作系统课程设计.docx
《操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计.docx(33页珍藏版)》请在冰豆网上搜索。
操作系统课程设计
课程设计(论文)
课程名称计算机操作系统
题目名称调度算法
学部(系)
专业班级
学 号
学生姓名
指导教师
2013年12月31日
课程设计(论文)任务书
题目名称
调度算法
学生学部(系)
专业班级
姓名
学号
一、课程设计(论文)的内容
用户使用操作系统的主要目的是作业处理。
一个作业进入系统到运行结束,一般需经历收容、运行、完成三个阶段,与这三个阶段对应的作业处于后备、运行和完成三种状态。
作业调度的主要功能是按照某种原则从后备作业队列中选取作业进入主存,并为作业做好运行前的准备工作和作业完成后的善后处理工作。
常用的作业调度算法有:
先来先服务、短作业优先、响应比高者优先、优先数优先等调度算法。
衡量作业调度算法性能的主要指标有:
作业的周转时间、作业的平均周转时间和平均带权周转时间。
二、课程设计(论文)的要求与数据
(1)需求分析
(2)系统设计
(3)模块代码能正常运行
(4)提供合理的测试数据
(5)设计说明文档
三、课程设计(论文)应完成的工作
(1)采用模块化的程序设计方法,程序书写符合规范,代码应完善。
(2)要有运行结果和过程的界面截图。
(3)对系统进行初步的错误和漏洞检测;
(4)根据论文规范撰写论文,用A4纸打印并按时提交。
四、课程设计(论文)进程安排
序号
设计(论文)各阶段内容
地点
起止日期
1
搜集资料
图书馆
13.12.18-12.21
2
需求分析
图书馆
12.22
3
系统分析与设计
图书馆
12.23
4
功能模块的实现
图书馆
12.24-12.26
5
系统测试,运行
图书馆
12.27
6
完成课程设计(论文)
图书馆
12.28-12.31
五、应收集的资料及主要参考文献
[1]郁红英,李春强.《计算机操作系统》北京:
清华大学出版社,2008
[2]凤羽.《操作系统》.北京:
电子工业出版社,2004
[3]孟静.《操作系统原理教程》.北京:
清华大学出版社,2000
[4]周苏、金海溶.《操作系统原理实验》.北京:
科学出版社,2000
[5]孟庆昌.《操作系统教程》.北京:
电子工业出版社,2004
[6]陈向群,杨芙清.《操作系统教程》.2版.北京:
北京大学出版社,2006
[7]黄干平,陈洛资,等.《计算机操作系统》.北京:
科技出版社,1989
[8]冯耀林,杜舜国.《操作系统》.西安:
西安电子科技大学出版社,1989
[9]黄祥喜.《计算机操作系统实验教程》.广州:
中山大学出版社,1994
发出任务书日期:
2013年12月1日指导教师签名:
计划完成日期:
2013年12月31日
摘要
随着社会科学技术的迅猛发展,计算机以它卓越的进步已经遍布各行各业,其实计算机本身就是一堆废铁,而操作系统使它有了生命和灵魂,操作系统就相当于人的各个组织,如果没有操作系统那计算机就像一个植物人一样,毫无价值。
操作系统是配置在计算机上的第一层软件,是对硬件系统的首次扩充。
它在计算机系统中占据了特别重要的地位,很多系统软件以及大量的应用软件都依赖于操作系统的支持,取得它的服务。
在计算机系统上所配置的操作系统的主要目标与计算机系统的规模和操作系统的应用环境有关,而操作系统在计算机系统中所起的作用也可以从不同的角度来观察。
操作系统已成为从大型机直至微型机都配置的软件,在不同的操作系统中采用的调度方式是不同的,它不仅是计算机与用户之间的接口,也是计算机资源的管理者。
当今的的计算机已经从无操作系统到单道批处理系统再发展到多道程序系统然后是分时系统和实时系统。
在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。
作业是一个比程序更为广泛的概念,它不仅包含了通常的程序和数据,而且还应配有一分作业说明书,系统根据该说明书来对程序的运行进行控制。
在批处理系统中,是以作业为基本单位从外存调入内存的。
对于批量型作业而言,通常要经历作业调度和进程调度两个过程方能获得处理机。
为了管理和调度作业,在多道批处理系统中为每个作业设置了一个作业控制块,即PCB(JobControlBlock)每当作业进入系统是,系统便为每个作业创建一个PCB,根据作业类型将它插入相应的后备队列中,作业调度程序根据一定的算法来调度它们,被调度到的作业将会装入内存。
作业调度的主要功能是根据作业控制块中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程,分配必要的资源,然后,再将新创建的进程排在就绪队列上,准备准备执行。
每次执行作业调度时,都需要做以下两个决定:
1.接纳多少个作业,取决于多道程序度即允许多少个作业同时在内存中运行,多道程序度的确定是根据系统的规模和运行速度等情况做适当的折中。
2.接纳哪些作业,取决于采用的调度算法。
作业调度的算法主要包括三种:
先来先服务算法、短作业优先调度算法和高响应比优先调度算法。
本系统采用结构体定义作业的数据类型,用数组接纳各个作业,通过把创建的JCB结构体组织成链,用不同算法循环测试处理的每个作业,来确定各个作业接受系统服务的次序,从而输出每个算法对作业处理结果,即平均周转时间。
从而确定哪种算法对于本次的作业调度是最佳的算法。
关键词操作系统,作业调度,调度算法,优先权,响应比,平均周转时间,最佳算法
1序言
本次课程设计的题目为作业调度,其调度算法分别为先来先服务调度算法、短作业优先调度算法、高响应比优先调度算法。
作业调度的主要功能是根据作业控制块中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。
然后再将新创建的进程插入就绪队列,准备执行。
每个系统在选择作业调度算法时,既应考虑用户的要求,又能确保系统具有较高的效率。
在每次执行作业调度时,都须做出两个决定,一是决定接纳多少个作业;二是决定接纳哪些作业。
在OS中调度的实质是一种资源分配,因而调度算法是指:
根据系统的资源分配策略所规定的资源分配算法。
对于不同的系统和系统目标,通常采用不同的调度算法。
先来先服务调度算法是一种最简单的调度算法,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。
短作业优先调度算法是指对短作业优先调度的算法。
短作业优先的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
高响应比优先调度算法,是指将就绪队列中排序的优先权最高的作业调入内存执行。
在高响应比调度算法中,优先权的计算公式为:
优先权=(等待时间+要求服务时间)/要求服务时间,该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。
因此,该算法实现了一种较好的折衷。
当然,在利用该算法时,每要进行调度之前,都须先做响应比的计算,这会增加系统开销。
在执行高响应比优先调度算法时,每有一个作业调入内存运行后就需根据最后一次调入内存的业状态计算就绪队列中的其它作业的优先权。
在编写程序时,调度算法前建立系统源文件扩展名为.txt,利用创建(输入)函数creat()向源文件中输入作业流,把作业的基本信息输入到文件中,如:
作业的名称、作业的提交时间、作业的运行时间。
作业初始排序为到达时间先后(即先来先服务调度排序作业流)。
采用高响应比优先调度算法时,从就绪队列中选出优先权最高的作业调入内存执行,系统自动将处理机分配给它,使它立即执行并一直执行到完成。
该程序代码中执行的操作步骤主要为以二进制模式打开源文件,利用高响应比优先调度算法在就绪队列中选出当前优先权最高的作业调度运行,通过程序中的计算方法求出并输出该作业的开始时间、完成时间、周转时间。
2设计原理
用户使用操作系统的主要目的是作业处理。
一个作业进入系统到运行结束,一般需经历收容、运行、完成三个阶段,与这三个阶段对应的作业处于后备、运行和完成三种状态。
作业调度的主要功能是按照某种原则从后备作业队列中选取作业进入主存,并为作业做好运行前的准备工作和作业完成后的善后处理工作。
常用的作业调度算法有:
先来先服务、短作业优先、响应比高者优先、优先数优先等调度算法。
衡量作业调度算法性能的主要指标有:
作业的周转时间、作业的平均周转时间和平均带权周转时间。
2.1先来先服务调度算法
先来先服务(FCFS)调度算法是一种最简单的调度算法。
当在作业调度中采取该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪对列。
当程序运行选择些算法时,我们可以输入要打开的文件名,从打开的文件中按照作业依次写入文件的顺序把已写入文件的作业流信息调入到内存中,采用FCFS算法分别求出其每个作业的开始时间、完成时间、周转时间。
FCFS算法比较有利于长作业,而不利于短作业。
最后求出平均周转时间。
最简单的调度原则是先进先出就绪队列完成。
根据作业到达就绪队列的时间来分配中央处理机,一旦一个作业获得了中央处理机,就一直运行到结束,先来先服务是非剥夺调度。
这种调度从形式上讲是公平的,但它使短作业要等待长作业的完成,重要的作业要等待不重要作业的完成。
从这个意义上讲又是不公平的。
先进先出调度使响应时间的变化较小,因此它比其它大多数调度都可预测。
由于这种调度方法不能保证良好的响应时间,在处理交互式用户时很少用这种方法。
在当今系统中,先进先出很少作为调度模式,而是常常嵌套在其它的调度模式中。
2.2短作业优先调度算法
短作业优先调度算法SJF,是指对短作业或短进程优先调度的算法。
短作业(SJF)的调度算法可以照顾到实际上在所有作业中占很大比例的短作业,使它们能比长作业优先执行。
当程序运行选择些算法时,我们可以输入要打开的文件名,从打开的文件中按照作业依次写入文件的顺序把已写入文件的作业流信息调入到内存中,然后按照作业的运行时间将其从小到大依次利用链表链接起来,按照链表链接的顺序依次运行短作业,并求出其每个作业的开始时间、完成时间、周转时间。
最后求出平均周转时间。
2.3高响应比优先调度算法
高响应比优先调度算法XYB,是通过计算出作业的优先权,比较哪个作业的优先权最大就采用本调度算法运行哪个作业,优先权的计算工公式为:
优先权=(等待时间+要求服务时间)/要求服务时间。
当程序运行选择些算法时,我们可以输入要打开的文件名,从打开的文件中按照作业依次写入文件的顺序把已写入文件的作业流信息调入到内存中,然后利用循环依次求出每个作业的优先权,依次把优先权最大的作业采用链表链接起来,按照链表链接的顺序依次运行高响应比作业,并求出其每个作业的开始时间、完成时间、周转时间。
最后求出平均周转时间。
由于等待时间与服务时间之和就是系统对该作业的响应时间,故该优先权又相当于响应比Rp。
据此,又可表示为:
Rp=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间。
通过优先权计算公式可以看出:
如果作业等待时间相同,则要求运行的时间愈短,因而算法有利于短作业;当要求运行的时间相同时,作业的优先权决定于其等待时间,因而是实现了先来先服务;对于长作业,当其等待时间足够长时,其优先权便可升到很高,从而也右获得处理机。
所以,该算法既照顾了短作业,又考虑了作业到达的先后次序,也不会使长作业长期得不到服务。
因此,该算法弥补了前两种算法的不足之处,但在利用该算法进行调度作业时,第个作业的响应比的计算也是很复杂的。
响应比R定义如下:
R=(W+T)/T=1+W/T。
其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。
每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。
这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。
这种算法是介于FCFS和SJF之间的一种折中算法。
由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRN方式时其吞吐量将小于采用SJF法时的吞吐量。
另外,由于每次调度前要计算响应比,系统开销也要相应增加。
3程序分析
当程序运行时输出主界面,在主界面中提供了调用FCFS先来先服务优先调度算法、SJF短作业优先调度算法、XYB高响应比优先调度算法、创建文件(输入数据并写入文件中)、判断最佳算法、退出此程序。
3.1系统操作
第一种操作:
先来先服务调度算法,程序运行时输入要进行调度的作业文件名,之后用先来先服务调度算法调度作业。
第二种操作:
短作业优先调度算法,程序运行时输入要进行调度的作业文件名,之后用短作业优先调度算法调度作业。
第三种操作:
高响应比优先调度算法,程序运行时输入要进行调度的作业文件名,之后用高响应比优先调度算法调度作业。
第四种操作:
创建文件,可输入一批作业的数据,并且把数据保存在文本文件以免数据丢失。
以后每次调度算法时,可直接运用此文件中的数据信息。
第五种操作:
判断最佳算法,调度完三种调度算法后,求出最佳算法。
第六种操作:
正常退出此程序。
3.2程序功能结构图
本系统主要实现作业调度的功能,所以应该包括添加作业信息功能,先来先服务调度算法功能,短作业优先调度算法功能,响应比优先调度算法功能,总结最优调度算法功能。
功能结构图如图3.1所示。
图3.1功能结构图
3.3程序功能流程图
3.3.1创建作业流程图
在创建作业功能中,首先创建一个新的文件,然后开始创建作业,将作业信息存入文件,其流程图如图3.2所示。
图3.2创建作业流程图
3.3.2先来先服务调度算法流程图
先来先服务就是根据提交时间来将作业排序,并依次处理先来先服务流程图如图3.3所示。
图3.3先来先服务调度算法流程图
3.3.3短作业优先调度算法流程图
短作业优先算法是将第一个提交的作业先进行处理,并将后来的作业对其处理时间由短到长重新排序,最后算出处理所有作业的周转时间。
其流程图如图3.4所示。
图3.4先来先服务调度算法流程图
3.3.4响应比优先调度算法流程图
响应比优先调度算法先将第一个进入序列的作业进行处理,然后计算后来进入序列的作业的响应比,按照响应比由高到低的顺序进行排序,并依次处理,最后计算出所有作业的周转时间。
其流程图如图3.5所示。
图3.5响应比优先调度算法流程图
3.3.5总结最优调度算法流程图
总结最优调度功能主要是通过比较先来先服务调度算法,短作业优先调度算法以及响应比优先调度算法得出的平均周转时间,得出最短的周转时间和最优化的算法,但是如果想执行此功能,首先要确定其他三个算法已经运行完成,才可以执行,其功能流程图如图3.6所示。
图3.6总结最优调度算法
4程序的实现
4.1主函数程序实现
4.1.1主程序实现功能
主函数中主要运用了printf()函数。
printf()函数用于将程序的主界面在屏幕上打印输出,提示用户进行选择来调度相应的作业调度算法实现不同的作业调度算法。
主程序主要实现的是作业管理的主界面菜单的显示,利用switch语句实现主菜单的调用。
switch()函数正是用来接收用户从键盘上输入的选择信息,根据用户输入的选择来调度相应的调度算法进而使函数运行实现相应的调度算法功能。
本程序设置数字键选项1~6,分别实现调用先来先服务算法(fcfs)、调用短作业优先算法(sjf)、调用高响应者优先算法(xyb)、作业的创建(creat)、调用总结函数(zj)和退出程序功能。
在运行菜单中,用户输入1~6的任意键,即进入对应的文件操作,完成操作后,可继续重复执行菜单选项以实现其他的文件操作功能。
4.1.2主程序实现代码
主程序代码如下:
#include
#defineSIZE4
structjcb
{intname;
floattjtime;
floatruntime;
floatstarttime;
floatfinishtime;
floatturntime;
floatxyb;
structjcb*next;
}
sr[SIZE],sw[SIZE],sq[SIZE];
floatpj[3]={0};
intmain()
{intx;
printf("\n\n\n\n");
printf("Pleasechoosethenumber:
\n");
printf("|choose[1]:
FCFS\n");
printf("|choose[2]:
SJF\n");
printf("|choose[3]:
XYB\n");
printf("|choose[4]:
CREAT\n");
printf("|choose[5]:
ZJ\n");
printf("|choose[6]:
EXIT\n");
printf("---------------------------------------------------------------\n");
scanf("%d",&x);
switch(x)
{
case1:
fcfs();
break;
case2:
sjf();
break;
case3:
xyyb();
break;
case4:
creat();
break;
case5:
zj();
break;
case6:
exit(0);
}
}
4.2创建作业函数的实现
4.2.1函数说明
根据宏定义中定义的SIZE的大小,本次课程设计的程序中为作业设定了四个作业的调度情况,在具体的运行过程中,首先界面提示输入文件名,输入文件名“1”后界面提示分别输入作业的名称、提交时间和运行时间,整型数据和浮点型数据均可,中间用空格隔开。
4.2.2创建函数实现代码
creat()创建函数用于创建文件并把作业的相关信息如:
作业的名称(name)、作业的提交时间(tjtime)和作业的运行时间(runtime)这些基本信息写入文本文件中,使程序运行时当调用不同的调度算法时作业的基本信息不被破坏。
同时为以后运行时对选用不同算法而算出的平均周转时间进行比较。
创建函数程序代码如下:
creat()
{
FILE*fp;
inti,j;
chara[20];
pj[0]=0;pj[1]=0;pj[2]=0;
printf("\t\t\twelcometoCREAT\n");
printf("qingshuruwenjianming\n");
scanf("%s",a);
if((fp=fopen(a,"wb"))==NULL)/*以二进制文件写入*/
{
printf("cannotopenfile\n");
}
for(i=0;i {printf("inputnumber%drecord'sname,tjtime,runtime: \n",i+1); scanf("%d%f%f",&sr[i].name,&sr[i].tjtime,&sr[i].runtime); if(fwrite(&sr[i],sizeof(structjcb),1,fp)! =1) printf("filewriteerror\n"); } fclose(fp); printf("pleasepressanykeyreturnmain()\n"); getchar(); getchar(); main(); } 4.3先来先服务函数 4.3.1函数说明 先来先服务算法,每次调度是从后备作业队列中,选择一个最先进入该队列的作业,把处理机分配给它,使之投入运行。 通过一系列运算求出其作业的开始时间、完成时间、周转时间。 最后求出此调度算法下的平均周转时间,并将所求出的数据信息输出在屏幕上。 该算法补角有利于长作业,而不利短作业。 4.3.2先来先服务代码 先来先服务代码如下: fcfs() { FILE*fp; intj; charb[20]; structjcb*t,*p,*q,*head; p=q=(structjcb*)malloc(sizeof(structjcb)); head=NULL;pj[0]=0; printf("\t\t\twelcometofcfs\n"); printf("qingshuruwenjianming\n"); scanf("%s",b); if((fp=fopen(b,"rb"))==NULL) {printf("cannotopenfile\n"); printf("pleasepressanykeyreturn: \n"); getchar(); getchar(); main(); } printf("welcomecometofcfo: \n"); for(j=0;j {fread(&sr[j],sizeof(structjcb),1,fp); if((j+1)==1)head=p; else q->next=p; t=q; q=p; p=(structjcb*)malloc(sizeof(structjcb)); q->name=sr[j].name; q->tjtime=sr[j].tjtime; q->runtime=sr[j].runtime; if(j==0) q->starttime=q->tjtime; elseq->starttime=t->finishtime; q->finishtime=(q->starttime+q->runtime); q->turntime=(q->finishtime-q->tjtime); } q->next=p; p->next=NULL; p=head; printf("nametjtimeruntimestarttimefinishtimeturntime\n"); while(p->next! =NULL) {printf("%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t\n",p->name,p->tjtime,p->runtime,p->starttime,p->finishtime,p->turntime); pj[0]=pj[0]+p->turntime; p=p->next; } pj[0]=pj[0]/SIZE; printf("fcfo'saverageturntime: %f\n",pj[0]); printf("pleasepressanykeyreturnmain()\n"); getchar(); getchar(); main(); } 4.4短作业优先函数 4.4.1函数说明 短作业(进程)优先调度算法SJ(P)F,是对短作业或短进程优先调度的算法。 它们可以分别用于作业调度和作业进程。 短作业优先(SJF)的调度算法时从后备队列
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计