题目介绍
一、实验目的
在多道程序或者多任务系统中,同时处于就绪态的进程有若干个。在单处理器系统中,处于运行态的进程最多只有一个,也就是说能运行的进程数远小于就绪态进程个数,所以必须进行进程调度,按照一定的调度算法,即依照某种原则或策略从就绪态队列中选中进程占用处理器。本实验要求学生设计一个优先数调度算法来模拟实现处理器调度过程。
二、实验要求
-
假定进程控制块中包含内容为:
- 进程名
- 链接指针
- 进程的优先数
- 估计运行时间
- 进程状态
其中进程名即进程标示符;链接指针是按照进程到达进程就绪队列的时间链接。
进程的优先数由用户自己指定,并且优先数值越小,优先级越高,调度时,总是选择优先级高的进程占用CPU;估计运行时间可由设计者任意指定一个时间值; -
根据需要,设计一个队首指针指向5个进程(进程名为A,B,C,D,E)组成的就绪队列中的第一个进程,再设一个当前指针指向当前正在运行的进程。
-
进程调度时,采用静态优先调度。
-
用非抢占式方式分配处理器。
-
要求所设计的程序必须有输出语句,用于输出进程调度和运行一次后进程的变化。比如:每次被选中的进程名,就绪队列中进程的排队情况,进程控制块的动态变化。
算法简介
优先数
优先数是什么,其实就是一个一个进程的优先级。
和页面的优先级一样,谁的优先级大谁在上面。在这里我们以数字比较小来判断优先级的高低,所以我们根据优先级将就绪队列中的进程进行排序输出就好。
算法
本题并未用到什么复杂算法,只是普通的结构体排序(如果用了结构体的话呢)。
cpp代码
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
const int MAXN = 1e5 + 7;
struct process{
string name; //进程名
int num; //进程优先数
int time; //运行时间
bool operator < (const process& v) const {
return num < v.num;
}
} pro[MAXN];
int main() {
IOS;
printf("请输入进程的数量:");
int n; //进程数量
cin >> n;
cout << endl;
//输入进程数量
cout << "请输入每个进程的名(进程名/进程优先数/运行时间):" << endl;
for (int i = 1; i <= n; i++) {
cin >> pro[i].name >> pro[i].num >> pro[i].time;
}
cout << endl;
//输入进程
sort(pro + 1, pro + 1 + n);
//进程按优先数排序
for(int i = 1; i <= n; i++) {
cout << "第" << i << "个输出的为:" << pro[i].name << endl;
cout << "队列里面的进程为:";
for (int j = i + 1; j <= n; j++) {
if (j == n) {
cout << pro[j].name;
}
else {
cout << pro[j].name << " <- ";
}
}
cout << endl << endl;
}
cout << "进程已经全部出列" << endl;
//进程按优先数输出
return 0;
}
/*
4
a 8 6
b 7 5
c 4 3
d 6 8
*/
结果分析
由于本题并没有什么技术含量,看看就行