• 实验三,04彭得源


    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #define MAX 24
    
    struct pcb{
        char name[10];
    int arrtime;
    int reqtime;
    int runtime;
    int startime;
    int finitime;
    int wtime;
    int prio;
    char status;
    
    
    };
    
    typedef struct pcb PCB;
    
    //输入函数
    
    void input (PCB job[],int *pnum)
    
    {
        int num;
        int i;
        printf("进程数:");
        scanf("%d",&num);
    
    //输入 
    for(i=0;i<num;i++) { 
    printf("
    第%d个进程:
    ",i+1);
    printf("输入进程名:");
    scanf("%s",job[i].name);
    //printf("到达时间:");
    //scanf("%d",&job[i].arrtime);
    printf("优先次序:");
    scanf("%d",&job[i].prio);
    printf("要求服务的时间:");
    scanf("%d",&job[i].reqtime);
    job[i].status='r';
     job[i].runtime=0;
    } 
    //设置个数 
    *pnum=num;          
    }
    
    void pcbprintf(PCB pcbp[],int n)
    
    {
    
    int i; 
    if(n==0)
    { 
    printf("THE    QUEUE IS NULL!!
    ");
    return;
    } 
    printf("	name	prio	rqtime	runtime	status:"); 
    for(i=0;i<n;i++) 
    { 
    printf("
    N %d",i+1);
    printf("	%s",pcbp[i].name);
    printf("	%d",pcbp[i].prio); 
    printf("	%d",pcbp[i].reqtime);
    printf("	%d",pcbp[i].runtime); 
    printf("	%c",pcbp[i].status);
    }
    }
    
    //冒泡排序
    
    void btsort(PCB btpcb[],int n)
    
    {
    
    int i,j;
    PCB pcbtemp; 
    for(j=1;j<n;j++) 
    {
        for(i=0;i<n-j;i++) 
        {
            if(btpcb[i].prio<btpcb[i+1].prio) 
            { 
                pcbtemp=btpcb[i]; 
                btpcb[i]=btpcb[i+1];
                btpcb[i+1]=pcbtemp;
            }
        }
    }
    }
    
    void main()
    
    {
        PCB jobarrived[MAX],jobfinished[MAX];
        int numarr,numfin;
        int systime=0;
    
        int i,j,n;
        PCB pcbrunning;
    
    printf("
     welcome to the DEMO program which shows Process Scheduling!
    
    ");
    printf("			From:网络工程彭得源
    ");
    printf(" NOV,5月,21日,2015
    
    ");
    input(jobarrived,&numarr); 
    numfin=0;
    
    
    //系统时间置零
    
    systime=0; 
    btsort(jobarrived,numarr); 
    printf("经按priority排序后,ready Queue是
    "); 
    pcbprintf(jobarrived,numarr);
    
    //debug
    
    do
    { 
        btsort(jobarrived,numarr);
        printf("
    
    		现在系统时间 %d:
    
    ",systime); 
        printf("ready Queue有 
    "); 
        pcbprintf(jobarrived,numarr);
        pcbrunning=jobarrived[0]; 
        numarr--;
        for(i=0;i<numarr;i++) 
            jobarrived[i]=jobarrived[i+1]; 
            pcbrunning.status='R';
            pcbrunning.startime=systime; 
            printf("
    
    		处于运行态的作业名 %s 
    ",pcbrunning.name); 
            systime++; 
            pcbrunning.runtime++; 
            if(pcbrunning.runtime==pcbrunning.reqtime) 
            {
            jobfinished[numfin]=pcbrunning;
            jobfinished[numfin].status='F';
            numfin++;
            } 
            else
            { 
                pcbrunning.prio--;
                pcbrunning.status='r';
                jobarrived[numarr]=pcbrunning;
                numarr++; 
            }
            printf("
    
    		 系统时间:%d 已经完成的有
    
    ",systime); 
            pcbprintf(jobfinished,numfin); 
            getchar(); 
            getchar(); 
        }while((numarr!=0)); 
        //debug 
        printf("
    Completed!! ByeBye!!"); 
        getchar(); 
        getchar();
    }
  • 相关阅读:
    minimsg升级扩展
    一起学习Avalonia(十三)
    @Import注解源码
    Python入门随记(3)
    NET WebApi 后端重定向指定链接
    Net Nlog 持久化到数据库
    NetCore Xunit单元测试依赖注入
    VS 调试时,提示无法启动iis服务器
    NET 反射,对可空类型动态赋值
    MSSQL 查询表结构
  • 原文地址:https://www.cnblogs.com/leon-pang/p/4502529.html
Copyright © 2020-2023  润新知