ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:662.09KB ,
资源ID:3603554      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3603554.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统大作业.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统大作业.docx

1、操作系统大作业2013-2014学年度第一学期大作业课程名称: 计算机操作系统 任课教师: 作业题目: 作业调度模拟 姓名: 学 号: 专 业:计算机科学与技术 教学中心:华南理工深圳宝安教学中心 联系电话: 评审日期_成绩_评审教师(签名)_华南理工大学网络教育学院摘 要本文通过C语言程序在LINUX环境下来模拟作业调度中的短作业优先,先来先服务,时间片轮换调度算法,通过程序控制来查看以上三种算法调度的详细过程。关键词:作业调度,先来先服务,短作业优先,时间片轮换调度,LINUX目录引言 .41课题的目的及意义.5 1.1 课题的目的 .5 1.2 课题的意义.52 先来先服务和短作业优先的

2、基本思路.6 2.1 基本思路.6 2.2 数据结构.6 2.3 程序流程.6 2.3 算法伪代码.7 3 算法的程序实现.83.1 先来先服务.93.2 短作业优先.103.3 时间片轮换调度.134 先来先服务和短作业优先算法的利弊分析 .14结束语.15参考文献.16附录.26 引言作业调度的主要功能是根据作业控制块中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。然后再将新创建的进程插入就绪队列,准备执行。常用的作业调度算法有先来先服务(FCFS)、短作业优先(SJF)、时间片轮转法(Round

3、Robin)、多级反馈队列算法(Round Robin with Multiple Feedback)、优先级算法(Priority Scheduling)、最高响应比优先法(Highest Response_ratio Next)。作业调度算法的实现对操作系统合理的分配资源以及进程的创建很重要,好的作业调度算法能够很好的将系统的各类资源充分合理的利用,从而提高了系统资源的使用率、是系统能够更高效的运行。1 课题的目的及意义1.1课题的目的通过C语言程序模拟理想状态下作业调度算法中的先来先服务和短作业优先算法来加深对操作系统中作业调度算法的理解。1.2课题的意义1、理论意义学习和理解操作系统中

4、作业调度算-先来先服务和短作业优先算法的工作原理以及实现过程,加深我们对日常使用的操作系统的深层次理解。2、现实意义通过使用程序设计语-C语言来模拟理想状态下作业调度算法中先来先服务和短作业优先的实现过程来加深对操作系统的理解,同时也使提升我们的编程能力。2. 先来先服务和短作业优先的基本思路2.1基本思路先来先服务调度算法:将用户作业和就绪进程按提交顺序或变成就绪状态的先后排成队列,优先考虑在系统中等待时间最长的作业,而不管其要求运行时间的长短。一旦一个进程获得了中央处理机,就一直运行到结束,在理想状态下考虑在第一个作业进入时系统当前没有其他作业正在执行。短作业优先调度算法:对预计执行时间最

5、短的作业优先分派处理机,在理想情况下考虑所有作业在同一时刻进入系统。2.2数据结构1、在理想情况下将每个作业用一个结构体来存储其对应的信息,并将各个结构体用结构体数组的形式组织到一起。2、在每个结构体中将作业的作业名、进入时间、运行时间、周转时间、带权周转时间全部存入,并事先将这些信息存入一个txt文本文档中。2.3程序流程先来先服务作业1作业2作业3新作业作业队列进入NY等待队列短作业优先2.4 算法的伪代码先来先服务算法for(i=0;inum;i+)/循环作业队列中的作业,顺序执行 if i=0(如果当前作业是第一个进入系统的作业) 作业开始执行if proci.StartTimepro

6、ci-1.EndTime(如果当前作业进入时系统有作业处于运行状态) 作业等待,直到正在运行的作业运行完毕为止 短作业优先算法for(i=0;inum;i+) 按作业运行需要的时间长短进行排序for(i=0;inum;i+) 对排序好的作业进行书序执行proci.RunTime=proci.NeedTime+WaitTime(当前作业的周转时间等于运行时间加上等待时间)3算法的程序实现以下为算法的核心代码,完整的程序间附件。3.1先来先服务void FIFS(int num) /先来先服务算法计算 int i,j; for(i=0;iproci-1.EndTime)/如果当前有作业在执行 pr

