实验一 进程调度
1.目的和要求
进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念,体会了解优先数和时间片轮转调度算法的具体实施办法。
2.实验内容
①设计进程控制块PCB表结构,分别适用于优先数调度算法和时间片轮转调度算法。
②建立进程就绪队列。对两种不同算法编写入队子程序。
③设计编写两种进程调度算法:1)优先数调度;2)时间片轮转调度。
3.实验环境
①PC兼容机
②Windows系统
③自选
4.实验提示
①本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。
②为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
③在优先数算法中,进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的队尾上。
④对于遇到优先数一致的情况,采用FIFO策略解决。
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
bool _state = 0;
class PCB//类定义PCB表,适用于优先数
{
public:
int ID;
int priority;
int CPUtime;
int ALLtime;
int State;//1运行 2就绪 3等待
int flag;
void set_PCB(int a,int b,int c,int d, int e,int f)
{
ID=a;
priority = b;
CPUtime=c;
ALLtime=d;
State=e;
flag=f;
}
};
class PCB2
{
public:
int ID;
int CPUtime;
int ALLtime;
int State;
int flag;
void set_PCB2(int a,int b,int c,int d, int e)
{
ID=a;
CPUtime=b;
ALLtime=c;
State=d;
flag=e;
}
};
bool priority_sort_high