在作业调度中,若采用优先级调度算法,为了尽可能使 CPU 和外部设备并行工作,有如下三个作业:J1 以计算为主,J2 以输入输出为主,J3 计算和输入输出兼顾,则它们的优先级从高到低的排列顺序是()。 A J1,J2,J3 B J2,J3,J1 C J3,J2,J1 D J2,J1,J3
时间: 2023-07-27 18:10:12 浏览: 59
由题可知,优先级调度算法是根据作业的类型和重要程度来判断其优先级的,因此我们需要根据作业的特点来确定它们的优先级。
J1 以计算为主,J2 以输入输出为主,J3 计算和输入输出兼顾。因此,我们可以认为 J1 的计算任务比较重要,优先级最高;J2 的输入输出任务比较重要,其次于 J1;J3 的计算和输入输出任务都比较重要,但相对于 J1 和 J2 来说,优先级较低。
综上所述,它们的优先级从高到低的排列顺序应该是 A J1,J2,J3。
相关问题
C++模拟实现短作业优先、先来先服务和优先级调度算法三种调度算法
好的,下面我来分别介绍一下这三种调度算法的 C++ 模拟实现。
1. 短作业优先调度算法(SJF)
短作业优先调度算法指的是在一批作业中,优先选择执行时间最短的作业。下面是 C++ 模拟实现的代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Job {
int id; // 作业编号
int arrive_time; // 到达时间
int execute_time; // 执行时间
};
bool cmp(Job a, Job b) { // 按照到达时间排序
return a.arrive_time < b.arrive_time;
}
void SJF(vector<Job> jobs) {
sort(jobs.begin(), jobs.end(), cmp); // 按照到达时间排序
int n = jobs.size();
int current_time = 0; // 当前时间
vector<int> sequence; // 作业执行顺序
while (!jobs.empty()) {
int min_time = INT_MAX; // 执行时间最短的作业的执行时间
int min_index = -1; // 执行时间最短的作业的索引
for (int i = 0; i < jobs.size(); i++) {
if (jobs[i].arrive_time <= current_time && jobs[i].execute_time < min_time) {
min_time = jobs[i].execute_time;
min_index = i;
}
}
if (min_index == -1) { // 若当前没有作业可以执行,则当前时间加一
current_time++;
continue;
}
sequence.push_back(jobs[min_index].id);
current_time += jobs[min_index].execute_time;
jobs.erase(jobs.begin() + min_index);
}
// 输出作业执行顺序
cout << "SJF 调度算法的作业执行顺序为:";
for (int i = 0; i < sequence.size(); i++) {
cout << sequence[i] << " ";
}
cout << endl;
}
int main() {
vector<Job> jobs = {{1, 0, 3}, {2, 2, 6}, {3, 4, 4}, {4, 6, 2}, {5, 8, 5}};
SJF(jobs);
return 0;
}
```
2. 先来先服务调度算法(FCFS)
先来先服务调度算法指的是按照作业到达的先后顺序依次执行作业。下面是 C++ 模拟实现的代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Job {
int id; // 作业编号
int arrive_time; // 到达时间
int execute_time; // 执行时间
};
bool cmp(Job a, Job b) { // 按照到达时间排序
return a.arrive_time < b.arrive_time;
}
void FCFS(vector<Job> jobs) {
sort(jobs.begin(), jobs.end(), cmp); // 按照到达时间排序
int n = jobs.size();
int current_time = jobs[0].arrive_time; // 当前时间
vector<int> sequence; // 作业执行顺序
for (int i = 0; i < n; i++) {
sequence.push_back(jobs[i].id);
current_time += jobs[i].execute_time;
}
// 输出作业执行顺序
cout << "FCFS 调度算法的作业执行顺序为:";
for (int i = 0; i < sequence.size(); i++) {
cout << sequence[i] << " ";
}
cout << endl;
}
int main() {
vector<Job> jobs = {{1, 0, 3}, {2, 2, 6}, {3, 4, 4}, {4, 6, 2}, {5, 8, 5}};
FCFS(jobs);
return 0;
}
```
3. 优先级调度算法(Priority)
优先级调度算法指的是按照作业的优先级依次执行作业。下面是 C++ 模拟实现的代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Job {
int id; // 作业编号
int arrive_time; // 到达时间
int execute_time; // 执行时间
int priority; // 优先级
};
bool cmp(Job a, Job b) { // 按照到达时间排序
return a.arrive_time < b.arrive_time;
}
void Priority(vector<Job> jobs) {
sort(jobs.begin(), jobs.end(), cmp); // 按照到达时间排序
int n = jobs.size();
int current_time = jobs[0].arrive_time; // 当前时间
vector<int> sequence; // 作业执行顺序
while (!jobs.empty()) {
int max_priority = INT_MIN; // 优先级最高的作业的优先级
int max_index = -1; // 优先级最高的作业的索引
for (int i = 0; i < jobs.size(); i++) {
if (jobs[i].arrive_time <= current_time && jobs[i].priority > max_priority) {
max_priority = jobs[i].priority;
max_index = i;
}
}
if (max_index == -1) { // 若当前没有作业可以执行,则当前时间加一
current_time++;
continue;
}
sequence.push_back(jobs[max_index].id);
current_time += jobs[max_index].execute_time;
jobs.erase(jobs.begin() + max_index);
}
// 输出作业执行顺序
cout << "优先级调度算法的作业执行顺序为:";
for (int i = 0; i < sequence.size(); i++) {
cout << sequence[i] << " ";
}
cout << endl;
}
int main() {
vector<Job> jobs = {{1, 0, 3, 2}, {2, 2, 6, 1}, {3, 4, 4, 3}, {4, 6, 2, 4}, {5, 8, 5, 5}};
Priority(jobs);
return 0;
}
```
以上就是三种调度算法的 C++ 模拟实现,希望能对你有所帮助。
c语言优先级调度和短作业算法
C语言优先级调度是指操作系统根据进程的优先级来安排进程的执行顺序,优先级高的进程先执行,优先级低的进程后执行。在C语言中,可以使用优先级调度算法来实现进程的调度。
而短作业算法是指操作系统根据进程的执行时间来安排进程的执行顺序,执行时间短的进程先执行,执行时间长的进程后执行。这种算法适用于短时间内需要处理大量进程的场景,可以提高系统的响应速度。
这两种算法都是操作系统中常用的进程调度算法,它们的使用取决于具体的场景和需求。