资源简介

1.编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。 2、用“简单轮转法调度算法”实现第一题

资源截图

代码片段和文件信息

#include 
#include 
#include 
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0

struct pcb   /* 定义进程控制块PCB */
{
    char name[10];       //进程名
    char state;         //进程状态
    int super;          //进程优先级
    int ntime;         //进程需要运行时间
    int rtime;          //进程已经运行的时间
    struct pcb* link;
}*ready=NULL*p;
typedef struct pcb PCB;

void sort() /* 建立对进程进行优先级排列函数*/
{
    PCB *first *second;
    int insert=0;
    if((ready==NULL)||((p->super)>(ready->super))) /*优先级最大者插入队首*/
    {
        p->link=ready;
        ready=p;
    }
    else /* 进程比较优先级插入适当的位置中*/
    {
        first=ready;
        second=first->link;
        while(second!=NULL)
        {
            if((p->super)>(second->super)) /*若插入进程比当前进程优先数大*/
            {
                /*插入到当前进程前面*/
                p->link=second;
                first->link=p;
                second=NULL;
                insert=1;
            }
            else /* 插入进程优先数最低则插入到队尾*/
            {
                first=first->link;
                second=second->link;
            }
        }
        if(insert==0) first->link=p;
    }
}

void input() /* 建立进程控制块函数*/
{
    int i;
    system(“cls“); /*清屏*/
    printf(“\n 请输入五个进程信息:\n“);
    for(i=0; i<5; i++)
    {
        printf(“\n 进程号No.%d:\n“i);
        p=getpch(PCB);
        printf(“\n 输入进程名:“);
        scanf(“%s“p->name);
        printf(“\n 输入进程优先数:“);
        scanf(“%d“&p->super);
        printf(“\n 输入进程运行时间:“);
        scanf(“%d“&p->ntime);
        printf(“\n“);
        p->rtime=0;
        p->state=‘w‘;
        p->link=NULL;
        sort(); /* 调用sort函数*/
    }
}

int space()     //计算进程控制块的个数
{
    int l=0;
    PCB* pr=ready;
    while(pr!=NULL)
    {
        l++;
        pr=pr->link;
    }
    return(l);
}

void disp(PCB * pr) /*建立进程显示函数用于显示当前进程*/
{
    printf(“\n qname \t state \t super \t ndtime \t runtime \n“);
    printf(“|%s\t“pr->name);
    printf(“|%c\t“pr->state);
    printf(“|%d\t“pr->super);
    printf(“|%d\t“pr->ntime);
    printf(“|%d\t“pr->rtime);
    printf(“\n“);
}

void check() /* 建立进程查看函数 */
{
    PCB* pr;
    printf(“\n **** 当前正在运行的进程是:%s“p->name); /*显示当前运行进程*/
    disp(p);
    pr=ready;
    printf(“\n ****当前就绪队列状态为:\n“); /*显示就绪队列状态*/
    while(pr!=NULL)
    {
        disp(pr);
        pr=pr->link;
    }
}

void destroy() /*建立进程撤消函数(进程运行结束撤消进程)*/
{
    printf(“\n 进程 [%s]

评论

共有 条评论