「操作系统」进程调度


进程调度实际上就是在就绪进程队列中选择一个进程执行,关于进程的调度我们需要考虑三个问题——

  • 调度的时机:何时进行进程调度
  • 调度的执行:调度时如何进行CPU上下文切换
  • 调度的策略:按照什么原则选择一个就绪进程进行调度

调度的时机

当遇到下面几种情况时,可能会发生进程的调度——

  • 当一个新的进程被创建时
  • 当一个进程运行完毕时
  • 当一个进程由于I/O、信号量或其他原因被阻塞时
  • 当一个I/O中断发生时(表明某个I/O操作已经完成,而等待该I/O操作的进程转入就绪状态)
  • 在分时系统中,当一个时钟中断发生时
  • 当OS取得对CPU的控制时(例如用户系统调用、中断、陷阱)

调度的执行

在进程上下文切换时,会执行以下步骤——

  1. 保存处理器的上下文,包括程序计数器(PC)和其它寄存器;保存内存镜像(页表信息)
  2. 用新状态和其它相关信息更新正在运行进程的PCB
  3. 把进程移至合适的队列-就绪或阻塞
  4. 选择另一个要执行的进程,更新进程的PCB
  5. 从被选中进程中重装入CPU上下文和内存镜像

CPU调度按调度层次的不同可以划分为三级——

  • 高级调度: 作业层面,即从用户工作流程的角度,对用户提交到每个作业进行调度,时间上通常是分钟、小时或天
  • 中级调度: 储存器资源层面,即将进程的部分或全部换出到外存上,将当前所需部分换入到内存
  • 低级调度: CPU资源层面,即对CPU计算资源(ALU等)进行分配,时间上通常是毫秒。

调度的策略

调度策略的度量指标

衡量调度策略时通常采用以下几个常用的度量指标——

  • 吞吐量: \(作业数/总执行时间\)
  • 周转时间: \(完成时间-提交时间\)
  • 带权周转时间: \(周转时间/服务时间(执行时间\)
  • 平均周转时间: \(一组作业周转时间之和/作业数\)
  • 平均带权周转时间: \(一组作业带权周转时间之和/作业数\)

调度策略的选择

根据进程对CPU计算资源和I/O设备的使用情况,我们可以将进程分为两种——I/O密集型CPU密集型。前者会频繁地进行I/O,通常会花费很多时间等待I/O操作完成,而计算时间相对I/O时间短;后者计算量大,进程会花费大量的时间在计算上。

对于不同特性的进程,我们通常会采用不同的调度算法。

根据 ”是否在时钟中断作出调度决策“,我们将进程的调度分为非抢占式和抢占式

  • 非抢占式: 被调度进程会一直执行直到阻塞或主动放弃CPU,时钟中断时不会做调度决策
  • 抢占式: 被调度程序运行一个固定的最大时间段(时间片),如果时间结束进程还在执行,挂起进程并进行切换(时钟中断时做调度决策)。

对于不同的应用领域,我们会采用不同的调度策略,而这些策略也都离不开非抢占式和抢占式两种基本算法。常见的应用领域包括批处理系统、交互式系统、实时系统、多处理系统

批处理系统

批处理是指用户将一批作业提交给操作系统后就不再干预。在批处理系统中,一个作业需要长时间的占用CPU,因此我们一般采用非抢占式算法或分配长时间周期的抢占算法

在策略选择时,我们主要关注吞吐量和周转时间这两个指标。常用策略——

  • 先来先服务(FCFS:First Come First Serve)
  • 最短作业优先(SJF:Shortest Job First)
  • 最短剩余时间优先(SRTN:Shortest Remaining Time Next)
  • 最高响应比优先(HRRN:Highest Response Ratio Next)

交互式系统

交互式计算机系统与操作人员以人机对话的方式一问一答,直至获得最后处理结果。这种系统服务于多个用户的环境,例如分时系统、手机系统,因此需要避免一个进程霸占CPU,一般使用抢占式算法

在策略选择时,我们主要关注响应时间这个指标,并希望任务花费时间随着其复杂度应该线性增长。常用策略——

  • 时间片轮转(RR:Round Robin)
  • 优先级调度(Priority Scheduling)
  • 多级队列(MQ:Multi-level Queue)
  • 多级反馈队列(MFQ:Multi-level Feedback Queue )
  • 彩票调度(Lottery Scheduling)

实时系统

实时系统是指计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间。如果不满足确定性的截止时间需求,将会发生系统出错。因此我们主要采用抢占式算法,也可能非抢占式

在策略选择时,我们主要关注 "截止时间是否可以得到满足",并希望策略有一定可预测性和规律性。常用策略——

  • 静态表调度(Static table-driven scheduling)
  • 单调速率调度(RMS:Rate Monotonic Scheduling)
  • 最早截止时间优先算法(EDF:Earliest Deadline First)

多处理系统

多处理系统指系统中有多个处理机同时进行工作,这种系统的调度更需要关注于系统整体的运行效率,调度单位广泛采用线程。

多处理系统有两种,包括非对称式多处理系统(AMP)对称式多处理系统(SMP)

  • AMP中各个处理器的地位不同,有“主从”之分——由主处理机管理一个公共就绪队列,并分派进程给从处理机执行,每个处理机都有固定的分工(执行OS的系统功能?处理I/O?)

  • SMP中各个处理器的地位是相同的。根据控制的方式的不同,SMP调度算法可分为集中控制和分散控制,前者主要包括静态分配(static assignment)动态分配(dynamic assignment),后者主要包括自调度(Self Scheduling)


文章作者: Hyggge
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Hyggge !
  目录