饥饿与车队效应
Starvation vs Convoy Effect
starvation和convoy effect的唯一区别是convoy effect主要定义在FCFS[=18上=] 调度算法和饥饿是基于优先级的调度?
我研究了这两种效果,但找不到比较。这是基于我在大学期间学到的操作系统理论。
饥饿和车队两种算法都可能发生。最简单的,饥饿,可以通过一个任务进入这个循环来模拟(希望不是UDB):
while (1) {
}
在FCFS中,这个任务永远不会交出CPU,因此它后面的所有任务都会饿死。在基于优先级的系统中,同一个任务将使所有优先级较低的任务饿死。
车队可以更普遍地被认为是资源争用问题;一个任务拥有资源 (cpu),而其他任务必须等到它用完它。在 priority-based 系统中,这体现在 优先级反转 中,高优先级任务被阻止,因为它需要低优先级任务拥有的资源。有一些方法可以缓解这些问题,包括 priority inheritance 和 ceiling 协议。如果没有这些机制,争夺资源的任务将形成一个车队,就像在 fcfs 中一样;与 fcfs 不同,不争用资源的任务可以随意执行。
对响应能力、吞吐量和公平性的期望常常不一致,这也是我们没有真正解决调度问题的部分原因。
starvation和convoy effect的唯一区别是convoy effect主要定义在FCFS[=18上=] 调度算法和饥饿是基于优先级的调度?
我研究了这两种效果,但找不到比较。这是基于我在大学期间学到的操作系统理论。
饥饿和车队两种算法都可能发生。最简单的,饥饿,可以通过一个任务进入这个循环来模拟(希望不是UDB):
while (1) {
}
在FCFS中,这个任务永远不会交出CPU,因此它后面的所有任务都会饿死。在基于优先级的系统中,同一个任务将使所有优先级较低的任务饿死。
车队可以更普遍地被认为是资源争用问题;一个任务拥有资源 (cpu),而其他任务必须等到它用完它。在 priority-based 系统中,这体现在 优先级反转 中,高优先级任务被阻止,因为它需要低优先级任务拥有的资源。有一些方法可以缓解这些问题,包括 priority inheritance 和 ceiling 协议。如果没有这些机制,争夺资源的任务将形成一个车队,就像在 fcfs 中一样;与 fcfs 不同,不争用资源的任务可以随意执行。
对响应能力、吞吐量和公平性的期望常常不一致,这也是我们没有真正解决调度问题的部分原因。