最高优先级

摘要:
='3'); returnselect;}voidmain(){intchoice;n=1;printf(“”);printf;choice=SelectMenu();do{if{printf(”);Print f;scanf;Input();Print();Attemper();}如果{Print();}如果{return;}choice=选择菜单();}同时;}voidInput(){do{printf;printf;scanf;printf;scanf,printf;canf;pcb[n].arrtime=n;pcb[n].used time=0;pcb[n].state='W';n++;}而(n˂5);}VoidSort(){inti,j;PCBtemp;用于//按到达时间排序{如果{temp=pcb[j];pcb[j]=pcb[j+1】;pcb[j+1]=temp;}}for//按优先级排序{for{if{temp=pcb[j];pcb[j]=pcb[j+1】;pcb[j+1]=temp;}}如果(pcb[0].state!

最高优先级

#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');

}

免责声明:文章转载自《最高优先级》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用命名管道承载gRPC,以及适用场景将 Excel 数据导入 SQL Server数据库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HTTP协议探究(五):H2中一些重要的概念

一 复习与目标 1 复习 简单密码学、对称加密与非对称加密 数字签名、数字证书 SSL/TLS HTTPS = HTTP + SSL/TLS,SSL/TLS为HTTP提供了保密性、完整性和鉴别性 2 目标 HTTP1.1的问题 HTTP2.0设计关键 HTTP2.0的详情 注1:本文并不会讲解h2的所有内容,只会包含重要(主观)的内容。 注2:下一...

SQLi-Labs:Less54-Less65

从54关开始,开始慢慢偏向于实际环境,加了次数限制之类的 Less 54 本关中是对输入的次数做了限制,必须在10次请求之内获取信息,否则会刷新表名 首先判断了单引号闭合 ?id=1'  判断有三列 ?id=1' order by 3--+  爆库 ?id=-1' union select 1,database(),3--+   爆表 ?id=-1'...

数据库编程基本练习题

 1、用一条SQL语句查询出每门课都大于80分的学生姓名  准备数据的sql代码: create table score( id int primary key auto_increment, name varchar(20), subject varchar(20), score int); insert into score values (nul...

Sqlmap绕WAF学习

转载文章:http://www.vuln.cn/2086  感谢大佬的分享! 每当注入的时候看到这个贱贱的提示框,内心有千万只草泥马在奔腾。 但很多时候还是得静下来分析过滤系统到底过滤了哪些参数,该如何绕过。 sqlmap中的tamper给我们带来了很多防过滤的脚本,非常实用,可能有的朋友还不知道怎样才能最有效的利用tamper脚本。 当然使用脚本之前...

MySQL性能优化神器—explain

一、explain是什么? 简单来讲就是官方给的一个优化工具,直接在你的SQL语句前加上explain,执行整条语句,之后你就可以根据执行结果优化你的SQL啦,废话不多说,直接刚实例 测试实例 1、创建测试表 CREATE TABLE `sql_explain_student`( `id`int(11)NOT NULL AUTO_INCREMENT CO...

Mysql源码学习——打造专属语法

语法分析——YACC 接触过SQL语句的人都会看过这家或者那家的SQL手册,其语法标准应该是从SQL92开始吧,在看SQL92标准的时候,你会发现里面定义的都是一些巴科斯范式(BNF),就是一种语法定义的标准。不管是牛X哄哄的ORACLE,还是不幸被其收购的Mysql,都会遵循里面的标准语法,当然一些扩展的语法除外,比如今天我们就会扩展一个简单的语法^...