调度 (英語 えいご :Scheduling )在 ざい 计算机 つくえ 中 ちゅう 是 ぜ 分配 ぶんぱい 工作 こうさく 所 しょ 需资源 げん 的 てき 方法 ほうほう 。资源可 か 以指虚 きょ 拟的计算资源,如线程 、进程 或 ある 数 かず 据 すえ 流 りゅう ;也可以指硬 かた 件 けん 资源,如处理器 き 、网络连接或 ある 扩展卡 。
进行调度工作 こうさく 的 てき 程 ほど 序 じょ 叫 さけべ 做调度 ど 器 き 。调度器 き 通常 つうじょう 的 てき 实现使 し 得 とく 所有 しょゆう 计算资源都 と 处于忙 せわし 碌 ろく 状 じょう 态(在 ざい 负载均衡 きんこう 中 ちゅう ),允 まこと 许多位 い 用 よう 户有效 ゆうこう 地 ち 同 どう 时共享 とおる 系 けい 统资源 げん ,或 ある 达到指定 してい 的 てき 服 ふく 务质量 りょう 。调度是 ぜ 计算自身 じしん 的 てき 基 もと 础,同 どう 时也是 ぜ 编程语言 计算模型 もけい 固有 こゆう 的 てき 部分 ぶぶん 。调度器 き 使 し 得 え 在 ざい 单处理 り 器 き 上通 かみとおり 过多 た 任 にん 务处理 り ,从而让执行 ぎょう 多 た 个进程 ほど 成 なり 为可能 かのう 。
调度器 き 可能 かのう 会 かい 针对不同 ふどう 的 てき 目 め 标设计,例 れい 如:吞吐率 りつ 最大 さいだい 化 か 、响应时间最小 さいしょう 化 か 、最低 さいてい 延 のべ 迟[ 1] 、或 ある 最大 さいだい 化 か 公平 こうへい 。在 ざい 实践中 ちゅう ,这些目 め 标通常 つうじょう 是 ぜ 互相冲突的 てき ,因 いん 此,调度器 き 会 かい 实现一个权衡利弊的折中方案,而侧重点 じゅうてん 则可能 かのう 是 ぜ 前文 ぜんぶん 提 ひっさげ 到 いた 的 てき 任 にん 何 なん 一 いち 种,这取决于用 よう 户的需求和 わ 目的 もくてき 。
在 ざい 实时环境,例 れい 如工业上用 よう 于自动控制 せい (如机器 き 人 じん )的 てき 嵌入 かんにゅう 式 しき 系 けい 统 ,调度器 き 必须保 ほ 证进程 ほど 的 てき 调度不能 ふのう 超 ちょう 过最后 きさき 期限 きげん —— 这是保持 ほじ 系 けい 统稳定 てい 运行的 てき 关键因 いん 素 もと 。调度也可能 かのう 是 ぜ 通 どおり 过一个管理性的后端进行,而任务是通 どおり 过网络发配 はい 到 いた 若干 じゃっかん 远程设备上 じょう 的 てき 。
调度器 き 是 ぜ 操作 そうさ 系 けい 统的 てき 一 いち 个模块,它能够选择将被 ひ 系 けい 统处理 り 的 てき 下 か 一 いち 个任务,或 ある 执行的 てき 下 か 一 いち 个进程 ほど 。操作 そうさ 系 けい 统可能会 のうかい 提供 ていきょう 三种不同类型的调度器:长期调度器 き 、中期 ちゅうき 调度器 き 和 わ 短期 たんき 调度器 き 。这些名字 みょうじ 表明 ひょうめい 了 りょう 任 にん 务被执行的 てき 频率。
进程调度器 き 是 ぜ 操作 そうさ 系 けい 统的一 いち 部分 ぶぶん ,决定了 りょう 何 なん 时运行 ぎょう 什么进程。它通常 つうじょう 能 のう 够暂停一个运行中的进程,将 はた 它放回 かい 到 いた 运行队列当 とう 中 ちゅう ,并运行 ぎょう 一 いち 个新进程,我 わが 们把这样的 てき 调度器 き 叫 さけべ 做抢占 うらない 调度器 き 。否 いや 则,它就是 ぜ 协同调度器 き 。
长期调度器 き ,决定了 りょう 任 にん 务或进程是 ぜ 否 ひ 会 かい 被 ひ 就绪队列(内 うち 存 そん 中 ちゅう )所 しょ 接 せっ 纳。当 とう 一个运行程序的尝试被做出后,长期调度器 き 或 ある 允 まこと 许,或 ある 是延 これのぶ 迟将它作为当前 ぜん 执行的 てき 一 いち 个进程 ほど 。因 よし 此,这种调度器 き 掌 てのひら 控 ひかえ 着 ぎ 能 のう 在 ざい 系 けい 统上运行的 てき 进程。调度器 き 同 どう 时还决定并发的 てき 程度 ていど :同 どう 时执行程 こうてい 序 じょ 的 てき 多少 たしょう ,在 ざい I/O密集 みっしゅう 型 がた 和 わ CPU密集 みっしゅう 型 がた 进程之 の 前 ぜん 做出划分。
通常 つうじょう ,大 だい 多数 たすう 进程可 か 以分为I/O密集 みっしゅう 型 がた [ 2] 和 かず CPU密集 みっしゅう 型 がた 。I/O密集 みっしゅう 型 がた 程 ほど 序 じょ 将 はた 大 だい 多数 たすう 时间都 と 花 はな 在 ざい 了 りょう I/O操作 そうさ 而不是 ぜ 运算上 じょう ,而CPU密集 みっしゅう 型 がた 程 ほど 序 じょ 正 ただし 好 こう 相反 あいはん ,将 はた 大 だい 多数 たすう 时间花 はな 在 ざい 了 りょう 运算上 じょう ,而很少 しょう 产生I/O操作 そうさ 。选出一 いち 个I/O密集 みっしゅう 型 がた 和 わ CPU密集 みっしゅう 型 がた 程 ほど 序 じょ 的 てき 良好 りょうこう 组合,对于长期调度器 き 是非 ぜひ 常 つね 重要 じゅうよう 的 てき 。否 いや 则,假 かり 如所有 しょゆう 的 てき 程 ほど 序 じょ 都 と 是 ぜ CPU密集 みっしゅう 型 がた 的 てき ,那 な 么I/O队列将 しょう 会 かい 几乎永 なが 远都是 ぜ 空 そら 的 てき ,这样就会导致一些设备从来没被人用过,系 けい 统资源 げん 分配 ぶんぱい 就是不 ふ 均衡 きんこう 的 てき 。显然,性能 せいのう 极佳的 てき 系 けい 统必然 ひつぜん 是 ぜ CPU密集 みっしゅう 型 がた 和 わ I/O密集 みっしゅう 型 がた 程 ほど 序 じょ 的 てき 组合。在 ざい 现代操作 そうさ 系 けい 统中,这被用 よう 来 らい 保 ほ 证实时进程 ほど 能 のう 获得足 あし 够的CPU时间来 らい 完成 かんせい 任 にん 务。[ 3]
长期调度对大型 がた 系 けい 统,例 れい 如批处理系 けい 统、计算机 つくえ 集 しゅう 群 ぐん 、超 ちょう 级计算 さん 机 つくえ 和 わ 渲染场来说同样重要 じゅうよう 。例 れい 如,在 ざい 并发系 けい 统中,为了避免交互 こうご 的 てき 多 た 个进程 ほど ,把 わ 时间都 と 花 はな 在 ざい 等 とう 待 まち 对方而产生 せい 阻塞,通常 つうじょう 是 ぜ 需要 じゅよう 进行协同调度的 てき 。在 ざい 这种情 じょう 况下,处理操作 そうさ 系 けい 统底层的调度器 き 之 の 外 そと ,还需要 よう 符合 ふごう 要求 ようきゅう 的 てき 额外调度程 ほど 序 じょ 来 らい 实现必要 ひつよう 的 てき 功 こう 能 のう 。
中期 ちゅうき 调度器 き 临时将 はた 进程从内存 そん 中 ちゅう 去 さ 除 じょ ,放 ひ 入 にゅう 第 だい 二 に 储存设备(如硬 かた 盘 )中 ちゅう ,或 ある 亦 また 而反之 の 。这通常 つうじょう 被 ひ 称 しょう 为“换出”和 かず “换入”(同 どう 时也被 ひ 错误叫 さけべ 做“分 ぶん 页入”和 かず “分 ぶん 页出”)。中期 ちゅうき 调度器 き 可能 かのう 会 かい 将 はた 那 な 些一直不活跃的进程,优先级低的 てき 进程,频繁产生页错误 的 てき 进程,或 ある 者 もの 占 うらない 用 よう 大量 たいりょう 内 ない 存 そん 的 てき 进程放 ひ 入 いれ 交换区 く ,为其它程序 じょ 释放内 ない 存 そん 。当 とう 系 けい 统内存 そん 充足 じゅうそく 时,或 ある 者 もの 程 ほど 序 じょ 不 ふ 再 さい 处于阻塞状 じょう 态时,调度器 き 又 また 会 かい 将 はた 刚刚被 ひ 放 ひ 入交 いりまじり 换区中 ちゅう 的 てき 进程重 おも 新 しん 放 ひ 入内 じゅだい 存 そん 中 ちゅう 。
短期 たんき 调度器 き (也就是 ぜ CPU调度器 き )决定了 りょう 在 ざい 一 いち 个时钟中断 ちゅうだん 、I/O中断 ちゅうだん 、系 けい 统调用 よう 其它种类的 てき 信号 しんごう 之 の 后 きさき ,应该执行(分配 ぶんぱい CPU)给哪些内存 そん 中 ちゅう 的 てき 进程。可 か 见,短期 たんき 调度器 き 作出 さくしゅつ 决定的 てき 频率比 ひ 长期或 ある 中期 ちゅうき 调度器 き 更 さら 加 か 频繁 —— 每 ごと 隔 へだた 一段非常短的固定时间,调度器 き 就将做出一 いち 次 じ 决定。这种调度器 き 可 か 以是抢占式 しき 的 てき ,能 のう 够强行 きょうこう 把 わ 一 いち 个在CPU运行中 ちゅう 的 てき 程 ほど 序 じょ 中断 ちゅうだん ,然 しか 后 きさき 分配 ぶんぱい 给其它进程 ほど ;也可以是非 ぜひ 抢占式 しき 的 てき ,这类调度器 き 无法强行 きょうこう 把 わ 进程从CPU上 じょう 中断 ちゅうだん 。
抢占式 しき 调度器 き 的 てき 功 こう 能 のう 需要 じゅよう 一 いち 个运行 ぎょう 在 ざい 内 うち 核 かく 态 ,能 のう 被 ひ 中断 ちゅうだん 处理程 ほど 序 じょ 捕 と 获的可 か 编程定 てい 时器才能 さいのう 实现。
调度规则就是在 ざい 同 どう 时占用 よう 资源的 てき 多 おお 方 かた 之 の 间进行 ぎょう 资源分配 ぶんぱい 的 てき 算法 さんぽう 。在 ざい 路 みち 由 よし 器 き 、操作 そうさ 系 けい 统 、硬 かた 盘 、打 だ 印 しるし 机 つくえ ,大 だい 多数 たすう 嵌入 かんにゅう 式 しき 系 けい 统等 とう 设备中 ちゅう ,都 と 能 のう 看 み 到 いた 调度规则的 てき 应用。
调度算法 さんぽう 的 てき 主要 しゅよう 目 め 标,是 ぜ 使 し 资源饥饿最小 さいしょう 化 か ,并保证使用 しよう 资源多 おお 方 かた 的 てき 公平 こうへい 性 せい 。调度器 き 需要 じゅよう 处理在 ざい 大量 たいりょう 请求下 か 如何 いか 分配 ぶんぱい 资源的 てき 难题。调度算法 さんぽう 种类很多,在 ざい 这一 いち 章 しょう ,将 しょう 会 かい 介 かい 绍几种常见算法 ほう 。
在 ざい 封 ふう 包 つつみ 交换的 てき 计算机 つくえ 网络和 わ 其它统计多 た 路 ろ 复用领域,需要 じゅよう 一个合适的调度算法而不是一个先到先得的数据包队列。