一个进程会经历饥饿吗?

Will a process experience starvation?

考虑具有非抢占式 SJF 调度的操作系统。如果给定 10 个进程的工作负载,并且每个进程执行一个 CPU 突发,范围从 10 毫秒到 20 毫秒,然后是 500 毫秒 I/O 突发,是否会有任何进程经历饥饿?

通过这个我知道首先安排最短的流程,无论哪个流程是 运行 都会 运行 完成,但我不明白如何确定是否有任何流程会因以下原因而被推迟鉴于此信息,资源从未被分配,我想在继续之前知道,我想知道如何判断给定的工作量和调度程序类型?

Consider and operating system with a non-preemptive SJF schedule. If it is given a workload of say 10 processes, and each process performs a CPU burst which ranges from 10ms to 20ms followed by a 500ms I/O burst, will any of the processes experience starvation?

如果定义"starvation"为"perpetually not getting any CPU time";然后,使用 "shortest job first" 算法:

a) 当较短的工作创建速度快于它们完成的速度时,较长的工作将会被饿死(不管有多少 CPUs 它们实际上跟不上,因为新的较短的工作创建得太频繁了).

b1) 如果占用无限时间的任务数超过任务块的CPUs和none数(例如等待IO),或者更多的进程将缺少 CPU 时间(除非你通过某种形式的时间共享来增加 SJF,以避免 "always equal length" 工作之间的饥饿)。

b2) 如果花费无限时间的任务数量超过了CPUs 的数量并且某些任务确实阻塞(例如等待IO),那么是否发生饥饿取决于在 "sum of time each process is not blocked".

如果 SJF 调度程序的工作负载为 10 个进程,其中 none 个是 "infinite length",并且不会创建额外的新进程;那么所有 10 个任务迟早都必须完成,并且 none 个任务将永远等待 CPU.

当然,这并不意味着某些任务不必(暂时地、短暂地)等待 CPU。

注意:对于实际系统,通常有很多无限长的任务会阻塞(例如,对于 Windows 和 Linux,通常有超过 100 个进程 运行ning 作为 services/daemons 和 GUI);没有人知道任何任务将花费多长时间(不仅仅是因为每个 CPU 的速度由于电源管理而不断变化 - 例如,您使用 运行 的网络浏览器需要多长时间?);通常没有人知道一个过程是否会花费无限多的时间(停止问题);有时,由于错误,一个进程会意外地永远循环。换一种说法; "shortest job first"几乎总是无法实现。