操作系统:操作系统的结构(Structures of Operating System)
目录
简单结构(Simple Structure)
整体式结构(Monolithic Structure)
什么是 Kernel(内核)?
层次结构(Layered Structure)
微内核结构(Microkernel)
模块化结构(Modular Structure)
操作系统结构对比总结
我们现在来讲讲操作系统的结构(Structures of Operating System),从最基础的 “Simple Structure(简单结构)” 开始,为你打下理解现代操作系统结构的基础。
操作系统结构是指:操作系统内部不同模块、不同程序之间的组织方式和层级安排。
简单结构(Simple Structure)
这是最基础、最早期的操作系统结构形式,没有严格的层级划分,通常直接堆叠使用一些核心模块。
组成部分说明:
1️⃣ ROM BIOS Device Drivers(只读内存中的基本设备驱动)
这部分代码存储在主板的 ROM(Read-Only Memory)中,在电脑刚开机时首先运行。
-
BIOS(Basic Input/Output System):
是最基础的硬件控制程序,用于识别和启动 CPU、内存、硬盘、键盘等设备。 -
含有最底层的 驱动程序(device drivers),比如控制键盘、显示器、硬盘启动等。
类比:它就像电脑的“点火钥匙”与“初始控制中心”。
2️⃣ Device Drivers(设备驱动)
驱动程序是用来控制具体硬件设备的软件模块:
-
控制打印机、鼠标、摄像头、网卡等
-
每个设备都需要一个对应的驱动程序
-
驱动程序是操作系统与硬件之间的桥梁
类比:就像你手机上的蓝牙耳机 App,它让系统可以和耳机通信。
3️⃣ Resident System Programs(常驻系统程序)
这类程序一直驻留在内存中,提供一些基础服务:
-
文件管理(复制/粘贴文件)
-
内存调度
-
I/O 操作管理
-
进程创建与切换等
这些程序构成了操作系统的“主心骨”,负责协调各类资源。
类比:相当于物业管理员,帮助你调度资源、响应事件。
4️⃣ Application Programs(应用程序)
最上层的就是用户直接使用的程序,例如:
-
浏览器、记事本、视频播放器
-
Word、Excel、Photoshop
-
游戏、编辑器等
这些程序依赖下方的系统服务来运行,但本身不属于操作系统核心部分。
类比:是住在大楼里的“用户”,使用操作系统提供的“电、水、暖”等基础服务。
在这种结构:每一层依赖下一层,下一层为上一层提供服务。
虽然结构简单,但这种方式存在严重的问题:
1. 没有模块化(No Clear Separation)
-
各层之间的代码往往混杂在一起
-
比如应用程序可能直接调用硬件指令(不安全)
-
很难在不影响整个系统的情况下修改某一部分
类比:就像一栋没有分区的房子,改一堵墙可能把整个屋顶搞垮。
2. 难以维护与升级
-
如果驱动程序有 bug,可能直接影响整个系统运行
-
增加新功能要改动多个部分,容易出错
-
稍有修改,就可能影响整个系统稳定性
3. 安全性差
-
所有程序运行在同一个级别,没有权限隔离
-
应用程序可以直接操作硬件资源,容易造成破坏或被攻击
类比:任何人都可以开车进银行金库,没有门禁控制。
4. 不适合复杂系统
-
随着功能增多,代码膨胀,系统会变得非常臃肿
-
无法有效支持多用户、多任务等复杂需求
-
结构太“扁平”,功能太“集中”,容易崩溃
整体式结构(Monolithic Structure)
Monolithic Structure(整体式结构) 是一种将操作系统的所有核心功能写在一个统一的大模块(kernel)中的结构方式。所有服务(调度、内存、文件、驱动等)都运行在同一个空间、一个内核程序中。
为什么叫“Monolithic”?
“Monolithic” 的字面意思是“单块的”、“整体的”。
这就像一块大石头,把所有功能(进程管理、内存管理、设备驱动、文件系统等)都包在一起做成一个大内核:
整体式结构的特点:
1. 所有核心服务都运行在内核态(Kernel Mode)
-
内核是一个单独的大程序
-
不划分模块运行层级
-
不同功能之间可以直接调用和通信
举例:内存管理模块可以直接调用文件系统、调度器、设备驱动等。
2. 使用 System Call(系统调用)作为用户与内核之间的接口
-
用户程序无法直接操作硬件
-
但可以通过系统调用(如
read()
,write()
,fork()
)来请求服务 -
系统调用进入内核,由对应模块处理请求
实际例子:
-
UNIX 是最典型的 Monolithic Structure 操作系统
-
Linux 也是整体结构的一个“模块化变种”(Modular Monolithic)
Monolithic 的缺点:
就像一台“功能超级齐全”的机器,但所有零件都焊死在一起,一个齿轮坏了整台机器都停工。
什么是 Kernel(内核)?
Kernel(内核) 是操作系统中最核心的部分,负责直接管理CPU、内存、文件、设备等系统资源,是用户程序和硬件之间的中介和控制中心。
Kernel 是操作系统的“大脑”
你可以把操作系统想象成一个公司,而内核就是这个公司的总经理办公室:
-
程序 = 员工
-
硬件 = 工具资源
-
内核 = 总调度中心,谁做什么、何时做、用哪些资源,全都它说了算!
Kernel 与用户程序的关系
用户程序(浏览器、游戏等)不能直接操作硬件,必须通过内核来“委托”:
应用程序 ↓ 请求服务系统调用接口 ↓操作系统内核(Kernel) ← 控制 → 硬件设备(CPU、内存等)
Kernel 运行在 特权模式(Kernel Mode)
现代计算机有两种工作模式:Kernel Mode(内核态)和 User Mode(用户态)
这部分内容不再详细介绍,不懂的可以参考:操作系统:系统调用(System Calls)-CSDN博客
层次结构(Layered Structure)
Layered Structure(分层结构) 是把操作系统按照功能模块分成多个“层”,每一层只依赖于它的下一层,像洋葱一样一圈套一圈,结构清晰,便于设计、维护与修改。
为什么提出“层次结构”?
还记得我们讲过:
-
简单结构:代码杂乱、模块无边界、难维护
-
整体式结构:虽然集中,但模块之间依然紧耦合,修改麻烦
于是,人们提出一种更有条理性的方案:
✨ 把操作系统按职责分层,让每一层只做自己该做的事,不能“越权”访问更底层或更高层的内容。
层次结构的基本思路:
-
最底层 → 与硬件最接近(如 CPU、内存)
-
中间层 → 提供核心系统功能(如进程、文件)
-
上层 → 与用户交互(如命令行界面、应用程序)
常见分层结构(示意):
┌────────────────────────────┐│ Layer 6: User Programs │ ← 用户应用,最上层├────────────────────────────┤│ Layer 5: System Calls / API│ ← 提供用户调用接口├────────────────────────────┤│ Layer 4: I/O Management │ ← 输入输出、缓冲、打印等├────────────────────────────┤│ Layer 3: Memory Management │ ← 内存分配、分页、回收├────────────────────────────┤│ Layer 2: Process Management │ ← CPU调度、进程控制├────────────────────────────┤│ Layer 1: Device Drivers │ ← 控制硬件设备├────────────────────────────┤│ Layer 0: Hardware │ ← 最底层,物理硬件└────────────────────────────┘
每一层都只使用「下一层提供的功能」
-
Layer 5 调用 Layer 4 提供的服务
-
Layer 2 不能跳过 Layer 1 直接访问硬件
-
每一层都像一个“黑盒”,对上层隐藏实现细节
层次结构的优点:
缺点:
微内核结构(Microkernel)
Microkernel(微内核) 是一种将操作系统核心(Kernel)功能精简到最小,只保留最基本服务(如进程通信、CPU调度、内存管理),其余服务全部移出内核,运行在用户空间 的操作系统结构。
Microkernel 的核心设计思想:
把非核心服务都移出内核,做“最小可运行内核”,提高系统安全性和稳定性。
icrokernel 内部和外部服务的分离
在内核中(核心功能)
在用户空间(外部服务)
CPU 调度(进程切换)
文件系统服务
内存管理
驱动程序(打印机、硬盘等)
IPC(进程间通信)
用户界面(GUI、命令行)
系统调用接口
网络协议、权限控制模块
🔄 微内核运行流程示意
┌────────────────────────────┐│ 应用程序(用户空间) │ ← 用户程序 / 驱动 / 文件服务├────────────────────────────┤│ 微内核(Kernel Mode) │ ← 只负责通信、调度、内存├────────────────────────────┤│ 硬件(CPU, Memory) │└────────────────────────────┘
所有的外部服务(如文件管理、驱动)通过IPC(Inter-Process Communication,进程间通信)与内核交互。
实际例子:
-
MINIX(微型教学操作系统)
-
QNX(实时操作系统,广泛用于汽车、医疗设备)
-
macOS(部分使用微内核):其核心 XNU 结合了微内核和整体结构
-
L4、Symbian OS(早期手机系统)
微内核结构的优点:
缺点:
类比帮助理解:
Monolithic(整体内核):
就像一个大型百货商场,所有服务都集中在一栋楼里,方便但一旦失火(系统崩溃),整栋楼就瘫了。
Microkernel(微内核):
像一个分布式小镇,政府只负责调度交通和治安(调度 + 通信),其他功能(商店、医院、学校)都是独立运行的,哪个坏了不影响其他。
模块化结构(Modular Structure)
模块化结构是一种“整体式内核 + 模块化管理”的结构,内核支持将功能划分为多个独立的模块,这些模块可以在需要时动态加载或卸载,既保持了执行效率,又提高了灵活性与可维护性。
背景:为什么需要“模块化”?
在我们之前讲的 Monolithic Structure 中:
-
所有功能(进程管理、文件系统、驱动程序)都写死在一个大内核里
-
改一个模块,必须重新编译整个内核
-
不方便扩展,也难调试
于是提出一种改进思路:
➕ 把内核划分为功能模块,可按需加载或卸载,不用重启系统、不用重编内核!
模块是怎么工作的?
-
系统运行中,只有“需要的模块”才被加载进内核
-
加载/卸载可以动态进行(无需重启)
-
内核提供专门的命令或接口来管理模块(例如 Linux 的
insmod
、rmmod
)
类比:像一个智能手机系统,相机、GPS、蓝牙这些功能都是“插件”——用时开启,不用时关闭,省资源还不怕崩溃。
结构示意
┌────────────────────────────┐│ 用户程序(User Programs) │├────────────────────────────┤│ 系统调用接口(Syscalls) ├────────────────────────────┤│ 模块化内核(Modular Kernel ││ ├─ 核心内核功能(调度、内存 ││ ├─ 可加载模块(驱动、文件系统│└────────────────────────────┘
内核模块的例子:
实际例子:Linux 内核
-
Linux 是一个 Monolithic Kernel,但它的实现是模块化的
-
它支持大量 Loadable Kernel Modules(LKM),包括:
-
文件系统
-
设备驱动
-
网络协议
-
系统监控插件
-
模块化结构的优缺点:
类比帮助理解:
-
Monolithic Kernel:一个功能强大的“大仓库”,所有东西都装在一起
-
Modular Kernel:一个可以加挂插件的“模块化仓库”
-
Microkernel:一个超简仓库,其他功能都外包出去(不自己做)
操作系统结构对比总结
五种结构一图总结:
Simple → 所有代码混在一起,没有分工Monolithic → 所有功能集中在一个内核程序里Layered → 功能按层级划分,每层只调用下层Microkernel → 只保留调度、通信,其它功能外包出去Modular → 核心内核 + 可加载模块(组合式结构)
使用场景建议(理解+选择):