进程调度
进程调度是操作系统的核心功能之一,以下为你详细介绍:
进程调度的概念
进程调度是指操作系统按照一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。其主要目的是提高CPU利用率、增加系统吞吐量、减少进程等待时间和提高系统响应速度等。
进程调度的时机
- 正在执行的进程执行完毕。
- 执行中进程自己调用阻塞原语将自己阻塞起来进入睡眠等状态。
- 执行中进程调用了P原语操作,从而因资源不足而被阻塞;或调用了V原语操作激活了等待资源的进程队列。
- 执行中进程提出I/O请求后被阻塞。
- 在分时系统中时间片已经用完。
- 在执行完系统调用等系统程序后返回用户进程时。
- 就绪队列中的某进程的优先级变得高于当前执行进程的优先级(在可剥夺式调度中)。
进程调度算法
- 先来先服务调度算法(FCFS):按进程进入就绪队列的先后顺序分配CPU,先进入的进程先执行。该算法简单,但不利于短进程,常用于批处理系统。
- 短作业(进程)优先调度算法(SJF/SPF):对短作业或短进程优先调度。可降低平均周转时间,但对长进程不利,且需要事先知道进程的运行时间,实际中较难实现。
- 优先级调度算法:
- 非抢占式优先权算法:系统把处理机分配给优先权最高的进程后,该进程一直执行直至完成或因事件放弃处理机。常用于批处理系统或对实时性要求不严的实时系统。
- 抢占式优先权调度算法:当有更高优先权的进程进入就绪队列时,立即暂停当前进程,将处理机分配给新的高优先级进程。常用于严格的实时系统及对性能要求高的批处理和分时系统。
- 高响应比优先调度算法:综合考虑进程的等待时间和服务时间,响应比 =(等待时间 + 服务时间)/服务时间。既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。
- 轮转调度算法:将CPU的处理时间分成固定大小的时间片,就绪进程按FCFS原则排队,每个进程轮流获得一个时间片的处理机时间。如果进程在时间片内未完成任务,则排到就绪队列末尾等待下一次调度。时间片长度的选取很重要,会影响系统开销和响应时间。
- 多级反馈队列调度算法:设置多个就绪队列,各队列优先级不同,优先级越高的队列时间片越小。新进程先进入第一队列,按FCFS原则排队等待调度,若在一个时间片内未完成,则转入下一级队列,如此下去,最后一级队列采用时间片轮转方式运行。该算法不必事先知道进程所需执行时间,能满足各种类型进程的需要。
进程调度的切换过程
- 保存当前进程的上下文:包括程序计数器、寄存器的值、进程状态等信息,以便后续恢复进程执行。
- 选择下一个要执行的进程:依据调度算法从就绪队列中挑选进程,如优先级调度选优先级最高的进程,时间片轮转则按顺序选择下一个进程。
- 恢复选中进程的上下文:将选中进程的上下文信息从内存中读出,恢复到相应硬件部件中,使进程能从上次暂停处继续执行。
- 更新进程控制块(PCB)信息:更新选中进程的PCB中进程状态等信息,同时更新其他进程的PCB信息,如将被换下进程的状态从运行态变为就绪态或阻塞态。
进程调度的方式
- 非抢占式调度:进程获得CPU后一直运行,直到主动放弃CPU,如执行完毕、进入阻塞状态或主动调用系统调用让出CPU。实现简单,但可能导致系统响应时间长,其他就绪进程等待久。
- 抢占式调度:系统可根据策略,如优先级、时间片等,强制暂停当前进程,将CPU分配给其他更需要的进程。能保证系统对紧急事件快速响应,提高实时性和公平性,但实现复杂,系统开销大。
操作系统I 文章被收录于专栏
操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的核心程序,是用户与硬件之间的桥梁,也是计算机系统的核心组成部分。