7、oci.RunTime=proci.NeedTime; proci.EndTime=proci.StartTime+proci.RunTime; else proci.RunTime=proci.NeedTime+proci-1.EndTime-proci.StartTime; proci.EndTime=proci.StartTime+proci.RunTime; proci.DQZZ_Time=proci.RunTime*1.0/proci.NeedTime;/带权周转时间 sum_Time+=proci.RunTime; sum_DQ+=proci.DQZZ_Time; if(i=0)

8、printf(%s Runing.Others Waiting.nn,proci.Name); else printf(%s Runing. ,proci.Name); for(j=0;ji;j+) printf(%s ,procj.Name); printf(is Finished.nn); 运行结果:3.2短作业优先void SFS(int num) /短作业优先 int i,j; char temp4; for(i=0;inum;i+)/按作业的运行时间进行排序 for(j=0;jprocj+1.NeedTime) procj.NeedTime+=procj+1.NeedTime; pr

9、ocj+1.NeedTime=procj.NeedTime-procj+1.NeedTime; procj.NeedTime-=procj+1.NeedTime; strcpy(temp,proci.Name); strcpy(proci.Name,proci+1.Name); strcpy(proci+1.Name,temp); for(i=0;inum;i+)/按短作业优先算法进行调度 if(i=0) proci.RunTime=proci.NeedTime; else proci.RunTime=proci.NeedTime+proci-1.EndTime; proci.EndTime=

10、proci.StartTime+proci.RunTime; proci.DQZZTime=proci.RunTime*1.0/proci.NeedTime; sum_Time+=proci.RunTime; sum_DQ+=proci.DQZZTime; if(i=0) printf(%s Runing. Others Waiting.nn,proci.Name); else printf(%s Runing. ,proci.Name); for(j=0;ji;j+) printf(%s ,procj.Name); printf(is Finished.nn); 3.3时间片轮换调度算法/*

11、轮转法创建进程PCB*/void create2(char alg) PCB *p; int i,time; char na10; ready=NULL; finish=NULL; run=NULL; printf(Enter name and time of round processn); for(i=1;iname,na); p-cputime=0; p-needtime=time; p-count=0; /*计数器*/ p-state=w; p-round=2; /*时间片*/ if(ready!=NULL) insert2(p); else p-next=ready; ready=p

12、; tail=p; printf( output of roundn); printf(*n); prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready-next; run-state=R;/*时间片轮转法*/roundrun(char alg) while(run!=NULL) run-cputime=run-cputime+1; run-needtime=run-needtime-1; run-count=run-count+1; if(run-needtime=0)/*运行完将其变为完成态,插入完成队列*/ r

13、un-next=finish; finish=run; run-state=F; run=NULL; if(ready!=NULL) firstin(); /*就绪对列不空,将第一个进程投入运行*/ else if(run-count=run-round) /*如果时间片到*/ run-count=0; /*计数器置0*/ if(ready!=NULL) /*如就绪队列不空*/ run-state=W; /*将进程插入到就绪队列中等待轮转*/ insert2(run); firstin(); /*将就绪对列的第一个进程投入运行*/ prt(alg); /*输出进程信息*/ 运行结果:4先来先服

14、务和短作业优先算法的利弊分析先来先服务算法的特点(1) 优点 能够体现公平性。(2) 缺点 一旦一个较长的作业进入系统后就会长时间的占用系统的资源,这样如果有优先级较高的短作业需要执行的话需要等待很长的时间。短作业优先算法的特点(1) 优点 比FCFS改善平均周转时间和平均带权周转时间,缩短作业的等待时间,提高系统的吞吐量。 (2) 缺点 对长作业非常不利,可能长时间得不到执行,未能依据作业的紧迫程度来划分执行的优先级,难以准确估计作业(进程)的执行时间,从而影响调度性能。结束语操作系统的作业调度是操作系统中很核心的一个问题,采用良好的算法来实现作业的调度能够提高系统各种资源的利用率。针对不同

15、的情况采用不同的调度算法,针对各个调度算法的利弊来合理的应用,达到最好的效果。参考文献【1】 左万利,周长林,彭涛 操作系统原理 .北京:高等教育出版社 2010年7月【2】(美)Jean Andrews ,操作系统使用教程 高等教育出版社 2003附 录先来先服务算法代码#include#include#define MAX 100struct Proc char Name4; /进程名 int StartTime; /进程进入时间 int NeedTime; /进程执行时间 int RunTime; /进程周转时间 int EndTime; /进程结束时间 double DQZZ_Time

