操作系统,进程管理

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

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

typedef struct pch PCB;

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;
    }
}

char input(){
    int i,num;
    printf("\n请è¾å¥è¢«è°ç¨çè¿ç¨æ°ç®ï¼");
    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();
    }
}


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


char disp(PCB * pr){
    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 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 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();
    }
}

int main()
{
    int len,h=0;
    char ch;
    input();
    len=space();
    while((len!=0)&&(ready!=NULL)){
        ch=getchar();
        h++;
        printf("\n The execute nu,ber:\n",h);
        p=ready;
        ready=p->link;
        p->link=NULL;
        p->state='R';
        check();
        running();
        printf("\næä»»æé®ç»§ç»­......");
        ch=getchar();
    }
    printf("\n\nææè¿ç¨å·²ç»è¿è¡å®æ¯ï¼\n");
    ch=getchar();
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值