资源简介

进程调度模拟程序:假设有10个进程需要在CPU上执行,分别用:先进先出调度算法、基于优先数的调度算法、最短执行时间调度算法确定这10个进程在CPU上的执行过程。要求每次进程调度时在屏幕上显示:当前执行进程、就绪队列、等待队列。 实现了三种方法,纯自己开发,使用链表实现,无bug。

资源截图

代码片段和文件信息

# include
# include
# include
# define N 10
# define num_name 10
/*
输入:
Wechat BaoFeng Baidu Sougou Google Taobao WPS QQ Baiduyun 360
或输入:
0 1 2 3 4 5 6 7 8 9
*/
typedef struct PCB//创建进程PCB块
{
    char name[num_name];//名称
    int stage;          //状态
    int priority;       //优先级
    int time;           //运行时间
}PCB;

typedef struct Node//创建队列结点
{
    PCB data;
    struct Node * next;
}QNode;

typedef struct Queue
{
    QNode * front;//队列头结点
    QNode * rear;//队列尾结点
}linkQueue;

int InitQueue(linkQueue * q)//链表初始化
{
    q->front=q->rear= (QNode *)malloc(sizeof(QNode));
    if(!q->front)
        exit(0);
    q->rear->next=NULL;
    return 1;
}
void Pop(linkQueue * q)//队头元素出队
{
    if(q->front->next==NULL) exit(0);
    QNode * p;
    p = q->front->next;
    q->front->next = q->front->next->next;
}

void Pop_Item(linkQueue * q QNode * t)//特定元素出队
{
    if(q->front->next==NULL) exit(0);
    QNode * p *f;
    f = q->front;
    for(p=q->front->next;p!=NULL;p=p->next)
    {
        if(!strcmp(t->data.name p->data.name))
        {
            f->next=f->next->next;
            return;
        }
        f=f->next;
    }
}
int Print(linkQueue * q1 linkQueue * q2 QNode * q)//输出队列
{
    printf(“当前执行进程是:\n“);
    //printf(“%s “ q->data.name);
    printf(“{ 名称:%8s  状态:%2d  优先数:%2d  时间:%3d} \n“ q->data.nameq->data.stage q->data.priority q->data.time);
    putchar(‘\n‘);
    QNode * p;
    printf(“就绪队列是:\n“);
    p = q1->front->next;
    while(p != NULL)
    {
        if(strcmp(p->data.name q->data.name))
        printf(“{ 名称:%8s  状态:%2d  优先数:%2d  时间:%3d} \n“ p->data.namep->data.stage p->data.priority p->data.time);
        p = p->next;
    }
    putchar(‘\n‘);
    printf(“等待队列是:\n“);
    p = q2->front->next;
    while(p != NULL)
    {
        //printf(“%s “ p->data.name);
        printf(“{ 名称:%8s  状态:%2d  优先数:%2d  时间:%3d} \n“ p->data.namep->data.stage p->data.priority p->data.time);
        p = p->next;
    }
    putchar(‘\n‘);
    putchar(‘\n‘);
}
void EnQueue(linkQueue * q PCB * a)//元素入队
{
    //printf(“%s “a->name);
    QNode * p;
    p = (QNode *)malloc(sizeof(QNode));
    strcpy(p->data.namea->name);
    p->data.stage = a->stage;
    p->data.priority = a->priority;
    p->data.time = a->time;
    p->next = NULL;
    if(q->front==NULL)//首结点为空,放入头结点后
    {
        q->front = p;
        q->rear = q->front;
    }
    else//头结点不为空,放入尾结点后
    {
        q->rear->next = p;
        q->rear = q->rear->next;
    }
    //printf(“%s %d“ q.rear->data.name q.rear->data.stage);
}

PCB FIFO(linkQueue * q_ready)//先进先出调度算法
{
    PCB p;
    p = q_ready->front->next->data;
    return p;
}

PCB Priority(linkQueue * q_ready)//基于优先数的调度算法
{
    QNode * p *t;
    t = q_ready->front->next;
    for(p=q_ready->front->next;p!=NULL;p=p->next)
    {
        if(p->data.priority > t->data.priority)//调用优先数最大的
     

评论

共有 条评论