一、说明
作业/进程调度算法 –
短作业优先算法
- 算法思想:追求最少的平均等待时间,最少的平均周转时间、最少的平均带权周转时间。
- 算法规则: 服务时间最短的作业/进程优先得到服务。
- 抢占式版本:最短剩余时间优先算法(SRTN)
- 缺点:对短作业有利,对长作业不利。如果源源不断地有短作业/进程到来,可能使长作业/进程长时间得不到服务,产生“饥饿”现象。
二、代码
#include <string>
#include <algorithm>
#include <iostream>
#include <iomanip>
using namespace std;
// 就绪队列最大长度
const int MAX = 100;
// 就绪态
#define W "waitting"
// 运行态
#define R "running"
// 完成态
#define F "finished"
struct WORK
{
// 进程名称
string work_name;
// 到达时间
int arrive_time;
// 剩余服务时间
int serve_time;
// 服务时间
int r_serve_time;
// 进程状态
string work_state;
// 结束时间
int end_time;
// 周转时间
int turnover_time;
};
// 就绪队列
WORK work[MAX];
// 进程数量
int n;
void init() {
cout << "请输入需要调度的进程数: ";
cin >> n;
for (int i = 1; i <= n; ++i) {
cout << "请输入进程" << i << "的名称、到达时间、服务时间: ";
cin >> work[i].work_name >> work[i].arrive_time >> work[i].r_serve_time;
// 进程状态
work[i].work_state = W;
// 结束时间
work[i].end_time = -1;
// 剩余服务时间
work[i].serve_time = work