资源简介

(1)假定系统有5个进程,每个进程用一个PCB来代表。PCB的结构为: •进程名——如P1~P5。 •指针——按优先数的大小把5个进程连成队列,用指针指出下一个进程PCB的首地址。 •要求运行时间——假设进程需要运行的单位时间数。 •优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。 •状态——假设两种状态:就绪和结束,用R表示就绪,用E表示结束。初始状态都为就绪状态。 (2) 开始运行之前,为每个进程确定它的“优先数”和“要求运行时间”。通过键盘输入这些参数。 (3) 处理器总是选择队首进程运行。采用动态改变优先数的办法,进程每运行1次,优先数减1,要求运行时间减1。 (4) 进程运行一次后,若要求运行时间不等于0,则将它加入就绪队列,否则,将状态改为“结束”,退出就绪队列。 (5) 若就绪队列为空,结束,否则转到(3)重复。

资源截图

代码片段和文件信息

#include
#include
#include

int global_time = 0;//全局时间 

struct PCB{
    char name[10];
    struct PCB *next;
    int run_time;
    int priority;
    char status;
};
//定义结构体,包含五个属性,名字,下一个PCB指针,运行时间,优先级,目前状态 

void initPCB(struct PCB *p int i){
    p->name[0] = ‘P‘;
    p->name[1] = i + ‘0‘;
    p->name[2] = 0;
    p->next = NULL;
    printf(“Process %s\n“ p->name);
    printf(“input run_time: “);
    scanf(“%d“ &p->run_time);
    printf(“input priority: “);
    scanf(“%d“ &p->priority);
    p->status = ‘R‘;
}
//输入任务名称, 时间和优先级,运行状态为E 

void run(struct PCB *p){
    printf(“Process: %s running @ tim %d priority %d run_time %d\n“
           p->name global_time p->priority p->run_time);
    global_time++;
    p->run_time--;
    p->priority--;
}//输出这个任务的状态,全局时间加1,任务还需要的时间减1,优先级减1 

int main(){
    int i;
    struct PCB *head = (struct PCB *)malloc(sizeof(struct PCB));
    head->next = NULL;//定义头节点,分配空间 目前链表中为空 
    struct PCB *p = NULL *q = NULL;//定义 指针p和q,p为待运行队列PCB指针,q为待插入队列PCB指针 
    for(i = 0; i < 5; i++){
        p = (struct PCB *)malloc(sizeof(struct PCB));//分配空间,让p指向这个

评论

共有 条评论