**调度**在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源，如线程、进程或数据流；也可以指硬件资源，如处理器、网络连接或扩展卡。

进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态（在负载均衡中），允许多位用户有效地同时共享系统资源，或达到指定的服务质量。调度是计算自身的基础，同时也是编程语言计算模型固有的部分。调度器使得在单处理器上通过多任务处理，从而让执行多个进程成为可能。

调度器可能会针对不同的目标设计，例如：吞吐率最大化、响应时间最小化、最低延迟、或最大化公平。在实践中，这些目标通常是互相冲突的，因此，调度器会实现一个权衡利弊的折中方案，而侧重点则可能是前文提到的任何一种，这取决于用户的需求和目的。

在实时环境，例如工业上用于自动控制（如机器人）的嵌入式系统，调度器必须保证进程的调度不能超过最后期限 —— 这是保持系统稳定运行的关键因素。调度也可能是通过一个管理性的后端进行，而任务是通过网络发配到若干远程设备上的。

操作系统调度器的种类
----------

调度器是操作系统的一个模块，它能够选择将被系统处理的下一个任务，或执行的下一个进程。操作系统可能会提供三种不同类型的调度器：长期调度器、中期调度器和短期调度器。这些名字表明了任务被执行的频率。

### 进程调度器

进程调度器是操作系统的一部分，决定了何时运行什么进程。它通常能够暂停一个运行中的进程，将它放回到运行队列当中，并运行一个新进程，我们把这样的调度器叫做抢占调度器。否则，它就是协同调度器。

#### 长期调度器

长期调度器，决定了任务或进程是否会被就绪队列（内存中）所接纳。当一个运行程序的尝试被做出后，长期调度器或允许，或是延迟将它作为当前执行的一个进程。因此，这种调度器掌控着能在系统上运行的进程。调度器同时还决定并发的程度：同时执行程序的多少，在I/O密集型和CPU密集型进程之前做出划分。

通常，大多数进程可以分为I/O密集型和CPU密集型。I/O密集型程序将大多数时间都花在了I/O操作而不是运算上，而CPU密集型程序正好相反，将大多数时间花在了运算上，而很少产生I/O操作。选出一个I/O密集型和CPU密集型程序的良好组合，对于长期调度器是非常重要的。否则，假如所有的程序都是CPU密集型的，那么I/O队列将会几乎永远都是空的，这样就会导致一些设备从来没被人用过，系统资源分配就是不均衡的。显然，性能极佳的系统必然是CPU密集型和I/O密集型程序的组合。在现代操作系统中，这被用来保证实时进程能获得足够的CPU时间来完成任务。

长期调度对大型系统，例如批处理系统、计算机集群、超级计算机和渲染场来说同样重要。例如，在并发系统中，为了避免交互的多个进程，把时间都花在等待对方而产生阻塞，通常是需要进行协同调度的。在这种情况下，处理操作系统底层的调度器之外，还需要符合要求的额外调度程序来实现必要的功能。

#### 中期调度器

  

中期调度器临时将进程从内存中去除，放入第二储存设备（如硬盘）中，或亦而反之。这通常被称为"换出"和"换入"（同时也被错误叫做"分页入"和"分页出"）。中期调度器可能会将那些一直不活跃的进程，优先级低的进程，频繁产生页错误的进程，或者占用大量内存的进程放入交换区，为其它程序释放内存。当系统内存充足时，或者程序不再处于阻塞状态时，调度器又会将刚刚被放入交换区中的进程重新放入内存中。

#### 短期调度器

短期调度器（也就是CPU调度器）决定了在一个时钟中断、I/O中断、系统调用其它种类的信号之后，应该执行（分配CPU）给哪些内存中的进程。可见，短期调度器作出决定的频率比长期或中期调度器更加频繁 —— 每隔一段非常短的固定时间，调度器就将做出一次决定。这种调度器可以是抢占式的，能够强行把一个在CPU运行中的程序中断，然后分配给其它进程；也可以是非抢占式的，这类调度器无法强行把进程从CPU上中断。

抢占式调度器的功能需要一个运行在内核态，能被中断处理程序捕获的可编程定时器才能实现。

调度规则
----

调度规则就是在同时占用资源的多方之间进行资源分配的算法。在路由器、操作系统、硬盘、打印机，大多数嵌入式系统等设备中，都能看到调度规则的应用。

调度算法的主要目标，是使资源饥饿最小化，并保证使用资源多方的公平性。调度器需要处理在大量请求下如何分配资源的难题。调度算法种类很多，在这一章，将会介绍几种常见算法。

在封包交换的计算机网络和其它统计多路复用领域，需要一个合适的调度算法而不是一个先到先得的数据包队列。

参考来源
----

1. ↑  Remzi H. Arpaci-Dusseau; Andrea C. Arpaci-Dusseau..  (PDF). January 4, 2015: 6  [February 2, 2015]. （原始内容 (PDF)存档于2018-10-13）.
2. ↑  Priya Ranjan..  [2014-08-09]. （原始内容存档于2014-09-28）.
3. ↑  Abraham Silberschatz, Peter Baer Galvin and Greg Gagne.  **9**. John Wiley & Sons,Inc. 2013. ISBN 978-1-118-06333-0.

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
操作系统 |
| --- |
|  |
| 概述 | 
* 宣传（英语：）
* 比较（英语：）
* 鑑識软件工程（英语：）
* 历史
* 爱好者开发（英语：）
* 列表
* 年表
* 份额

 |
|  |
| 内核 | 

|  |  |
| --- | --- |
| 系统结构 | 
* Exokernel
* 混合
* 微內核
* 整塊性核心
* 尾闾内核（英语：）
* 单一内核

 |
|  |
| 组件 | 
* 驱动程序
* 可載入核心模組
* 微內核
* 使用者空間

 |

 |
|  |
| 行程管理 | 

|  |  |
| --- | --- |
| 概念 | 
* 上下文交換
* 中斷
* 行程間通訊
* 行程
* 行程控制表
* 实时操作系统
* 线程
* 分時系統

 |
|  |
| 调度算法 | 
* 多任务处理
* 固定优先级抢占（英语：）
* 多级反馈队列（英语：）
* 抢占式多任务处理
* 循環制
* 短进程优先

 |

 |
|  |
| 記憶體管理和資源保护 | 
* 总线错误
* 一般保护错误
* 記憶體保護
* 分頁
* 分级保护域
* 記憶體區段錯誤
* 虚拟内存

 |
|  |
| 存储访问和文件系统 | 
* 啟動程式
* 碎片整理（英语：）
* 设备文件（英语：）
* 文件属性
* Inode
* 日志
* 分区
* 虛擬檔案系統
* 虚拟磁带库（英语：）

 |
|  |
| 操作系统列表 | 
* AmigaOS
* Android
* BeOS
* BSD
* ChromeOS
* CP/M
* DOS
* GNU
* Haiku
* 鸿蒙
* Illumos
* iOS
* Linux
* Macintosh
	+ Classic Mac OS
	+ MacOS
* MINIX
* MorphOS（英语：）
* MUSIC/SP（英语：）
* NOS（英语：）
* NGB TVOS
* OpenVMS
* ORVYL（英语：）
* OS/2
* OSv（英语：）
* Pick（英语：）
* QNX
* ReactOS
* RISC OS
* RSTS/E（英语：）
* RSX-11
* RT-11（英语：）
* Solaris
* TOPS-10/TOPS-20（英语：）
* TPF（英语：）
* tvOS
* UNIX
* UOS
* Visi On（英语：）
* VM/CMS（英语：）
* VS/9（英语：）
* Microsoft Windows
* Xinu（英语：）
* z/OS
* watchOS

 |
|  |
| 其他概念 | 
* 应用程序接口（API）
* 计算机网络
* 硬體抽象層（HAL）
* Live CD
* Live USB
* 殼層（OS Shell）
	+ 命令行界面（CLI）
	+ 图形用户界面（GUI）
	+ TUI（英语：）
	+ VUI（英语：）
* 预启动执行环境

 |

 |

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
软件设计模式 |
| --- |
|  |
| 设计模式 | 

|  |  |
| --- | --- |
| 创建型 | 
* 抽象工厂
* 生成器
* 工厂方法
* 惰性初始
* 原型
* 单例

 |
|  |
| 结构型 | 
* 适配器
* 桥接
* Composite（英语：）
* 修饰
* 外观
* 享元
* 代理

 |
|  |
| 行为型 | 
* 责任链
* 命令
* Interpreter（英语：）
* 迭代器
* 中介者
* Memento（英语：）
* 观察者
* Specification（英语：）
* State（英语：）
* 策略
* 模板方法
* 访问者

 |

 |
|  |
| 并行模式 | 
* 主动对象（英语：）
* 阻止（英语：）
* Binding properties（英语：）
* 双重检查锁定模式
* 异步方法调用
* Future与promise
* Guarded suspension（英语：）
* Join（英语：）
* 锁
* Messaging（英语：）
* 监视器
* Proactor（英语：）
* 反应器
* 读写锁
* 调度
* 线程池
* 线程局部存储

 |
|  |
| 架构模式 | 
* ADR（英语：）
* Broker（英语：）
* 主從式架構
* CBD
* DAO
* 主动记录
* 数据映射器
* DDD
* Data transfer object（英语：）
* Front controller（英语：）
* Identity map（英语：）
* Interceptor（英语：）
* 控制反转
* MVC
* 微服務
* MVP
* 單體式應用程式
* 多层架构
* Naked objects（英语：）
* P2P
* 发布/订阅
* REST
* SOA
* Specification（英语：）

 |
|  |
| 云分布式 | 
* 断路器
* CQRS（英语：）
* 补偿交易（英语：）
* 索引表
* 领导者选举（英语：）
* MapReduce
* 物化视图（英语：）
* 管道
* 过滤器（英语：）
* 发布/订阅
* 分片（英语：）
* 节流（英语：）

 |
|  |
| 其他模式 | 
* Blackboard（英语：）
* Business delegate（英语：）
* Composite entity（英语：）
* 委托
* 依赖注入
* Intercepting filter（英语：）
* 惰性載入
* Method chaining（英语：）
* 模拟对象
* 空对象
* 对象池
* Servant（英语：）
* Twin（英语：）
* Type tunnel（英语：）

 |
|  |
| 书籍 | 
* 设计模式：可复用面向对象软件的基础
* 代碼大全
* 企业集成模式（英语：）

 |
|  |
| 人物 | 
* 克里斯托佛·亚历山大
* 埃里希·伽瑪
* Ralph Johnson（英语：）
* John Vlissides（英语：）
* 葛來迪·布區
* 肯特·貝克
* 沃德·坎宁安
* 马丁·福勒
* Robert Martin（英语：）
* Jim Coplien（英语：）
* Douglas Schmidt（英语：）
* Linda Rising

 |
|  |
| 社区 | 
* The Hillside Group（英语：）
* The Portland Pattern Repository（英语：）

 |

 |