动态高优先权优先调度

实验二  动态高优先权优先调度

实验内容:

模拟实现动态高优先权优先(若数值越大优先权越高,每运行一个时间单位优先权-n,若数值越小优先权越高,没运行一个时间单位优先权+n),具体如下:

设置进程体:进程名,进程的到达时间,服务时间,初始优先权,进程状态(W——等待,R——运行,F——完成),进程间的链接指针

进程初始化:由用户输入进程名、服务时间、初始优先权进行初始化,同时,初始化进程的状态为W。

显示函数:在进程调度前、调度中和调度后进行显示。

排序函数:对就绪状态的进程按照优先权排序。优先权相同时进入等待队列时间早的进程在前。注意考虑到达时间

调度函数:每次从等待队列队首调度优先权最高的进程执行,状态变化。并在执行一个时间单位后优先权变化,服务时间变化,状态变化。当服务时间为0时,状态变为F。

删除函数:撤销状态为F的进程。

实验要求:

  1. 测试数据可以随即输入或从文件中读入。
  2. 必须要考虑到进程的到达时间
  3. 最终能够计算每一个进程的周转时间。

因为做的测试样例不多,希望有错误的地方能给予指出~~感谢.jpg

/*
动态高优先权优先调度
*/
#include
using namespace std;
struct Job
{
    int pid;
    int startTime;//到达时间
    int readTime;//进入准备队列的时间
    int runTime;//运行时间
    int serverTime;//服务时间
    int status;//0==等待,1==运行,2==完成
    int weight;//优先权,值越大,优先权越高
    int finishTime;//完成时间
} job[100001];
int n;//所有作业数量
int x;//没过一个时间单位权重的变化
bool operator <(const Job& a,const Job& b)//结构体重载函数
{
    if(a.weight == b.weight)
        return a.readTime>b.readTime;//优先权相等,更早进入准备队列的优先
    return a.weight ReadQueue;//进程准备队列


void updateStatus(int id,int time,int sta,int run,int we,int read)//修改进程状态
{
    for(int i=0; i

 

你可能感兴趣的:(操作系统)