m0_59667112 2022-05-08 17:45 采纳率: 20%
浏览 7
已结题

动态优先级调度 帮助注释

#include<stdio.h>
#include<stdlib.h>

typedef struct PCB{
int PID;//进程名
char state;//运行状态 R-就绪状态 E-结束状态
int priority;//优先数
int runTime;//运行时间
int workTime;//剩余时间
struct PCB *next;//PCB分配指针
}*process,ptr;

PCB *ready=NULL,*p;
int num;

void PCBsort(){
PCB *first,*second;
int flag=0;
if((ready==NULL)||((p->priority)<(ready->priority))){
p->next=ready;
ready = p;
}else{
first=ready;
second=first->next;
while(second!=NULL){
if((p->priority)<(second->priority)){
p->next=second;
first->next=p;
second=NULL;
flag=1;
}else{
first=first->next;
second=second->next;
}
}
if(flag==0)first->next=p;
}
}

void inputProcess()
{
int i;
printf("输入%d个进程的信息(PID、优先数、运行时间)\n",num);
for(i=0;i<num;i++){
p=(PCB*)malloc(sizeof(PCB));
scanf("%d %d %d",&p->PID,&p->priority,&p->runTime);
p->workTime=0;
p->state='E';
p->next=NULL;
PCBsort();
}
}

int space()
{
int k=0;
PCB* pr=ready;
while(pr!=NULL){
k++;
pr=pr->next;
}
return k;
}

void showInfo(ptr *pr){
printf("\nPID\t状态\t优先数\t运行时间\t剩余时间\n");
printf("————————————————————————————\n");
printf(" %d\t",pr->PID);
printf(" %c\t",pr->state);
printf("%d\t",pr->priority);
printf("%d\t\t",pr->runTime);
printf("%d\t",pr->runTime-pr->workTime);
printf("\n");
}

void priorityRun()
{
int len,h=0;
char ch;
inputProcess();
len=space();
while((len!=0)&&(ready!=NULL))
{
ch=getchar();
h++;
printf("\n 运行次数:%d \n",h);
p=ready;
ready=p->next;
p->next=NULL;
p->state='R';
PCB* pr;
showInfo(p);
pr=ready;
while(pr!=NULL){
showInfo(pr);
pr=pr->next;
}
(p->workTime)++;
if(p->workTime==p->runTime){
printf("\n 进程%d 已结束。\n",p->PID);
free(p);
}
else{
(p->priority)++;
p->state='E';
PCBsort();
}
printf("\n 按任一键继续 ......");
}
printf("\n\n 进程已经完成 .\n");
ch=getchar();
}

int main()
{
printf("—————————————————优先级调度算法—————————————————\n");
printf("输入进程数目:");
scanf("%d",&num);
priorityRun();
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月16日
    • 创建了问题 5月8日

    悬赏问题

    • ¥30 模拟电路 logisim
    • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
    • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
    • ¥15 安装quartus II18.1时弹出此error,怎么解决?
    • ¥15 keil官网下载psn序列号在哪
    • ¥15 想用adb命令做一个通话软件,播放录音
    • ¥30 Pytorch深度学习服务器跑不通问题解决?
    • ¥15 部分客户订单定位有误的问题
    • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
    • ¥15 Bug traq 数据包 大概什么价