- 选择一种高级语言如C/C++等,模拟实现调度算法完成资源分配与回收的过程。2) 自定义PCB等核心数据结构;3) 利用列表、队列等容器类或者其他数据结构管理PCB,完成相应调度算法的模拟;4) 实现外围一些命令如创建进程、查看进程、关闭进程等,使模拟系统更加方便可用。设计系统命名行提示符;
(1)设计思想:
1、建立结构体PCB,包括进程名、进程状态、优先级、需要时间、剩余时间、指向下一节点的结构体PCB的指针变量,定义两个全局struct pcb的指针变量。
2、初始化,建立进程控制块函数,循环输入n个进程的名、进程优先级、进程运行时间,让p指针指向的节点已经运行时间为0,状态是等待,使p指针下一节点为NULL。
3、对输入的进程比较优先级进行排序
3.1当ready指针为NULL或者(p->super)>(ready->super),将优先级大的放队首。
3.2否则让first指针指向ready指针所指节点,second指针指向first指针所指下一节点,当second不为NULL时,如果插入进程比当前进程优先数大,插入当前进程前面。如果插入进程优先数最低,则插入到队尾。
3.3否则当second为NULL时,first指针指向p指针前一个节点。
4、遍历链表,返回当前链表长度,当指针不指向尾节点时,循环继续执行,遍历每个节点使得len+1;最后返回链表长度。
5、当链表长度为不为空并且指针不指向尾节点时,进入循环,取链表首个节点,把第二个节点的地址赋值给ready,首节点后继节点地址为空,修改首节点状态为运行。然后显示进程信息,建立进程就绪函数
5.1将p指针指向的节点运行的进程的已经运行时间加1,当进程运行时间=所需时间,则撤销进程。否则,让运行的进程优先级减1,改变进程状态为等待,然后重新对进程排序。
6、当到达尾节点时,显示进程已经完成。
(2)功能函数设计:
sort();进程队列按优先级排序
input();建立进程控制块函数
space();遍历链表,返回当前链表的长度
disp(PCB * pr);建立进程显示函数,用于显示当前进程
check();显示进程
destroy();建立进程撤销函数(进程运行结束)
destroy();建立进程撤销函数(进程运行结束)
(3)结果演示:
当有三个进程a1、a2、a3时
进程运行结果如下: