#include<stdio.h>
#include<string.h>
#define MAX 10
typedef struct process {
char name[10];
int priority;
int ReachTime;
int NeedTime;
int UsedTime;
char state;
}PCB;
int n=0;
int pTime;
PCB static pcbs[MAX];
void sort(){
int i,j;
PCB pcb;
for(i=0;i<n;i++){
for(j=n-2;j>=i;j--){
if(pcbs[j+1].ReachTime < pcbs[j].ReachTime) {
pcb = pcbs[j];
pcbs[j] = pcbs[j+1];
pcbs[j+1] = pcb;
}
}
}
for(i=0;i<n;i++){
for(j=n-2;j>=i;j--){
if(pcbs[j+1].priority > pcbs[j].priority) {
pcb = pcbs[j];
pcbs[j] = pcbs[j+1];
pcbs[j+1] = pcb;
}
}
}
if(pcbs[0].state!='F') {
pcbs[0].state='R';
}
}
void print(){
int i;
sort();
printf("\n 进程名 | 优先级 |到达时间|需要时间|已用时间|进程状态 \n");
for(i=0;i<n;i++){
printf("%8s%8d%8d%8d%8d%8c\n",pcbs[i].name,pcbs[i].priority,pcbs[i].ReachTime,pcbs[i].NeedTime,pcbs[i].UsedTime,pcbs[i].state);
}
}
void AddProcess(){
PCB i;
char ch;
while(1){
printf("\n请输入进程名:");
scanf("%s",&(i.name));
printf("请输入进程优先级:");
scanf("%d",&(i.priority));
printf("请输入需要运行时间:");
scanf("%d",&(i.NeedTime));
i.ReachTime = n;
i.UsedTime = 0;
i.state = 'W';
pcbs[n] = i;
n++;
printf("你是否还要继续添加?");
do {
scanf("%c",&ch);
}while(ch==' ' || ch=='\n');
if(ch != 'y')
break;
}
printf("\n添加进程完毕\n");
}
void attemper(){
do {
if( pcbs[0].NeedTime - pcbs[0].UsedTime > pTime) {
pcbs[0].UsedTime += pTime;
pcbs[0].priority--;
pcbs[0].state = 'W';
} else {
pcbs[0].UsedTime = pcbs[0].NeedTime;
pcbs[0].priority = -1;
pcbs[0].state = 'F';
}
print();
}while(pcbs[0].state!='F');
}
void face(){
char ch;
do{
printf("\n增加进程并调度,请按1");
printf("\n打印进程,请按2");
printf("\n任务结束,请按0");
printf("\n请选择:");
do{
scanf("%c",&ch);
}while(ch == ' ' || ch =='\n');
switch(ch){
case '1':
AddProcess();
print();
attemper();
break;
case '2':
print();
break;
case '0':break;
}
}while(ch!='0');
}
int main(){
printf("\n请设置时间片大小:");
scanf("%d",&pTime);
face();
return 0;
}
自写~模拟操作系统进程调度C语言(按优先级)
最新推荐文章于 2024-09-04 05:43:08 发布