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 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持