实验三作业调度

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验示例

RR
实验示例

FCFS
作业要求
1. 2. 3.
4.

实现短作业优先调度算法(SJF非抢占); 实现高响应比调度算法(HRRF非抢占); 对每种算法要求打印平均周转时间、平均带权周 转时间、平均等待时间; 每次作业切换时打印作业相关信息(提示开始运 行,结束运行\暂停运行;一个作业完成打印其 等待时间、周转时间、带权周转时间)。 学号末2位模5所得结果+1为该生所需测试数据 文件尾编号如:所得结果为3则测试数据为 job3.txt ;

实验示例

常用的打开文件方法:
if((fp = fopen(fname, "r")) == NULL) { printf("error, open file failed, please check filename:\n"); } else {…} fclose(fp);
实验示例
void FCFS() { int time = 0; //当前时间 printf("\nFCFS算法作业流\n"); while (cur_count > 0) { int loc = 0; if (time < jobs[loc].reach_time) time = jobs[loc].reach_time; jobs[loc].start_time = time; jobs[loc].wait_time = time jobs[loc].reach_time; printf("time:%-4d job:%-4d 开始 运行 等待时间:%-4d\n", time, jobs[loc].number, jobs[loc].wait_time); time += jobs[loc].need_time; jobs[loc].tr_time = time jobs[loc].reach_time; jobs[loc].wtr_time = (double)jobs[loc].tr_time / jobs[loc].need_time; printf("time:%-4d job:%-4d 结束运行 周 转时间;%-4d 服务时间:%-4d 带权周转时 间:%-5.2f\n", time, jobs[loc].number, jobs[loc].tr_time, jobs[loc].need_time, jobs[loc].wtr_time); total_wtime += jobs[loc].wait_time; total_trtime += jobs[loc].tr_time; total_wtrtime += jobs[loc].wtr_time; remove_job(loc); } printf("\n平均等待时间:%.2f\n", total_wtime / count); printf("平均周转时间:%.2f\n", total_trtime / count); printf("平均带权周转时间:%.2f\n", total_wtrtime / count); }


作业调度
作业调度又称高级调度,不涉及处理机的分配, 主要任务是按一定的原则从外存上处于后备状态 的作业中挑选一个(或多个)作业调入主存,为 其分配内存、I/O设备等必要的资源,并建立相 应的进程,安排在就绪队列上,以使进程获得竞 争处理机的权利。
实验内容
调度队列模型
实验内容
1. 2. 3. 4.
编写并调试作业调度模拟程序; 实现三种作业调度算法,短作业优先(SJF), 高响应比优先(HRRF),时间片轮转法(RR); 对每种算法要求打印平均周转时间、平均带权周 转时间、平均等待时间; 每次作业切换时打印作业相关信息(提示开始运 行,结束运行\暂停运行;一个作业完成打印其 等待时间、周转时间、带权周转时间)。
实验示例


使用的测试数据
使用读文件的形式读入测试数据
作业ID
1 2 3 4 5
到达时间
700 800 810 815 830
执行时间
10 50 5 30 25
6
7
835
845
35
15
实验示例

读文件
void read_jobdata();//读取数据文件;
用到的函数有: fopen(文件名,使用文件方式);//打开文件 fscanf(文件指针,格式字符串,输入列表);//格式化 读入; fclose(文件指针);//关闭文件
实验示例

判断队列是否为空/已满
int is_empty_queue(queue *q) { return q->size == 0; } int is_full_queue(queue *q) { return q->size == MAX_QUEUE_SIZE; }
实验示例

其他基本队列操作
Baidu Nhomakorabea
提纲
实验示例 作业信息结构
typedef struct node { int number; int reach_time; int need_time; double excellent; int start_time; int wait_time; int tr_time; double wtr_time; int run_time; } job; //作业号 //作业抵达时间 //作业的执行时间 //响应比 //作业开始时间 //等待时间 //周转时间 //带权周转时间 //作业累计已执行时间
提纲
实验算法


算法一:先来先服务(FCFS)
基本思想

遵循先进入后备队列的作业,先进行调度的原则。 非抢占式算法 简单,易于编码实现 优先考虑作业的等待时间,没有考虑作业的执行时间 长短、作业的运行特性和作业对资源的要求

特点

实验算法


算法二:短作业优先(SJF)
基本思想


根据作业控制块中作业申请时指出的执行时间,选取 执行时间最短的作业优先调度;可有抢占或非抢占方 式。 短作业优先调度算法考虑了作业的运行时间而忽略了 作业的等待时间。
实验算法


算法三:高响应比优先(HRRF)
初衷


FCFS调度算法只片面地考虑了作业的进入时间,短作 业优先调度算法考虑了作业的运行时间而忽略了作业 的等待时间。 响应比高者优先调度算法为这两种算法的折中,使长 作业不会长时间等待,但每次调度前都要进行响应比 计算。
响应时间 等待时间 处理时间 等待时间 响应比 1 处理时间 处理时间 处理时间
实验算法


算法四:时间片轮转(RR)
基本思想

系统将所有的就绪进程按先来先服务的原则,排成一 个队列,每次调度时,把CPU分配给队首进程,并令 其执行一个时间片。时间片结束之后,将该进程加到 就绪队列队尾;然后再把处理机分配给就绪队列中新 的首进程。 系统能在给定的时间内响应所有用户请求。

优点
//进入队列 void enqueue(queue *q, job j){} //出队 job dequeue(queue *q){} //打印队列内容 void print_queue(queue *q){}
作业要求
1. 2. 3.

根据以上提示信息实现时间片轮转调度算法 (RR) 对每种算法要求打印平均周转时间、平均带权周 转时间、平均等待时间; 每次作业切换时打印作业相关信息(提示开始运 行,结束运行\暂停运行;一个作业完成打印其 等待时间、周转时间、带权周转时间)。 学号末2位模5所得结果+1为该生所需测试数据 文件尾编号如:所得结果为3则测试数据为 job3.txt;
实验三:作业调度
作业调度算法模拟
谢世娜:394202453@qq.com
提纲
提纲
实验目的


理解操作系统中作业调度的概念和调度算法; 了解操作系统中程序,作业,进程的区别与联系; 理解在操作系统中作业是如何被调度的,如何协 调和控制各个作业对CPU的使用; 提高动手能力;
提纲
实验内容
实验示例

定义队列
typedef struct { job job_queue[MAX_QUEUE_SIZE]; int head; int tail; int size; } queue;
实验示例

初始化队列
void init_queue(queue *q) { q->head = 0; q->tail = 0; q->size = 0; }
相关文档
最新文档