进程有哪些调度算法?

进程调度就是确定某一个时刻CPU运行哪个进程,常见的进程调度算法有:

os-18911b0a-7326-467f-94fb-8c01a6980578.png

  • 先来先服务(FCFS)

先来先服务是一种非抢占式调度算法,按照进程请求的顺序进行调度。它适合长作业,但对短作业和I/O密集型进程不利。短作业必须等待长作业执行完毕才能执行,而长作业执行时间较长,导致短作业等待时间过长。对于I/O密集型进程,每次进行I/O操作后需要重新排队等待。

  • 短作业优先(SJF)

短作业优先是一种非抢占式调度算法,按照估计的运行时间最短的顺序进行调度。它可能导致长作业饥饿,因为长作业需要等待短作业执行完毕才能得到调度。如果一直有短作业到达,那么长作业可能永远得不到调度。

  • 优先级调度

优先级调度为每个进程分配一个优先级,并按照优先级进行调度。为了避免低优先级进程等待过久,可以随着时间的推移增加等待进程的优先级。

  • 时间片轮转(RR)

时间片轮转将所有就绪进程按照先来先服务的原则排成一个队列,每次调度时,将CPU时间分配给队首的进程,并执行一个时间片。当时间片用完时,计时器发出时钟中断,调度程序停止该进程的执行,并将其放到就绪队列的末尾,同时将CPU时间分配给队首的进程。

时间片轮转算法的效率与时间片的大小密切相关。时间片过小会导致进程切换过于频繁,增加系统开销;而时间片过长则可能影响实时性能。

  • 最短剩余时间优先(SRTF)

最短剩余时间优先是最短作业优先的抢占式版本,根据剩余运行时间的顺序进行调度。当一个新进程到达时,比较其整个运行时间与当前进程的剩余时间。如果新进程需要的时间更短,则挂起当前进程,运行新进程;否则,新进程等待执行。

标签: java, Java面试题, 操作系统, Java问题合集, Java编程, Java问题精选, Java常见问题, 操作系统面试题