预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共43页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

《操作系统》实验报告 题目:作业调度算法 班级:网络工程 姓名:朱锦涛 学号:E31314037 一、实验目的 用代码实现页面调度算法,即先来先服务(FCFS)调度算法 、短作业优先算法、高响应比优先调度算法。通过代码的具体实现,加深对算法的核心的理解。 二、实验原理 1.先来先服务(FCFS)调度算法 FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行的时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配资源和创建进程。然后把它放入就绪队列。 2.短作业优先算法 SJF算法是以作业的长短来计算优先级,作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。SJF算法可以分别用于作业和进程调度。在把短作业优先调度算法用于作业调度时,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,优先将它们调入内存。 3、高响应比优先调度算法 高响应比优先调度算法则是既考虑了作业的等待时间,又考虑了作业的运行时间的算法,因此既照顾了短作业,又不致使长作业等待的时间过长,从而改善了处理机调度的性能。 如果我们引入一个动态优先级,即优先级是可以改变的令它随等待的时间的延长而增加,这将使长作业的优先级在等待期间不断地增加,等到足够的时间后,必然有机会获得处理机。该优先级的变化规律可以描述为: 优先权=(等待时间+要求服务时间)/要求服务时间 三、实验内容 源程序: #include<stdio.h> #include<stdlib.h> #include<time.h> structwork { intid; intarrive_time; intwork_time; intwait; floatpriority; }; typedefstructsjf_work { structworks_work;//数据域 structsjf_work*pNext;//指针域 }NODE,*PNODE; voidFCFS(); voidSJF(); voidshowmenu(); boolIs_empty(PNODEpHead); intcnt_work(PNODEpHead); PNODEdo_work(PNODEpHead,int*w_finish_time,inti); voidshow(int*w_finish_time,inti,PNODEq,int*w_rel_time); voidHRRN(); PNODEpriorit(PNODEpHead); voiddo_work_1(PNODEpHead,int*w_finish_time,inti); intmain() { intchoice;//设置选择数 showmenu();//显示菜单 scanf("%d",&choice); while(choice!=0)//选择算法 { switch(choice) { case1: printf("您选择的是先来先服务算法:\n"); FCFS(); break; case2: printf("您选择的是短作业优先算法:\n"); SJF(); break; case3: printf("您选择的是高响应比优先调度算法\n"); HRRN(); break; default: printf("请重新选择!"); break; } printf("\n"); printf("下面是菜单,请继续,或者按‘0’退出"); showmenu(); scanf("%d",&choice); } printf("感谢您使用本系统,再见!"); return0; } voidFCFS() { intj,k; intw_rel_time[5]; intw_finish_time[5]; floatrel_time=0; structworktemp; inti; structworkw[5]; srand(time(0)); for(i=0;i<5;i++) { w[i].id=rand()%10; w[i].arrive_time=rand()%10; w[i].work_time=rand()%10+1; } for(j=0;j<5;j++) { printf("第%d个作业的编号是:%d\t",j+1,w[j].id);