> 技术文档 > 操作系统:设计与实现(Operating System Design & Implementation)

操作系统:设计与实现(Operating System Design & Implementation)

目录

设计目标(Design Goals)

设计需求(Requirements)

策略机制(Mechanisms vs. Policies)

什么是机制(Mechanism)?

什么是策略(Policy)?

🚗 类比讲解:以“汽车”为例

操作系统中的应用举例:

操作系统的实现( Operating System Implementation)


设计一个操作系统,就是规划、实现并管理一整套让计算机运行起来的机制。它要确保计算机系统既能完成任务,又安全、高效、可靠地服务用户。

设计目标(Design Goals)

设计操作系统时,首先要回答一个根本问题:

❓“我们要设计的系统到底是个什么样子?”

这看起来简单,但其实是整个操作系统设计中最重要的第一步。

第一个问题:定义目标与规格(Defining Goals & Specification)

设计者必须先确定操作系统将用于什么样的场景。这就包括两个关键考虑:

1️⃣ 选择硬件(Choice of Hardware)

不同的硬件平台需要不同的操作系统设计。
例如:

  • 嵌入式设备(如智能手表) vs. 台式电脑

  • 单核 CPU vs. 多核服务器

  • 没有图形显示 vs. 需要 GUI 图形界面

你不能用运行 Windows 的方式去设计路由器里的操作系统。

2️⃣ 选择系统类型(Type of System)

系统类型也会影响设计:

  • 单用户 vs. 多用户

  • 单任务 vs. 多任务

  • 实时系统(Real-Time OS)

  • 网络操作系统(支持远程通信)

  • 嵌入式操作系统(功能受限,但需高效)

举例:设计给航空导航设备使用的操作系统,必须“实时响应”,这比设计桌面系统更严格。

当硬件和系统类型确定后,设计者面临的挑战才刚刚开始,因为:

高层次设计目标可以清楚说明,但具体需求往往很难完全预料。

例如:

  • 用户对“响应快”的期望到底多快才算快?

  • 什么程度的安全性是“足够安全”?

  • 系统能承受多高的负载才算“可扩展”?

这就需要权衡——性能、安全性、用户体验往往不能同时最大化。

设计需求(Requirements)

操作系统的设计目标通常分为两大类:

1️⃣ User Goals(用户目标)

操作系统必须为用户提供什么?

  •  易用性(Ease of Use):界面友好、命令易懂

  •  响应迅速(Fast Response Time)

  •  安全性高(Security)

  •  灵活适配不同需求:程序运行、文件处理、游戏、开发等

 用户不在乎技术实现,只关心“好不好用”。

2️⃣ System Goals(系统目标)

操作系统自身在管理资源时追求什么?

  •  高效率(Efficiency):尽可能减少资源浪费

  •  可扩展性(Scalability):用户多了、程序多了也能稳定运行

  •  可维护性(Maintainability):程序员能持续维护、更新

  •  稳定可靠(Robustness):不能一崩就死机,容错强

 系统目标更多是面向“系统设计者”与“后台管理者”的角度。


策略与机制(Mechanisms vs. Policies)

在设计操作系统时,我们经常要回答两个层次的问题:

问题类型 问题本质 举例  Policy(策略) 做什么? 哪个进程先使用 CPU?  Mechanism(机制) 怎么做? 操作系统如何切换进程?

什么是机制(Mechanism)?

机制 = 技术手段、工具本身

是操作系统提供的具体操作方法或功能模块。
比如说:

  • 如何中断一个正在运行的进程?

  • 如何实现内存的分配与回收?

  • 如何调度设备访问?

 它解决的是:“我们是否能够实现某种行为”。

什么是策略(Policy)?

策略 = 行为的选择规则

是对“使用什么规则来安排资源和行为”的决策问题。

比如说:

  • 哪个进程应该先运行?哪个晚点运行?

  • 哪些用户能访问这个文件?

  • 哪些数据应该保存在缓存中?

它解决的是:“我们该选择做什么”。

为什么要分开机制与策略? 

操作系统设计中的一个核心原则是:将策略与机制分离(Separation of Policy and Mechanism)

原因非常现实:

✔️ 灵活性更高:

机制是固定的底层实现,而策略可能会根据场景、用户需求不断变化。

例子:

  • 你可以更换“调度策略”来让系统更适合服务器、或更适合桌面使用。

  • 机制不变,只换策略,就能应对不同需求。

✔️ 更容易维护与升级:

策略变了,不需要改机制,结构更清晰,耦合更低。

 

🚗 类比讲解:以“汽车”为例

现在,我们用一个通俗易懂的现实类比来说明两者的区别:

 你开车:

  • 机制 Mechanism:油门、刹车、方向盘、档位……这些是汽车提供的“工具”和“功能”。

  • 策略 Policy:你决定在什么时机加速、减速、转弯,甚至走哪条路线。

项目 类比操作系统 油门 / 刹车 / 方向盘 系统机制(Mechanism) “在转弯前减速” / “选择高速还是国道” 策略(Policy)

 

操作系统中的应用举例:

场景 策略(Policy) 机制(Mechanism) 进程调度 选择哪个进程先运行(如先来先服务、优先级调度) 保存/恢复进程上下文,切换 CPU 内存管理 哪些页面换出、保留?(如 LRU、FIFO) 页面换入换出、页表更新等功能 安全控制 谁能访问哪些资源? 检查权限、拒绝访问等功能实现

操作系统的实现( Operating System Implementation)

设计一个操作系统就像画一张图纸,而实现(Implementation)就是把图纸真正变成能运行的系统——即写代码、编译、测试、部署!

操作系统的实现过程

设计之后,开发者要根据设计思路,把操作系统的功能一个一个写出来:

涉及内容包括:

  • 管理 CPU:比如实现进程切换机制

  • 管理内存:比如内存分配、分页机制

  • 文件系统:创建、打开、写入、删除文件的代码

  • 驱动程序:控制键盘、硬盘、显示器等设备

  • 用户接口:提供图形或命令行交互界面

 简单说,每一个你能操作的“功能”,都是背后程序员写出来的系统代码的效果。

传统实现方式:汇编语言(Assembly Language)

在早期计算机时代:

  • 操作系统都是用汇编语言(Assembly)写的;

  • 汇编语言非常接近机器代码,运行速度快,控制精细;

  • 但也非常复杂、难读、难维护,不适合写大型系统。

类比:用拼图画一幅画,很精细但很耗时间。

现代实现方式:高级语言(High-Level Languages)

现在的操作系统,通常用 高级语言(High-Level Language)来实现,尤其是:

C 和 C++

  •  C 语言:靠近硬件、性能好,控制力强 → 是最主流的选择

  •  C++:支持面向对象、结构更清晰,部分系统模块使用

 为什么用 C / C++?

优势 说明  易读性高 程序员更容易理解和维护代码  抽象能力强 可以用函数、结构体、类等构建复杂逻辑  性能接近汇编 编译后运行效率高,适合写底层系统  可移植性好 同一套代码可以移植到不同硬件平台上运行(只需改一小部分) 操作系统 实现语言 UNIX 最初大部分用 C 写的 Linux 主要用 C(少量汇编) Windows NT C + C++ + 少量汇编 macOS / iOS 核心(XNU) C + C++ + Objective-C