当前位置: 首页 > news >正文

操作系统:操作系统的结构(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 直接访问硬件

  •  每一层都像一个“黑盒”,对上层隐藏实现细节

层次结构的优点: 

优点说明
模块化强每一层功能单一,界限清晰
易于调试和维护修改某一层时,不影响其他层
安全性高上层不能直接访问下层以下的内容
可扩展性好新功能可加到某一层,不影响整体结构

 缺点:

缺点说明
 实现难度高必须设计好各层之间的接口
 性能略低每一层都需经过调用,响应时间比 Monolithic 长
 层间强依赖一层出错可能导致上层全部失效

微内核结构(Microkernel)

 Microkernel(微内核) 是一种将操作系统核心(Kernel)功能精简到最小,只保留最基本服务(如进程通信、CPU调度、内存管理),其余服务全部移出内核,运行在用户空间 的操作系统结构。

Microkernel 的核心设计思想:

把非核心服务都移出内核,做“最小可运行内核”,提高系统安全性和稳定性。

icrokernel 内部和外部服务的分离

在内核中(核心功能)

在用户空间(外部服务)

 CPU 调度(进程切换)

 文件系统服务

 内存管理

 驱动程序(打印机、硬盘等)

 IPC(进程间通信)

 用户界面(GUI、命令行)

 系统调用接口

 网络协议、权限控制模块

🔄 微内核运行流程示意

┌────────────────────────────┐
│      应用程序(用户空间)     │ ← 用户程序 / 驱动 / 文件服务
├────────────────────────────┤
│ 微内核(Kernel Mode)       │ ← 只负责通信、调度、内存
├────────────────────────────┤
│       硬件(CPU, Memory)   │
└────────────────────────────┘

所有的外部服务(如文件管理、驱动)通过IPC(Inter-Process Communication,进程间通信)与内核交互。

实际例子:

  • MINIX(微型教学操作系统)

  • QNX(实时操作系统,广泛用于汽车、医疗设备)

  • macOS(部分使用微内核):其核心 XNU 结合了微内核和整体结构

  • L4、Symbian OS(早期手机系统)

微内核结构的优点:

优点说明
更安全外部服务运行在用户空间,出错不影响系统核心
更稳定内核非常小,bug 少、崩溃概率低
易于扩展和移植不同模块可独立开发、替换
模块化强每个功能像插件一样可卸载、重启

 缺点:

缺点说明
性能开销大内核与外部服务需频繁通信(IPC),速度慢于整体结构
实现复杂服务拆分、接口通信设计难度高
驱动开发难驱动在用户空间运行,调试较复杂

类比帮助理解:

 Monolithic(整体内核):

就像一个大型百货商场,所有服务都集中在一栋楼里,方便但一旦失火(系统崩溃),整栋楼就瘫了。

 Microkernel(微内核):

像一个分布式小镇,政府只负责调度交通和治安(调度 + 通信),其他功能(商店、医院、学校)都是独立运行的,哪个坏了不影响其他。


模块化结构(Modular Structure)

模块化结构是一种“整体式内核 + 模块化管理”的结构,内核支持将功能划分为多个独立的模块,这些模块可以在需要时动态加载或卸载,既保持了执行效率,又提高了灵活性与可维护性。

背景:为什么需要“模块化”?

在我们之前讲的 Monolithic Structure 中:

  • 所有功能(进程管理、文件系统、驱动程序)都写死在一个大内核里

  • 改一个模块,必须重新编译整个内核

  • 不方便扩展,也难调试

于是提出一种改进思路:

➕ 把内核划分为功能模块,可按需加载或卸载,不用重启系统、不用重编内核!

模块是怎么工作的?

  • 系统运行中,只有“需要的模块”才被加载进内核

  • 加载/卸载可以动态进行(无需重启)

  • 内核提供专门的命令或接口来管理模块(例如 Linux 的 insmodrmmod

类比:像一个智能手机系统,相机、GPS、蓝牙这些功能都是“插件”——用时开启,不用时关闭,省资源还不怕崩溃。

结构示意

┌────────────────────────────┐
│   用户程序(User Programs) │
├────────────────────────────┤
│     系统调用接口(Syscalls) 
├────────────────────────────┤
│ 模块化内核(Modular Kernel  │
│  ├─ 核心内核功能(调度、内存 │
│  ├─ 可加载模块(驱动、文件系统│
└────────────────────────────┘

内核模块的例子:

模块类型举例说明
驱动模块如鼠标驱动、声卡驱动、网卡驱动
文件系统模块如 ext4、NTFS、FAT32
网络协议模块TCP/IP、UDP、ICMP
安全模块防火墙、SELinux 模块等

实际例子:Linux 内核

  • Linux 是一个 Monolithic Kernel,但它的实现是模块化的

  • 它支持大量 Loadable Kernel Modules(LKM),包括:

    • 文件系统

    • 设备驱动

    • 网络协议

    • 系统监控插件

 模块化结构的优缺点:

优点说明
 高模块化各模块独立,界限清晰,便于维护
 易于扩展加载新模块无需改动核心内核
 易于测试与调试出问题只需卸载该模块,不影响内核整体
 性能优于 Microkernel各模块仍运行在内核态,无需频繁 IPC
缺点说明
 模块出错仍可能影响系统因为模块运行在内核态,仍有全局访问权限
 安全性不如微内核没有完全的隔离机制,模块崩溃可能拖垮系统
 相较于微内核,耦合仍较强核心仍比较大,非最小核心系统

类比帮助理解:

  • Monolithic Kernel:一个功能强大的“大仓库”,所有东西都装在一起

  • Modular Kernel:一个可以加挂插件的“模块化仓库”

  • Microkernel:一个超简仓库,其他功能都外包出去(不自己做)

操作系统结构对比总结 

特征/结构类型Simple Structure(简单结构)Monolithic Structure(整体结构)Layered Structure(层次结构)Microkernel(微内核)Modular Structure(模块化结构)
 核心设计思想没有明确分层,功能杂糅所有功能集中在一个大内核中操作系统功能划分为多个层次只保留最小内核,其它服务运行在用户空间内核功能模块化,按需加载/卸载
 模块划分清晰度❌ 极低⛔ 较差(全在一起)✅ 明确分层✅ 极高✅ 高(但仍属内核空间)
 运行效率✅ 高(简单无切换)✅ 很高(无需进程间通信) 较低(层层调用) 慢(IPC 通信频繁)✅ 高(可扩展又高效)
 安全性与稳定性❌ 极低⛔ 较低(一个模块崩溃拖全系统)✅ 较高(层隔离)✅ 极高(服务在用户空间)✅ 中等偏上
 易维护/易扩展❌ 差⛔ 差(耦合紧密)✅ 容易✅ 最容易✅ 非常方便
 开发难度✅ 简单✅ 一般⛔ 高(接口定义复杂)⛔ 高(服务分散、通信设计难)✅ 中等
 示例系统MS-DOS, CP/MUNIX, Linux (早期)THE OS, MULTICSMINIX, QNX, SymbianLinux(现代), Windows NT
 服务位置所有功能写死在系统中所有功能集中在内核分层管理,逐层调用内核只做调度+通信,其它功能外部运行核心功能 + 可加载模块
 内核大小(功能集中度)很大或无结构非常大中等极小(最小功能内核)中等

五种结构一图总结:

Simple        → 所有代码混在一起,没有分工
Monolithic    → 所有功能集中在一个内核程序里
Layered       → 功能按层级划分,每层只调用下层
Microkernel   → 只保留调度、通信,其它功能外包出去
Modular       → 核心内核 + 可加载模块(组合式结构)

使用场景建议(理解+选择):

需求场景推荐结构原因说明
小型嵌入式设备Microkernel / Modular更安全、更稳定、易于维护
教学 / 实验系统Simple / Layered结构易理解,适合演示系统原理
高性能服务器系统Modular / Monolithic性能要求高,模块化扩展能力强,响应快
商业桌面操作系统Hybrid / Modular灵活、安全与性能的平衡
实时系统(航天/汽车)Microkernel模块独立,崩溃不会影响核心系统,适合关键任务系统
http://www.dtcms.com/a/298534.html

相关文章:

  • AI面试与传统面试的核心差异解析——AI面试如何提升秋招效率?
  • RAG架构原理和LangChain方式实现RAG
  • 【正点原子K210连载】第二十一章 machine.UART类实验摘自【正点原子】DNK210使用指南-CanMV版指南
  • MyBatis-Plus 指南
  • 网络安全入门第一课:信息收集实战手册(3)
  • @ControllerAdvice相关知识点,和@Controller有什么区别
  • “八卦”简读
  • 手语式映射:Kinova Gen3 力控机械臂自适应控制的研究与应用
  • Python HTML模块详解:从基础到实战
  • 率先通过自动制冰性能认证,容声冰箱推动行业品质升级
  • TDengine 转化函数 TO_TIMESTAMP 用户手册
  • 原创-大型嵌入式软件架构设计指南:从理论到实践的完整方法论
  • WinUI3开发_过渡动画
  • 数据结构(3)单链表
  • 机器学习之knn算法保姆级教学
  • (三)Python基础入门-流程控制结构
  • 航段导航计算机 (Segment_Navigator) 设计与实现
  • 深入解析 ArkUI 触摸事件机制:从点击到滑动的开发全流程
  • 协作机器人掀起工厂革命:码垛场景如何用数据重塑制造业命脉?
  • SEO实战派白杨SEO:SEO中说的框计算、知心搜索(知识图谱)是什么?有什么用处?
  • SpringBoot配置外部Servlet
  • TQZC706开发板教程:创建PCIE项目
  • LoRA、ControlNet与T2I Adapter的区别
  • HTTP 请求方法有哪些?
  • 如何用豆包一键P图,一键生成装修图
  • Qt 与 C++11/14/17 新特性结合应用
  • 深入理解Linux底层文件操作:write、read、open、close、lseek和ioctl命令详解
  • OpenCV摄像头打开及预览
  • 告别文件传输焦虑,FileLink 让数据流转更简单
  • [MMU] Table walk flow详解