2、假设有三个作业,提交时问和运行时问如下表 所示。 作业 提交时间 运行时间/min 10:00 100 10:20 60 10:50 20 (1) 计算在单道环境下,采用高响应比优先的调度算法的调度顺序。 (2) 假设11:00开始调度,计算这个时候各作业的 响应比。
时间: 2024-03-18 20:45:08 浏览: 16
1. 高响应比优先调度算法
响应比 = (等待时间 + 作业运行时间) / 作业运行时间
| 作业 | 提交时间 | 运行时间 | 等待时间 | 响应比 |
| --- | --- | --- | --- | --- |
| 1 | 10:00 | 100 | 0 | 1 |
| 2 | 10:20 | 60 | 0 | 1.333 |
| 3 | 10:50 | 20 | 0 | 2.5 |
因此,按照高响应比优先调度算法的顺序是:作业3、作业2、作业1。
2. 计算各作业的响应比
当前时间是11:00,作业1已经运行了10分钟,作业2已经运行了40分钟,作业3已经运行了10分钟。
| 作业 | 剩余运行时间 | 等待时间 | 响应比 |
| --- | --- | --- | --- |
| 1 | 90 | 60 | 1.6 |
| 2 | 20 | 0 | 1.5 |
| 3 | 10 | 50 | 5 |
因此,按照响应比的大小顺序是:作业3、作业1、作业2。
相关问题
八在单道批处理系统中,写出下表4个作业采用先 来先服务和短作业优先调度算法时的调度顺序,并分别计算所需的平均周转时间。 作业 提交时间 运行时间/min 10:00 60 2 10:40 20 10:50 30 4 11:10 10
先来先服务调度算法:
| 作业 | 提交时间 | 运行时间 | 开始时间 | 完成时间 | 周转时间 |
| --- | --- | --- | --- | --- | --- |
| 1 | 10:00 | 60 | 10:00 | 11:00 | 60 |
| 2 | 10:40 | 20 | 11:00 | 11:20 | 40 |
| 3 | 10:50 | 30 | 11:20 | 11:50 | 60 |
| 4 | 11:10 | 10 | 11:50 | 12:00 | 50 |
平均周转时间 = (60 + 40 + 60 + 50) / 4 = 52.5
短作业优先调度算法:
| 作业 | 提交时间 | 运行时间 | 开始时间 | 完成时间 | 周转时间 |
| --- | --- | --- | --- | --- | --- |
| 4 | 11:10 | 10 | 10:00 | 10:10 | 60 |
| 2 | 10:40 | 20 | 10:10 | 10:30 | 50 |
| 3 | 10:50 | 30 | 10:30 | 11:00 | 70 |
| 1 | 10:00 | 60 | 11:00 | 12:00 | 120 |
平均周转时间 = (60 + 50 + 70 + 120) / 4 = 75
因此,先来先服务调度算法的平均周转时间为52.5,短作业优先调度算法的平均周转时间为75。
设有四道作业,提交时刻和运行时间如下表: 作业号 提交时刻(时) 运行时间(小时) 1 8:00 2.0 2 8:50 0.5 3 9:00 0.1 4 9:50 0.2 编写C语言程序, 实现SJF调度算法。要求输入提交时刻及运行时间,输出调度顺序。
好的,以下是实现SJF调度算法的C语言程序,可以满足你的需求:
```
#include <stdio.h>
struct job {
int id; // 作业编号
float arrival_time; // 提交时刻
float exe_time; // 运行时间
};
int main() {
int n, i, j, min_idx;
float curr_time = 0; // 当前时间
struct job jobs[100], temp;
// 输入作业数量和每个作业的信息
printf("请输入作业数量:");
scanf("%d", &n);
printf("请输入每个作业的提交时刻和运行时间:\n");
for (i = 0; i < n; i++) {
jobs[i].id = i + 1;
scanf("%f%f", &jobs[i].arrival_time, &jobs[i].exe_time);
}
// 对作业按照提交时刻从小到大进行排序
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (jobs[i].arrival_time > jobs[j].arrival_time) {
temp = jobs[i];
jobs[i] = jobs[j];
jobs[j] = temp;
}
}
}
// 按照运行时间从小到大进行排序
for (i = 0; i < n - 1; i++) {
min_idx = i;
for (j = i + 1; j < n; j++) {
if (jobs[j].exe_time < jobs[min_idx].exe_time) {
min_idx = j;
}
}
if (min_idx != i) {
temp = jobs[i];
jobs[i] = jobs[min_idx];
jobs[min_idx] = temp;
}
}
// 输出调度顺序
printf("作业调度顺序为:\n");
for (i = 0; i < n; i++) {
printf("作业%d\n", jobs[i].id);
curr_time += jobs[i].exe_time;
}
return 0;
}
```
你可以将上面的代码复制到本地的C语言开发环境中,编译运行后就可以输入作业的提交时刻和运行时间,然后输出调度顺序了。希望这个程序能够帮到你!