前言
因为做的比较粗糙,如果代码有误,欢迎评论区指正
因为做的比较粗糙,如果代码有误,欢迎评论区指正
因为做的比较粗糙,如果代码有误,欢迎评论区指正
实验目的
用C++编写一个进程调度模拟程序,使用优先级或时间片轮转法实现进程调度。
实验内容
1)设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。
2)模拟调度程序可任选两种调度算法之一实现。
3)程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。
流程图
优先级调度算法代码
#include<bits/stdc++.h>
using namespace std;
typedef struct PCB{
int id;
int prior;
int used;
int need;
char status;
}PCB;
bool rule(PCB p1,PCB p2){
return p1.prior>p2.prior;
}
PCB *head;
PCB p[5];
void Init(){
srand(time(0));
for(int i=0;i<5;++i){
p[i].id=i+1;
p[i].prior=1+rand()%5;
//cout<<p[i].prior;
p[i].used=0;
p[i].need=5+rand()%5;
p[i].status='J';
}
}
bool isEmpty(){
for(int i=0;i<5;++i){
if(p[i].status!='F'){
return false;
}
}
return true;
}
void print(){
printf("----------------------------------------------------\n");
printf("进程ID\t优先级\t已使用时间片\t所需时间片\t状态\n");
for(int i=0;i<5;++i){
printf(" %d\t %d\t %d\t\t %d\t\t %c\n",p[i].id,p[i].prior,p[i].used,p[i].need,p[i].status);
}
printf("\n");
}
void running(){
if(isEmpty()){
print();
return;
}else{
//找到链首进程
sort(p,p+5,rule);
for(int i=0;i<5;++i){
if(p[i].status!='F'){
head=p+i;
break;
}
}
}
--(head->need);
--(head->prior);
head->status='R';
print();
if(head->need==0){
head->status='F';
}else{
head->status='J';
}
running();
}
int main(){
Init();
cout<<"开始进程的状态:"<<endl;
print();
running();
return 0;
}
运行截图