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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

作业调度算法先来先服务算法短作业算法.docx

1、作业调度算法先来先服务算法短作业算法操作系统实验报告题目:作业调度算法班级:网络工程姓名:朱锦涛学号:E31314037一、实验目的 用代码实现页面调度算法,即先来先服务(FCFS)调度算法、短作业优先算法、高响应比优先调度算法。通过代码的具体实现,加深对算法的核心的理解。二、实验原理1.先来先服务(FCFS)调度算法FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行的时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,

2、为它们分配资源和创建进程。然后把它放入就绪队列。2.短作业优先算法 SJF算法是以作业的长短来计算优先级,作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。SJF算法可以分别用于作业和进程调度。在把短作业优先调度算法用于作业调度时,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,优先将它们调入内存。3、高响应比优先调度算法 高响应比优先调度算法则是既考虑了作业的等待时间,又考虑了作业的运行时间的算法,因此既照顾了短作业,又不致使长作业等待的时间过长,从而改善了处理机调度的性能。 如果我们引入一个动态优先级,即优先级是可以改变的令它随等待的时间的延长而增加,这将使长

3、作业的优先级在等待期间不断地增加,等到足够的时间后,必然有机会获得处理机。该优先级的变化规律可以描述为:优先权 = (等待时间 + 要求服务时间)/要求服务时间三、实验内容源程序:#include#include#includestruct work int id; int arrive_time; int work_time; int wait; float priority;typedef struct sjf_work struct work s_work; /数据域 struct sjf_work * pNext; /指针域NODE,*PNODE;void FCFS();void SJ

4、F();void showmenu();bool Is_empty(PNODE pHead);int cnt_work(PNODE pHead);PNODE do_work(PNODE pHead,int *w_finish_time,int i);void show(int *w_finish_time,int i,PNODE q,int *w_rel_time);void HRRN();PNODE priorit(PNODE pHead);void do_work_1(PNODE pHead,int *w_finish_time,int i);int main() int choice;

5、/设置选择数 showmenu(); /显示菜单 scanf(%d,&choice); while(choice != 0) /选择算法 switch(choice) case 1 : printf(您选择的是先来先服务算法:n); FCFS(); break; case 2 : printf(您选择的是短作业优先算法:n); SJF(); break; case 3 : printf(您选择的是高响应比优先调度算法n); HRRN(); break; default: printf(请重新选择!); break; printf(n); printf(下面是菜单,请继续,或者按0退出); sh

