四、实验内容:
1. 修改内核代码,增加阻塞队列,实现5状态进程模型。
理论准备:
1. 总体设计: block 可以将当前当前线程阻塞, wakeup 可以唤醒指定 pid 的线程。
2. 因为 wakeup 需要可以唤醒指定 pid 的线程,即访问队列中间的PCB,阻塞队列实际上不是一个队列,而是一个
阻塞链表。
3. 阻塞链表的实现:由于实验6中已经实现PCB表之间连接的逻辑,因而只需要加一个头 blockheader 即可。
4. 注意ready-running链表和blocked链表设计的区别,ready-running链表会一直保留一个pid=0的不会访问的尾节
点便于代码的编写(如不用考虑next是null的情况)。而为了不做太大改动blocked链表没有这个尾节点。
5. block 的实现:将 cur_pcb 指向的PCB表移出ready-running(即原先的)的PCB链表,移入blocked(即新的)
的PCB链表的头部。另外由于 schedule 的正确运行需要保证 cur_pcb 在ready-running的PCB链表中,因
而 block 也需要能够按照 schedule 的流程正确地将 cur_pcb 改为其 next 。
评论0