jsjjdcw 2022-04-14 22:56 采纳率: 33.3%
浏览 54
已结题

虚拟机下Linux操作系统进程调度算法

img

```c++

```#include <stdio.h>
#include <stdlib.h>
#define getpch(type) (type*)malloc(sizeof(type))

struct pcd{
char name[10];
char state;
int nice,ntime,rtime;
struct pcd* link;
struct pcd* p;
struct pcd* ready;
}*ready=NULL,*p;

typedef struct pcd PCB;

char sort();
char input();
char disp();
char destroy();
int spare();

int main(){
//input();
int len,h=0;
//int *ready;
char ch;
len=spare();
while((len!=0)&&(ready!=NULL)){
h++;
ch=getchar();
printf("\n the execute number:%d\n",h);
p=ready;
ready=p->link;
p->link=NULL;
p->state='R';
char check();
char running();
printf("\n按任一键继续");
ch=getchar();
}
printf("\n\n所有进程已经运行完成!\n");
ch=getchar();
return 0;
}

char input(){
    int i,num;
    printf("请输入被调度的进程数目:");
    scanf("%d",&num);
    for(i=0;i<num;i++){
        printf("\n进程号NO.%d:",i);
        p=getpch(PCB);
        printf("\n输入进程名:");
        scanf("%s",p->name);
        printf("输入进程优先数:");
        scanf("%d",&p->nice);
        printf("输入进程运行时间:");
        scanf("%d",&p->ntime);
        printf("\n");
        p->rtime=0;
        p->state='w';
        p->link=NULL;
        sort();
    }
}

char sort(){
    PCB* first, *second;
    int insert=0;
    if((ready==NULL)||((p->nice)>(ready->nice))){
        p->link=ready;
        ready=p;
    }
    else{
        first=ready;
        second=first->link;
        while(second!=NULL){
            if((p->nice)>(second->nice)){
                p->link=second;
                first->link=p;
                second=NULL;
                insert=1;
            }
            else{
                first=first->link;
                second=second->link;
            }
        }
        if(insert==0)
        first->link=p;
    }
}

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

char check(){
    PCB* pr;
    printf("\n当前正在运行的进程是:%s",p->name);
    disp(p);
    pr=ready;
    if(pr!=NULL)
    printf("\n当前就绪队列状态为:");
    else
    printf("\n当前就绪队列状态为:\n");
    while(pr!=NULL){
        disp(pr);
        pr=pr->link;
    }
}

char disp(PCB* pr){
    printf("\n qname \t state \t nice \t ndtime \t runtime \n");
    printf("%s\t",pr->name);
    printf("%c\t",pr->state);
    printf("%d\t",pr->nice);
    printf("%d\t",pr->ntime);
    printf("%d\t",pr->rtime);
    printf("\n");
}

char destroy(){
    printf("进程[%s]已完成。\n",p->name);
    free(p);
}

char running(){
    (p->rtime)++;
    if(p->rtime==p->ntime)
    destroy();
    else{
        (p->nice)--;
        p->state='W';
        sort();
    }

【抱拳】

  • 写回答

1条回答 默认 最新

  • 关注

    我怀疑你在做华为实验,但是我没有证据

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月23日
  • 已采纳回答 4月15日
  • 创建了问题 4月14日

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd