《操作系统》实验报告。
题目:作业调度算法。
班级:网络工程。
姓名:朱锦涛。
学号:e31314037
一、实验目的。
用**实现页面调度算法,即先来先服务(fcfs)调度算法。
短作业优先算法、高响应比优先调度算法。通过**的具体实现,加深对算法的核心的理解。
二、实验原理。
1.先来先服务(fcfs)调度算法。
fcfs是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行的时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配资源和创建进程。然后把它放入就绪队列。
2.短作业优先算法。
sjf算法是以作业的长短来计算优先级,作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。sjf算法可以分别用于作业和进程调度。
在把短作业优先调度算法用于作业调度时,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,优先将它们调入内存。
3、高响应比优先调度算法。
高响应比优先调度算法则是既考虑了作业的等待时间,又考虑了作业的运行时间的算法,因此既照顾了短作业,又不致使长作业等待的时间过长,从而改善了处理机调度的性能。
如果我们引入一个动态优先级,即优先级是可以改变的令它随等待的时间的延长而增加,这将使长作业的优先级在等待期间不断地增加,等到足够的时间后,必然有机会获得处理机。该优先级的变化规律可以描述为:
优先权 = 等待时间 + 要求服务时间)/要求服务时间。
三、实验内容。
源程序:#include<>
#include<>
#include<>
struct 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 sjf();
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; /设置选择数。
showmenu();显示菜单。
scanf("%d",&choice);
while(choice !=0) /选择算法。
printf("");
printf("下面是菜单,请继续,或者按‘0’退出");
showmenu();
scanf("%d",&choice);
printf("感谢您使用本系统,再见!")
return 0;
void fcfs()
int j,k;
int w_rel_time[5];
int w_finish_time[5];
float rel_time = 0;
struct work temp;
int i;
struct work w[5];
srand(time(0));
for(i=0;i<5;i++)
for(j=0;j<5;j++)
for(j=1;j<5;j++)
for(k=0;k<5-j;k++)
printf("");
w_finish_time[0] =w[0].arrive_time + w[0].work_time;
for(j=0;j<5;j++)
for(j=0;j<5;j++)
w_rel_time[j] =w_finish_time[j] -w[j].arrive_time;
for(j=0;j<5;j++)
for(j=0;j<5;j++)
printf("平均周转时间:%f",rel_time/5);
void sjf()
int w_rel_time[10];
int w_finish_time[10];
float rel_time = 0;
srand(time(0));
int i;
int j = 0;
pnode phead = pnode)malloc(sizeof(node));
if (null ==phead)
pnode ptail = phead;
ptail->pnext = null; /定义该链表有头结点,且第一个节点初始化为空。
for(i=0;i<10;i++)
pnew->s_ =rand()%100;
pnew->s_ =rand()%10;
pnew->s_ =rand()%10+1;
ptail->pnext = pnew;
pnew->pnext = null;
ptail = pnew;
pnode p = phead->pnext; /p指向第一个节点。
while (null !=p)
p = phead->pnext;
pnode q = p; /p,q都指向第一个节点。
p = p->pnext;
while(p !=null)
pnode r = phead->pnext; /r也指向第一个节点。
int cnt = 0; /记录所有节点数据域中到达时间最短且相等的个数。
while(r!= null)
p = phead->pnext;
while(p !=null) /在相等到达时间的作业中找服务时间最短的作业。
else p =null;
确定q所指作业最先到达且服务时间最短。
作业调度算法 先来先服务算法,短作业算法
操作系统 实验报告。题目 作业调度算法。班级 网络工程。姓名 朱锦涛。学号 e31314037 一 实验目的。用 实现页面调度算法,即先来先服务 fcfs 调度算法。短作业优先算法 高响应比优先调度算法。通过 的具体实现,加深对算法的核心的理解。二 实验原理。1.先来先服务 fcfs 调度算法。fc...
关于作业调度算法
在 计算机操作系统 教材中,介绍了作业调度算法和进程调度算法。其中作业调度算法主要有先来先服务法fcfs 短作业优先法sjf 最高响应比优先法hrn 定时轮转法和优先数法。在进程调度算法中主要介绍了先来先服务法fcfs 轮转法rr 多级反馈轮转法和优先数法。需要指出的是 1 在作业调度和进程调度中同...
算法与数据结构课程设计进程调度算法
第二题 进程调度。一 实验目的。多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。二 实验要求 1 要求学生设计并实现模拟进程调度的算法 时间片轮转及先来先服务。2 理解...