简析代码:void FCFS(PCB pro[], int num) { int time,done_time; int i,count,tt,pronum; float sum_T_time,sum_QT_time; PCB *curpro,*temp_PCB; printf("\n\t\t\t\t\t先来先服务算法进程调度模拟\n\n"); printf("\t————————————————————————————————————————————————\n"); count=0; PCB pro2[100]; sortWithEnterTime(pro, num); PCBQueue* queue = (PCBQueue*)malloc(sizeof(PCBQueue)); Queueinit(queue); EnterQueue(queue, &pro[0]); time = pro[0].arrivetime; pronum = 1; sum_T_time = 0, sum_QT_time = 0; while (queue->size > 0) { curpro = poll(queue); if (time < curpro->arrivetime){ time = curpro->arrivetime; } done_time = time + curpro->running_time; curpro->start_time=time; curpro->done_time=done_time; curpro->zztime = done_time - curpro->arrivetime; curpro->dqzztime = curpro->zztime / curpro->running_time; sum_T_time += curpro->zztime; sum_QT_time += curpro->dqzztime; for (tt = time; tt <= done_time && pronum < num; tt++) { if (tt >= pro[pronum].arrivetime) { EnterQueue(queue, &pro[pronum]); pronum++; } } CopyProgram(&pro2[count],curpro); PrintRunningprogram(&pro2[count]); count++; if(queue->size!=0) { printf("\t就绪队列:\n"); printf("\t————————————————————————————————————————————————\n"); printf("\t进程 到达时间 服务时间 优先级\n"); temp_PCB=queue->firstProg->next; for(i=queue->size; i>0; i--) { printf("\t%s\t%d\t%d\t%d\n",temp_PCB->name,temp_PCB->arrivetime,temp_PCB->running_time,temp_PCB->priority); temp_PCB=temp_PCB->next; } printf("\t————————————————————————————————————————————————\n"); printf("\n\n\n"); } else { printf("\t无进程处于就绪状态!\n"); printf("\t————————————————————————————————————————————————\n\n\n"); } time += curpro->running_time; if (queue->siz
时间: 2023-08-01 20:09:40 浏览: 168
FCFS.rar_FCFS算法 分析_fcfs
5星 · 资源好评率100%
该函数是一个先来先服务(FCFS)的进程调度算法模拟。其输入参数包括一个进程控制块(PCB)数组和进程数量。该函数输出模拟的结果。
该函数的主要实现流程如下:
1. 按照进程的到达时间对进程进行排序。
2. 创建一个PCB队列,将第一个进程加入队列,并将当前时间设置为第一个进程的到达时间。
3. 对于队列中的每个进程,计算该进程的完成时间、开始时间、周转时间和带权周转时间,并将其加入一个新的PCB数组中(用于后续输出)。
4. 在计算当前进程完成后,将到达时间在当前时间之前的所有进程加入队列。
5. 输出当前正在运行的进程和就绪队列中的所有进程信息。
6. 重复步骤3-5直到队列为空。
其中,PCB结构体包括进程的名称、到达时间、服务时间、优先级、开始时间、完成时间、周转时间和带权周转时间等信息。Queueinit()函数用于初始化PCB队列,EnterQueue()函数用于将进程加入队列,poll()函数用于从队列中取出一个进程。
阅读全文