zoukankan      html  css  js  c++  java
  • 自写~模拟操作系统进程调度C语言(按优先级)

    #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("
     进程名 | 优先级 |到达时间|需要时间|已用时间|进程状态  
    ");
        for(i=0;i<n;i++){
            printf("%8s%8d%8d%8d%8d%8c
    ",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("
    请输入进程名:");
            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=='
    ');
    
            if(ch != 'y')
                break;
        }
        printf("
    添加进程完毕
    ");
    }
    
    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("
    增加进程并调度,请按1");
            printf("
    打印进程,请按2");
            printf("
    任务结束,请按0");
            printf("
    请选择:");
            do{
               scanf("%c",&ch);
            }while(ch == ' ' || ch =='
    ');
    
            switch(ch){
                case '1':
                    AddProcess();
                    print();
                    attemper();
                    break;
                case '2':
                    print();
                    break;
                case '0':break;
            }
        }while(ch!='0');
    }
    
    int main(){
        printf("
    请设置时间片大小:");
        scanf("%d",&pTime);
        face();
        return 0;
    }
  • 相关阅读:
    关于 NSTimer 和 NSRunLoop 的一些理解
    通过 CocoaPods 集成 WeexSDK 到iOS项目中
    iOS 从相册取出的图片默认 取中间部分 裁剪成方形的
    Trilynn分享了炼数成金邀请码
    highcharts分段显示不同颜色
    H5手机开发锁定表头和首列(惯性滚动)解决方案
    为移动端开发提供纯前端的路由方案
    ionic系列
    2014总结
    margin 相关 bug 系列
  • 原文地址:https://www.cnblogs.com/rimochiko/p/7732811.html
Copyright © 2011-2022 走看看