本程序旨在使大家对先来先服务的处理机调度机制有更加深入的了解,步骤如下:
1.创建PCB结构体代表对相应进程的唯一标识,内含以下数据:
3.编写对应函数(如下)并按一定顺序调用
AddAProcessToRdyQue():新建进程,则增加一个pcb到就绪队列;
RunToFinish():运行进程,则从就绪队列头部删除一进程并投入运行,显示运行状态,并顺利结束;
RunWait():运行后堵塞,从就绪队列头部删除一进程并投入运行,显示运行1个时间单位后又堵塞,并将此进程加入到堵塞队列尾部;
Signal():唤醒进程,从堵塞队列头部将堵塞的进程加入到就绪队列尾部;
1.创建PCB结构体代表对相应进程的唯一标识,内含以下数据:
进程名 |
要求运行时间 |
状态 |
指针 |
2.创建相应队列和链表
deque<PCB_STRU*>Ready_Queue; //就绪队列
deque<PCB_STRU*>Block_Queue; //阻塞队列
PCB_STRU* Ready_list = (PCB_STRU*)malloc(sizeof(PCB_STRU)); //就绪状态链表
PCB_STRU* Block_list = (PCB_STRU*)malloc(sizeof(PCB_STRU)); //阻塞状态链表
3.编写对应函数(如下)并按一定顺序调用
AddAProcessToRdyQue():新建进程,则增加一个pcb到就绪队列;
RunToFinish():运行进程,则从就绪队列头部删除一进程并投入运行,显示运行状态,并顺利结束;
RunWait():运行后堵塞,从就绪队列头部删除一进程并投入运行,显示运行1个时间单位后又堵塞,并将此进程加入到堵塞队列尾部;
Signal():唤醒进程,从堵塞队列头部将堵塞的进程加入到就绪队列尾部;
Show()显示所有进程的进程控制块PCB的信息。
注意事项:
1.所有进程的添加与运行都由控制台输入指令唯一控制(最大并发度要求为5)
2.要求运行时间——假设进程需要运行的单位时间数;
状态——可假设有三种状态,"就绪"状态、"阻塞"状态和“结束”状态。新创建进程的初始状态都为“就绪”,用“R”表示,
当一个进程运行结束后,它的状态为“结束”,销毁此进程 “阻塞”状态的进程用“B”表示。
指针——用指针指出下一个进程具有相同状态的进程控制块的首地址;
代码如下:
#define MAXPROCESS 5 //最大并发度
#include <stdio.h>
#include<iostream>
#include<cstring>
#include<stdlib.h>
#include&l