作业调度算法 先来先服务算法,短作业算法

发布 2022-07-03 00:03:28 阅读 5892

《操作系统》实验报告。

题目:作业调度算法。

班级:网络工程。

姓名:朱锦涛。

学号: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 理解...