我有一个包含n个进程的链表,这些进程按运行优先级的降序排序。因此,第一个进程,即链表的第一个节点具有最大优先级,然后是第二个节点,依此类推。 一次我只能运行 8 个进程。我想做的是我希望 6 个最高优先级和 2 个最低优先级同时运行。
我所做的是重新排列链表,其中前六个节点的优先级最高,接下来的两个节点优先级最低。然后又有 6 个高优先级节点和 2 个低优先级节点,并重复此操作,直到覆盖所有节点。但这并没有做我想要的,即如果 6 个最高优先级进程中的任何一个结束,那么另一个高优先级进程应该取代它,如果低优先级进程结束,那么低优先级可能会取代它。
我该如何实现?(这也是我的第一个问题,所以如果我提出问题的方式有任何问题,请指出来)
我可以用 2 种方法解决这个问题。
-
无论如何,使用此
list
作为deque
。Deque
只不过是一个数据 像queue
这样的结构,我们也可以从两个顶部推送和弹出元素 作为queue
的底部。 现在我们将维护 2 个计数器,High-counter
和Low-counter
.High-counter
将跟踪6
高优先级 进程将 低计数器将跟踪2
低优先级 过程。因此,高计数器将具有最大值6
而低计数器 将有2
.开始时,将两个计数器初始化为零。现在,当
High-counter < 6
时,从dequeue
和 递增High-counter
。再次Low-counter < 2
时,弹出底部 元素,并递增Low-counter
dequeue
元素。如果有的话 高 优先级过程完成,我们将递减High-counter
和 与低优先级进程类似。现在,计数器小于 它们各自的最大值,我们将使用 while 循环并重复 前两个 while 循环,直到Deque
为空。另请注意,这里的弹出过程意味着运行它们。
使用 类似的方法,但这次使用信号量代替计数器。
我不是在声称,我的解决方案是 100% 正确的,但它仍然接近答案。还要用操作系统标记问题,以吸引更好的答案。