• 最高优先级


    最高优先级

    #include<stdio.h>

    #include<stdlib.h>

    #include<string.h>

    #define Max 100

    typedef struct pcb

    {

        char name[Max];  //进程名

        int priority;    //优先级

        int arrtime;     //到达时间

        int needtime;    //需要运行时间

        int usedtime;    //已用时间

        char state;      //进程状态

    }PCB;

    PCB pcb[Max];

     

    int n=1;

    int pTime;  //时间片

    char SelectMenu();

    void Input();

    void Sort();

    void Print();

    void Attemper();

     

    char SelectMenu()

    {

        char select;

        printf("功能菜单:");

        printf("    1.增加并调度进程");

        printf("    2.打印进程");

        printf("    3.退出");

        printf(" 请输入你的选择(1--3):");

        do{

            select=getchar();

        }while(select!='1'&&select!='2'&&select!='3');

        return select;

    }

    void main()

    {

        int choice;

        n=1;

        printf("                        ");

        printf(" 欢迎使用进程调度模拟 ");  

        choice=SelectMenu();

        do{

            if(choice=='1')

            {

                printf("                        ");

                printf("请设置时间片的大小:");

                scanf("%d",&pTime);

                Input();

                Print();

                Attemper();

            }

            if(choice=='2')

            {

                Print();

            }

            if(choice=='3')

            {

                return;

            }

            choice=SelectMenu();

        }while(1);

    }

     

    void Input()

    {

        do{

            printf(" ---请输入第%d个进程进程--- ",n);

            printf(" 进程名:");

            scanf("%s",pcb[n].name);

            printf("进程优先级:");

            scanf("%d",&pcb[n].priority);

            printf("进程需要的时间:");

            scanf("%d",&pcb[n].needtime);

            pcb[n].arrtime=n;

            pcb[n].usedtime=0;

            pcb[n].state='W';

            n++;

        }while(n<5);

    }

    void Sort()

    {

        int i,j;

        PCB temp;

        for(i=0;i<n-1;i++)         //按照到达时间排序

        {

            for(j=n-2;j>=i;j--)

            {

                if(pcb[j+1].arrtime<pcb[j].arrtime)

                {

                    temp=pcb[j];

                    pcb[j]=pcb[j+1];

                    pcb[j+1]=temp;

                }

            }

        }

        for(i=0;i<n-1;i++)      //按照优先级排序

        {

            for(j=n-2;j>=i;j--)

            {

                if(pcb[j+1].priority>pcb[j].priority)

                {

                    temp=pcb[j];

                    pcb[j]=pcb[j+1];

                    pcb[j+1]=temp;

                }

            }

        }

        if(pcb[0].state!='F')

        {

            pcb[0].state='R';

        }

    }

    void Print()

    {

        int i;

        Sort();

        printf("   进程名    优先级  到达时间  需要时间    已用时间   进程状态 ");

        for(i=0;i<n;i++)

    {

        printf("%8s%8d %8d %10d %10d %10c ",pcb[i].name,pcb[i].priority,pcb[i].arrtime,pcb[i].needtime,pcb[i].usedtime,pcb[i].state);

        }

    }

    void Attemper()

    {

        do{

            if((pcb[0].needtime-pcb[0].usedtime)>pTime)   //判断进程剩余的运行时间是否大于时间片

            {

                pcb[0].usedtime+=pTime;

                pcb[0].priority--;

                pcb[0].state='W';

            }

            else                       //已完成的进程

            {

                pcb[0].usedtime=pcb[0].needtime;

                pcb[0].priority=-1;

                pcb[0].state='F';

            }

            Print();

        }while(pcb[0].state!='F');

    }

  • 相关阅读:
    SQLserver1数据库操作
    系统信息相关命令的学习
    打包压缩(tar指令)
    用户管理相关内容的学习(chmod修改文件权限(附加)及实例)
    用户管理相关内容的学习(查看文件权限 修改文件权限chmod 改变文件归属chown和chgrp)
    用户管理相关内容的学习(su切换用户)
    用户管理相关内容的学习(which命令的使用 查看命令所在的位置)
    用户管理相关内容的学习(登录xshell)
    用户管理相关内容的学习(设置主组和附加组)
    用户管理相关内容的学习查看用户信息(who whoami)
  • 原文地址:https://www.cnblogs.com/Anei/p/7875541.html
Copyright © 2020-2023  润新知