6、owmenu(); scanf(%d,&choice); printf(感谢您使用本系统,再见!); return 0;void FCFS() int j,k; int w_rel_time5; int w_finish_time5; float rel_time = 0; struct work temp; int i; struct work w5; srand(time(0); for(i=0;i5;i+) wi.id = rand()%10; wi.arrive_time = rand()%10; wi.work_time = rand()%10+1; for(j=0;j5;j+) p

7、rintf(第%d个作业的编号是:%dt,j+1,wj.id); printf(第%d个作业到达时间:%dt,j+1,wj.arrive_time); printf(第%d个作业服务时间:%dt,j+1,wj.work_time); printf(n); for(j=1;j5;j+) for(k=0;k wk+1.arrive_time) temp = wk; wk = wk+1; wk+1 = temp; printf(n); w_finish_time0 = w0.arrive_time + w0.work_time; for(j=0;j5;j+) if(w_finish_timej wj

8、+1.arrive_time) w_finish_timej+1 = wj+1.arrive_time + wj+1.work_time; else w_finish_timej+1 = w_finish_timej + wj+1.work_time; for(j=0;j5;j+) w_rel_timej = w_finish_timej - wj.arrive_time; for(j=0;j5;j+) rel_time += w_rel_timej; for(j=0;jpNext = NULL; /定义该链表有头结点,且第一个节点初始化为空 for(i=0;is_work.id = rand

9、()%100; pNew-s_work.arrive_time = rand()%10; pNew-s_work.work_time = rand()%10+1; pTail-pNext = pNew; pNew-pNext = NULL; pTail = pNew; PNODE p = pHead-pNext; /p指向第一个节点 while (NULL != p) printf(第%d个作业的编号是:%dt,j+1,p-s_work.id); printf(第%d个作业到达时间:%dt,j+1,p-s_work.arrive_time); printf(第%d个作业服务时间:%dt,j+1

10、,p-s_work.work_time); printf(n); p = p-pNext; printf(n); j+; p = pHead-pNext; PNODE q = p; /p,q都指向第一个节点 p = p-pNext; while(p != NULL) if(p-s_work.arrive_time s_work.arrive_time) q = p; p = p-pNext; PNODE r = pHead-pNext; /r也指向第一个节点 int cnt = 0; /记录所有节点数据域中到达时间最短且相等的个数 while(r!= NULL) if( r-s_work.ar

11、rive_time = q-s_work.arrive_time ) cnt+; r = r-pNext; p = pHead-pNext; while(p != NULL) /在相等到达时间的作业中找服务时间最短的作业 if(cnt 1) if( p-s_work.arrive_time = q-s_work.arrive_time ) if( p-s_work.work_time s_work.work_time ) q = p; p = p-pNext; else p =NULL; /确定q所指作业最先到达且服务时间最短 w_finish_time0 = q-s_work.arrive_

12、time + q-s_work.work_time; w_rel_time0 = w_finish_time0 - q-s_work.arrive_time; printf(第1个系统执行的作业到达时间:%d ,q-s_work.arrive_time); printf(编号是:%d ,q-s_work.id); printf(服务时间是:%d n,q-s_work.work_time); printf(完成时间是:%d ,w_finish_time0); printf(周转时间是:%d n,w_rel_time0); p = pHead; /寻找q的前一个节点,方便删掉q节点 while(

13、p-pNext != q ) p = p-pNext; p-pNext = q-pNext; free(q); q = NULL; for(i=0;ipNext != q ) p = p-pNext; p-pNext = q-pNext; free(q); q = NULL; for(j=0;jpNext; int len = 0; while(p != NULL) len+; p = p-pNext; if(len = 0) return true; /当没有作业时,返回为真 else return false;int cnt_work(PNODE pHead) /计算当前还剩多少作业 PN

14、ODE p; p = pHead-pNext; int len = 0; while(p != NULL) len+; p = p-pNext; return len;PNODE do_work(PNODE pHead,int *w_finish_time,int i) PNODE p,q; int cnt = 0; /计数器清0,计算当前作业完成时,系统中有多少个作业已经到达 p = pHead-pNext; q = p; while(p != NULL) if( p-s_work.arrive_time pNext; else p = p-pNext; /q指向当前到达时间小于刚刚完成的作

15、业,但不一定是服务时间最短的(如果有的话) printf(系统中有%d个作业在当前作业完成时已经到达!n,cnt); p = pHead-pNext; while(p != NULL) if(cnt1) /执行此次判断后,q现在指向所有条件都满足的作业(如果有的话) if( p-s_work.arrive_time s_work.work_time s_work.work_time ) q = p; p = p-pNext; else p = p-pNext; else p = p-pNext; else /当前作业完成时,没有作业到达的情况 p = p-pNext; /用q来接收最先到达的,

16、用p来遍历 while( p != NULL ) if( p-s_work.arrive_times_work.arrive_time ) q = p; p = p-pNext; w_finish_timei+1 = q-s_work.arrive_time + q-s_work.work_time; w_finish_timei+1 = w_finish_timei + q-s_work.work_time; return q;void show(int *w_finish_time,int i,PNODE q,int *w_rel_time) w_finish_timei+1 = w_fi

17、nish_timei + q-s_work.work_time; w_rel_timei+1 = w_finish_timei+1 - q-s_work.arrive_time; printf(第%d个系统执行的作业到达时间:%d ,i+2,q-s_work.arrive_time); printf(编号是:%d ,q-s_work.id); printf(服务时间是:%dn,q-s_work.work_time); printf(完成时间是:%d ,w_finish_timei+1); printf(周转时间是:%d n,w_rel_timei+1);void showmenu() prin

18、tf(*n); printf(请选择你要执行的命令: n); printf(1:先来先服务算法n); printf(2:短作业优先算法n); printf(3: 高响应比优先算法n); printf(0: 退出菜单n); printf(*n);void HRRN() int w_rel_time10; int w_finish_time10; float rel_time = 0; float priority; /计算优先权 srand(time(0); int i; int j = 0; PNODE pHead = (PNODE)malloc(sizeof(NODE); if (NULL

19、= pHead) printf(分配失败, 程序终止!n); exit(-1); PNODE pTail = pHead; pTail-pNext = NULL; /定义该链表有头结点,且第一个节点初始化为空 for(i=0;is_work.id = rand()%100; pNew-s_work.arrive_time = rand()%10; pNew-s_work.work_time = rand()%10+1; pTail-pNext = pNew; pNew-pNext = NULL; pTail = pNew; PNODE p = pHead-pNext; /p指向第一个节点 wh

20、ile (NULL != p) printf(第%d个作业的编号是:%dt,j+1,p-s_work.id); printf(第%d个作业到达时间:%dt,j+1,p-s_work.arrive_time); printf(第%d个作业服务时间:%dt,j+1,p-s_work.work_time); printf(n); p = p-pNext; printf(n); j+; p = pHead-pNext; PNODE q = p; /p,q都指向第一个节点 p = p-pNext; while(p != NULL) if(p-s_work.arrive_time s_work.arriv

21、e_time) q = p; p = p-pNext; PNODE r = pHead-pNext; /r也指向第一个节点 int cnt = 0; /记录所有节点数据域中到达时间最短且相等的个数 while(r!= NULL) if( r-s_work.arrive_time = q-s_work.arrive_time ) cnt+; r = r-pNext; p = pHead-pNext; while(p != NULL) /在相等到达时间的作业中找服务时间最短的作业 if(cnt 1) if( p-s_work.arrive_time = q-s_work.arrive_time )

22、 if( p-s_work.work_time s_work.work_time ) q = p; p = p-pNext; else p =NULL; /确定q所指作业最先到达且服务时间最短 w_finish_time0 = q-s_work.arrive_time + q-s_work.work_time; w_rel_time0 = w_finish_time0 - q-s_work.arrive_time; printf(第1个系统执行的作业到达时间:%d ,q-s_work.arrive_time); printf(编号是:%d ,q-s_work.id); printf(服务时间是

23、:%d n,q-s_work.work_time); printf(完成时间是:%d ,w_finish_time0); printf(周转时间是:%d n,w_rel_time0); p = pHead; /寻找q的前一个节点,方便删掉q节点 while( p-pNext != q ) p = p-pNext; p-pNext = q-pNext; free(q); q = NULL; /已经找到并执行第一个进程,执行完之后又将其删除了 for(i=0;i9&!Is_empty(pHead);i+) printf(现在系统还剩%d个作业!n,cnt_work(pHead); do_work_1(pHead,w_finish_time

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

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