#include "pch.h"
#include <iostream>
#include "stdio.h"
#include "string.h"
#define num 3//假定系统中进程个数为5
using namespace std;
struct PCB
{
char ID;//进程名
int runtime;//要求运行时间
int pri;//优先数
char state; //状态,R-就绪,F-结束
};
struct PCB pcblist[num];//定义进程控制块数组
int max_pri_process(int key)//确定最大优先级进程子程序
{
int min = pcblist[key].pri;
int i = 0, j = 0;
int key1 = 0;
if (pcblist[key].runtime<=0)
{
min = 999999;
for (int i = 0; i < num; i++)
{
if (pcblist[i].pri <= min && pcblist[i].state == 'R') {
key1 = i;
min = pcblist[i].pri;
}
if (pcblist[i].state == 'F') {
j = j + 1;
}
}
}
else
{
for (i = 0; i < num; i++) {
if (pcblist[i].pri <= min && pcblist[i].state == 'R') {
key1 = i;
min = pcblist[i].pri;
}
if (pcblist[i].state == 'F') {
j = j + 1;
}
}
}
if (j >= num) {
return -1;
}
else {
pcblist[key1].pri++;
pcblist[key1].runtime--;
return key1;
}
}
void show()//显示子程序
{
int i;
printf("\n 进程名 优先数 要求运行时间 状态 \n");
printf("-------------------------------------------------\n");
for (i = 0; i < num; i++)//依次显示每个进程的名、优先数、要求运行时间和状态
{
printf("%6s%8d%8d%8s\n", &pcblist[i].ID, pcblist[i].pri, pcblist[i].runtime, &pcblist[i].state);
}
printf(" pressany key to continue...\n");
}
void update(int key) {
for (int i = 0; i < num; i++)
{
if (pcblist[i].runtime <= 0)
{
pcblist[i].state = 'F';
}
else
{
pcblist[i].state = 'R';
}
}
show();
int addr = max_pri_process(key);
if (addr == -1)
{
return;
}
else
{
update(addr);
}
}
void init()//PCB初始化子程序
{
int i;
for (i = 0; i < num; i++)
{
printf("PCB[%d]:进程名 优先数 要求运行时间 \n", i + 1);//为每个进程任意指定pri和runtime
cin >> pcblist[i].ID;
cin >> pcblist[i].pri;
cin >> pcblist[i].runtime;
pcblist[i].state = 'R';//进程初始状态均为就绪
getchar();//接收回车符
}
int key = max_pri_process(0);
update(key);
getchar();
}
int main()//按动态优先数调度主程序
{
init();
}
操作系统实验-基于优先数的时间片轮转调度算法调度处理器
最新推荐文章于 2023-01-08 13:52:12 发布