操作系统 ch5 cpu调度 CPU Scheduling

基本概念

采用多道程序设计,多个进程同时处于内存中。当一个进程必须等待时,os将CPU给其他进程。

CPU-I/O 区间周期 Burst Cycle

cpu-io burst cycle包含:

  1. CPU执行
  2. IO等待
    image

When a process begins an I/O burst, another process can use the CPU for a CPU burst。

CPU调度程序 CPU scheduler

CPU空闲时,OS通过CPU scheduler在ready queue中选择一个进程执行。

CPU调度时机

image

  1. A process switches from the running state to the waiting state (e.g., doing for I/O)
  2. A process switches from the running state to the ready state (e.g., an interrupt occurs)
  3. A process switches from the waiting state to the ready state (e.g., I/O completion)
  4. A process terminates

Preemptive、Non-preemptive(抢占式、非抢占式调度方案)

Non-preemptive:一个进程执行后,不会被优先级更高的进程打断。

分派程序 Dispatcher

将 CPU 的控制交给被短期调度程序选择的进程。
功能包括:

  • 上下文切换
  • 切换到用户态
  • 跳转至用户程序合适位置(PC 寄存器所指示的位置)以重新启动程序

分派延迟(Dispatcher latency)分派程序停止一个进程而启动另一个进程所花的时间。

Scheduling Criteria 调度准则

CPU utilization (CPU利用率 ↑

使 CPU 尽可能的忙。
CPU utilization ranges from 0 to 100 percent. Normally 40% is lightly loaded(轻负荷) and 90% or higher is heavily loaded(重负荷).

Throughput (吞吐量 ↑

每单位时间处理的进程。
However, for long processes, this rate may be one job per hour, and, for short jobs, this rate may be 10 per minute.

Turnaround time (周转时间 ↓

从进程提交到完成的时间。
是所有时间的和:

  1. waiting time before entering the system
  2. waiting time in the ready queue
  3. waiting time in all other events (e.g., I/O)
  4. time the process actually running on the CPU

Waiting time等待时间 ↓

在就绪队列中等待所花费时间之和。会被 CPU 调度算法影响。

Response time ↓

提交请求到第一次响应的时间。

调度算法 Scheduling Algorithms

先到先服务调度 First-Come, First-Served (FCFS)

The process that requests the CPU first is allocated the CPU first. 先到先服务,非抢占式

question

convoy effect(护航效应):
所有进程等待一个大进程去释放CPU,CPU 和设备的利用率很低。

最短作业优先调度 Shortest-Job-First (SJF)

当要从就绪队列中选择进程时,选择 CPU 区间最短的进程。有抢占式、非抢占式两种。抢占式当有新进程进入时从就绪队列中选择进程;非抢占式当一个进程执行完毕时从就绪队列中选择进程。SJF算法是最佳的。但也存在一些问题。

问题1:如何知道下一个 CPU 区间长度

无法得知,只能预测CPU区间长度,不能确切知道。
预测方法:
image

问题2:饥饿starvation

SJF 优先选择短作业,结果长作业无法被执行。

优先级调度 Priority scheduling

优先选择高优先级进程去执行。有抢占式、非抢占式。
也会有饥饿现象

老化 aging 克服饥饿现象

逐渐增加在系统中等待时间很长的进程的优先级。

轮转法调度 Round-Robin

每个进程有一个time quantum(时间片),进程在ready queue里先入先出。一个进程最多运行一个时间片的时间,然后移到最后。是可抢占的。

  1. 时间片过长,reduces to FCFS
  2. 过短,变成了处理器共享 备注-processor sharing,上下文切换频繁,影响性能

In general, 80% of the CPU bursts should be shorter than the time quantum。

多级队列调度 Multilevel Queue

将就绪队列划分成多个独立队列,每个队列有自己的调度算法。进程根据自身属性被永久分配到对应的一个队列。队列之间有如下两种方法调度。

固定优先级抢占调度 (fixed-priority preemptive scheduling)

每个队列相比更低层队列有绝对的优先级。对于一个队列,只有高层队列都为空时该队列内进程才可运行;如果有新进程进入高层队列则 CPU 会被抢占。[通常采用]
image

时间片

在队列间划分 time-slice – 每个队列有固定的 CPU 时间(每个队列的 cpu 时间可以不相等),在自己的 CPU 时间内可调度队列内进程。

多级反馈队列调度 Multilevel Feedback Queue

对比多级队列调度–允许进程在队列之间移动,开销更大,更灵活。
如果进程使用过多 CPU 时间则转移到更低队列,在低优先级队列中等待时间过长的进程可被转移到高低优先级队列(aging 的一种形式)。
可由以下参数定义:

  1. 用于确定进程需要服务时应进入哪个队列的方法。
  2. 队列数量;
  3. 每个队列的调度算法;
  4. 用于确定何时升级到更高优先级队列的方法;
  5. 用于确定何时降级到更低优先级队列的方法;

多处理器调度 Multiple-Processor Scheduling

方法

非对称多处理 asymmetric multiprocessing

让一个处理器(主服务器)处理所有的调度决定、I/O 处理及其他系统活动。其他处理器只执行用户代码。减轻了数据共享的需要。

对称多处理 symmetric multiprocessing SMP

每个处理器自我调度。

处理器亲和性 affinity

努力让一个进程在同一个处理器上运行。

负载平衡 load balancing

负载平衡试图将工作负荷平均分配到所有处理器上。

超线程技术 hyperthreading

又名对称多线程 SMT。在一个物理处理器上生成多个逻辑处理器来实现同时运行几个线程。

posted @ 2022-05-11 14:42  流云轻响  阅读(124)  评论(0)    收藏  举报