16、; /带权周转时间;Proc procMAX;int sum_Time=0;double sum_DQ=0;/读取数据文件 int ReadFile() int i=0; FILE *fp; fp=fopen(1.txt,r); if(fp=NULL) printf(打开文件失败!n); exit(0); else while(!feof(fp) fscanf(fp,%s,&proci.Name); fscanf(fp,%d,&proci.StartTime); fscanf(fp,%d,&proci+.NeedTime); fclose(fp); i-; return i;/显示原始数据 v

17、oid Show(int num) int i; printf(进程名 进入时间 运行时间n); for(i=0;inum;i+) printf(%6s%8d%10dn,proci.Name,proci.StartTime,proci.NeedTime); printf(n);/先来先服务算法计算 void FIFS(int num) int i,j; for(i=0;iproci-1.EndTime) proci.RunTime=proci.NeedTime; proci.EndTime=proci.StartTime+proci.RunTime; else proci.RunTime=pr

18、oci.NeedTime+proci-1.EndTime-proci.StartTime; proci.EndTime=proci.StartTime+proci.RunTime; proci.DQZZ_Time=proci.RunTime*1.0/proci.NeedTime; sum_Time+=proci.RunTime; sum_DQ+=proci.DQZZ_Time; if(i=0) printf(%s Runing. Others Waiting.nn,proci.Name); else printf(%s Runing. ,proci.Name); for(j=0;ji;j+)

19、printf(%s ,procj.Name); printf(is Finished.nn); /显示计算结果 void Result(int num) int i; printf(进程名 进入时间 结束时间 执行时间 周转时间 带权周转时间n); for(i=0;inum;i+) printf(%6s%8d%10d%10d%10d%12.2lfn,proci.Name,proci.StartTime, proci.EndTime,proci.NeedTime,proci.RunTime,proci.DQZZ_Time); printf(平均周转时间为:%.2lfn,sum_Time*1.0/

20、num); printf(平均带权周转时间为:%.2lfn,sum_DQ*1.0/num); printf(n);int main() int num; num=ReadFile(); /记录进程个数 Show(num); FIFS(num); printf(先来先服务算法得到的结果如下:nn); Result(num); system(pause); return 0;短作业优先调度算法代码#include#include#include#define MAX 100struct Proc char Name4; /进程名 int StartTime; /进程进入时间 int NeedTim

21、e; /进程执行时间 int RunTime; /进程周转时间 int EndTime; /进程结束时间 double DQZZTime; /带全周转时间;Proc procMAX;int sum_Time=0;double sum_DQ=0;/读取数据文件 int ReadFile() int i=0; FILE *fp; fp=fopen(1.txt,r); if(fp=NULL) printf(打开文件失败!n); exit(0); else while(!feof(fp) fscanf(fp,%s,&proci.Name); fscanf(fp,%d,&proci.StartTime)

22、; fscanf(fp,%d,&proci+.NeedTime); fclose(fp); i-; return i;/显示原始数据 void Show(int num) int i; printf(进程名 进入时间 运行时间n); for(i=0;inum;i+) printf(%6s%8d%10dn,proci.Name,proci.StartTime,proci.NeedTime); printf(n);/短作业优先 void SFS(int num) int i,j; char temp4; /冒泡排序 for(i=0;inum;i+) for(j=0;jprocj+1.NeedTim

23、e) procj.NeedTime+=procj+1.NeedTime; procj+1.NeedTime=procj.NeedTime-procj+1.NeedTime; procj.NeedTime-=procj+1.NeedTime; strcpy(temp,proci.Name); strcpy(proci.Name,proci+1.Name); strcpy(proci+1.Name,temp); /计算 for(i=0;inum;i+) if(i=0) proci.RunTime=proci.NeedTime; else proci.RunTime=proci.NeedTime+proci-1.EndTime; proci.EndTime=proci.StartTime+proci.RunTime; proci.DQZZTime=proci.RunTime*1.0/proci.NeedTime; sum_Time+=proci.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1