目录

简单结构(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.pswp.cn/diannao/92783.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92783.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/92783.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python柱状图

1.各国GDP柱状图2.各国GDP时间线柱状图

FastGPT:企业级智能问答系统,让知识库触手可及

在信息爆炸的时代,企业如何高效管理和利用海量知识?传统搜索和文档库已难以满足需求。FastGPT正成为企业构建智能知识核心的首选。一、FastGPT:不止于问答的智能知识引擎FastGPT 颠覆了传统知识库的局限,其核心优势在于&#xff1…

探索 MyBatis-Plus

引言在当今的 Java 开发领域,数据库操作是一个至关重要的环节。MyBatis 作为一款优秀的持久层框架,已经被广泛应用。而 MyBatis-Plus 则是在 MyBatis 基础上进行增强的工具,它简化了开发流程,提高了开发效率。本文将详细介绍 MyBa…

Hive【安装 01】hive-3.1.2版本安装配置(含 mysql-connector-java-5.1.47.jar 网盘资源)

我使用的安装文件是 apache-hive-3.1.2-bin.tar.gz ,以下内容均以此版本进行说明。 以下环境测试安装成功: openEuler 22.03 (LTS-SP1)系统 MySQL-8.0.40 1.前置条件 MySQL数据库 我安装的是 mysql-5.7.28 版本的,安装方法可参考《Linux环境…

璞致 PZSDR-P101:ZYNQ7100+AD9361 架构软件无线电平台,重塑宽频信号处理范式

璞致电子 PZSDR-P101 软件无线电平台以 "异构计算 宽频射频 工业级可靠性" 为核心设计理念,基于 Xilinx ZYNQ7100 处理器与 ADI AD9361 射频芯片构建,为工程师提供从 70MHz 到 6GHz 的全频段信号处理解决方案。无论是频谱监测、无线通信原型…

【基础】go基础学习笔记

基础及关键字if for switch都支持使用隐形声明(:)来快速声明一个变量,无需在上面一行额外声明,这可以增加代码简洁性,但不太符合其他常规语言的写法,需要习惯一下if for switch都不需要使用(&am…

AI驱动的企业知识管理革新

Baklib:人工智能引领的知识管理平台Baklib 是领先的 AI 驱动知识管理系统,专为企业打造智能化、模块化的知识共享平台。功能覆盖在线帮助中心、内联网、CMS 网站、客户支持系统、视频中心、活动教学平台和客户社区,全面提升组织在知识管理、员…

使用 FFmpeg 实现 RTP 音频传输与播放

🔊 使用 FFmpeg 实现 RTP 音频传输与播放(Ubuntu) 在音视频开发或远程通信场景中,RTP(Real-time Transport Protocol) 是一种常用的实时音频传输协议。本文将介绍如何使用 FFmpeg 在 Ubuntu 上实现从一台主…

Android 导出联系人为 vCard(.vcf)

有时需要将联系人数据导出为可共享的标准格式:vCard(.vcf)格式,可被系统直接导入通讯录一、导出联系人为 vCard(.vcf)✅ 支持字段我们支持导出的字段包括:姓名个人电话家庭电话工作电话邮箱备注…

大模型-bacth之chunked prefills

一、chunked prefills 1.1 chunked prefills核心思想 ORCA虽然很优秀,但是依然存在两个问题:GPU利用率不高,流水线依然可能导致气泡问题。 我们来看sarathi-serve做的一个实验。左右两图分别刻画了在不同的batch size下,prefil…

multiprocessing模块使用方法(一)

结合Python代码示例说明multiprocessing模块的使用方法、Linux启动命令、服务部署及真实应用场景:一、multiprocessing基础用法 Python的multiprocessing模块通过创建子进程实现并行计算,核心步骤如下(引用):创建进程对…

vector如何判断应该扩容?

std::vector 的扩容机制是 C 容器性能优化的一个核心点。它的判断标准、行为特征和实现细节如下所示:✅ 一、vector 的核心结构 std::vector 内部维护三个指针: begin -> 指向数据起始位置 end -> 指向当前已使用的元素末尾(size…

ICMP考点

在网络工程师、运维工程师、安全工程师等岗位的面试中,​​ICMP(Internet Control Message Protocol,互联网控制报文协议)​​ 是高频必考知识点。ICMP作为IP协议的“辅助协议”,虽然不直接传输用户数据,但…

服务器带宽具体是指什么意思?

企业在选择服务器租用或托管服务时,需要根据自身的业务情况来选择合适的服务器带宽,以便于能够让其业务持续稳定的运行工作,做到及时响应用户的访问请求,但是很多用户对于带宽一词没有过多的概念,本文就来探讨一下服务…

CANape之ASAP2 Studio介绍

提到ECU的测量标定工具,很多小伙伴第一个想到的就是CANape。但其实,除了强大的测量标定功能之外,CANape还有很多其他功能。例如,CANape中集成的小工具——ASAP2 Studio,其支持对A2L文件(由ASAM组织所定义&a…

【debug日记】MONAI SwinUNETR 目标检测项目调试总结(AI自动总结)

MONAI SwinUNETR 目标检测项目调试总结 日期: 2025年7月25日 项目: 使用 MONAI,以预训练的 SwinUNETR 为骨干网络,微调 RetinaNet 进行3D肺结节检测。 本文档旨在记录在项目配置、数据处理和模型训练过程中遇到的一系列问题及其解决方案,作为…

AI同传领域,字节跳动与科大讯飞激战进行时

在AI同声传译市场,行业巨头科大讯飞长期占据主导地位,但新晋玩家字节跳动正以迅猛姿态发起挑战。7月24日,字节旗下火山引擎正式发布豆包同声传译模型 Seed LiveInterpret 2.0,主打“人类级延迟”和“0样本声音复刻”,试…

[C++]string::substr

string substr (size_t pos 0, size_t len npos) const;substr() 主要功能是复制(截取更准确)子字符串,要求从指定位置 pos 开始,并具有指定的长度 len 。如果没有指定长度或者超出了源字符串的长度,则子字符串将延续…

KNN算法:从原理到实战全解析

一 算法介绍 K近邻(K-Nearest Neighbors, KNN)是一种基于实例的监督学习算法,适用于分类和回归任务。其核心思想是通过计算待预测样本与训练集中样本的距离,选取距离最近的K个邻居,根据这些邻居的标签进行投票&#xf…

医疗器械:DFEMA和PFEMA

在医疗器械行业,DFMEA(Design FMEA,设计失效模式及影响分析)和 PFMEA(Process FMEA,过程失效模式及影响分析)是核心的风险管理工具,旨在通过系统性识别潜在风险、分析影响并采取预防…