什么是内核?操作系统内核到底管哪些事
这是"操作系统系列教程"的第二篇。在上一篇文章中,我们知道了操作系统是硬件与应用软件之间的桥梁。那么,这座桥梁最核心的承重结构是什么?答案就是------内核。
从一个日常场景说起
你有没有遇到过这种情况:
电脑突然蓝屏,屏幕上跳出一行看不懂的错误码;或者 Linux 服务器上的某个进程怎么都杀不掉,提示"Operation not permitted";又或者手机卡死之后自动重启,开机后一切恢复正常。
这些现象背后,往往都和同一个东西有关------内核。
很多初学者会有一个误解:以为操作系统就是内核,内核就是操作系统。这两个概念确实关系密切,但并不能画等号。上一篇文章我们说过,完整的操作系统包括内核、系统库、Shell、桌面环境等。而内核,只是其中最核心、最底层、权限最高的那一部分。
打个比方:如果把操作系统比作一家公司,那么内核就是公司的总经理办公室------它不直接面对客户(用户),也不负责具体业务(应用程序),但它掌握着所有资源的调配权,决定着谁能用会议室、谁能报销、谁可以进出哪些区域。
这篇文章,我们就来把"内核"这件事讲清楚。
一、内核到底是什么?
1.1 内核的定义
先给出一个正式的定义:
内核(Kernel)是操作系统的核心部分,是运行在最高特权级上的系统软件,负责管理计算机的硬件资源,并为上层应用程序提供受控的访问接口。
这个定义里有三个关键词:
- 核心部分:内核不是操作系统的全部,但它是操作系统中最关键的部分。没有内核,操作系统就无法运转。
- 最高特权级:内核运行在 CPU 的最高特权级(通常称为内核态或 Ring 0),可以执行所有指令、访问所有硬件。
- 受控访问:应用程序不能直接操作硬件,必须通过内核提供的接口(系统调用)来请求服务。
1.2 内核在系统中的位置
#mermaid-svg-3pJpEIjpsogdiGO4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-3pJpEIjpsogdiGO4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-3pJpEIjpsogdiGO4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-3pJpEIjpsogdiGO4 .error-icon{fill:#552222;}#mermaid-svg-3pJpEIjpsogdiGO4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3pJpEIjpsogdiGO4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-3pJpEIjpsogdiGO4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3pJpEIjpsogdiGO4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3pJpEIjpsogdiGO4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-3pJpEIjpsogdiGO4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3pJpEIjpsogdiGO4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3pJpEIjpsogdiGO4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3pJpEIjpsogdiGO4 .marker.cross{stroke:#333333;}#mermaid-svg-3pJpEIjpsogdiGO4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3pJpEIjpsogdiGO4 p{margin:0;}#mermaid-svg-3pJpEIjpsogdiGO4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3pJpEIjpsogdiGO4 .cluster-label text{fill:#333;}#mermaid-svg-3pJpEIjpsogdiGO4 .cluster-label span{color:#333;}#mermaid-svg-3pJpEIjpsogdiGO4 .cluster-label span p{background-color:transparent;}#mermaid-svg-3pJpEIjpsogdiGO4 .label text,#mermaid-svg-3pJpEIjpsogdiGO4 span{fill:#333;color:#333;}#mermaid-svg-3pJpEIjpsogdiGO4 .node rect,#mermaid-svg-3pJpEIjpsogdiGO4 .node circle,#mermaid-svg-3pJpEIjpsogdiGO4 .node ellipse,#mermaid-svg-3pJpEIjpsogdiGO4 .node polygon,#mermaid-svg-3pJpEIjpsogdiGO4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3pJpEIjpsogdiGO4 .rough-node .label text,#mermaid-svg-3pJpEIjpsogdiGO4 .node .label text,#mermaid-svg-3pJpEIjpsogdiGO4 .image-shape .label,#mermaid-svg-3pJpEIjpsogdiGO4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-3pJpEIjpsogdiGO4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-3pJpEIjpsogdiGO4 .rough-node .label,#mermaid-svg-3pJpEIjpsogdiGO4 .node .label,#mermaid-svg-3pJpEIjpsogdiGO4 .image-shape .label,#mermaid-svg-3pJpEIjpsogdiGO4 .icon-shape .label{text-align:center;}#mermaid-svg-3pJpEIjpsogdiGO4 .node.clickable{cursor:pointer;}#mermaid-svg-3pJpEIjpsogdiGO4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-3pJpEIjpsogdiGO4 .arrowheadPath{fill:#333333;}#mermaid-svg-3pJpEIjpsogdiGO4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3pJpEIjpsogdiGO4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3pJpEIjpsogdiGO4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3pJpEIjpsogdiGO4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-3pJpEIjpsogdiGO4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3pJpEIjpsogdiGO4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-3pJpEIjpsogdiGO4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3pJpEIjpsogdiGO4 .cluster text{fill:#333;}#mermaid-svg-3pJpEIjpsogdiGO4 .cluster span{color:#333;}#mermaid-svg-3pJpEIjpsogdiGO4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3pJpEIjpsogdiGO4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-3pJpEIjpsogdiGO4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-3pJpEIjpsogdiGO4 .icon-shape,#mermaid-svg-3pJpEIjpsogdiGO4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3pJpEIjpsogdiGO4 .icon-shape p,#mermaid-svg-3pJpEIjpsogdiGO4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-3pJpEIjpsogdiGO4 .icon-shape .label rect,#mermaid-svg-3pJpEIjpsogdiGO4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3pJpEIjpsogdiGO4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-3pJpEIjpsogdiGO4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-3pJpEIjpsogdiGO4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 硬件层
内核空间
用户空间
应用程序
系统库 / Shell / GUI
系统调用接口
进程管理
内存管理
文件系统
设备驱动
网络协议栈
CPU · 内存 · 硬盘 · 网卡 · 外设
图 1:内核在计算机系统中的位置。 内核向下管理硬件,向上通过系统调用接口为应用程序提供服务。
从图 1 可以看出,内核是硬件和软件之间的"中间层"。它把复杂的硬件细节隐藏起来,向上提供统一的接口。应用程序不需要知道硬盘是机械硬盘还是固态硬盘,不需要知道网卡是什么型号,只需要调用内核提供的接口即可。
1.3 一个直观的类比
我们可以用"餐厅"来类比整个计算机系统:
| 计算机系统 | 餐厅类比 | 说明 |
|---|---|---|
| 硬件 | 厨房设备、食材 | 真正干活的部分,但用户不能直接进去 |
| 内核 | 厨师长 | 掌管厨房所有资源,决定谁用什么设备、按什么顺序做菜 |
| 系统调用 | 点菜窗口 | 顾客通过这个窗口向厨师长下单 |
| 应用程序 | 顾客 | 提出需求,但不直接进厨房 |
| 用户 | 食客 | 最终享受服务的人 |
顾客不能直接冲进厨房炒菜,就像应用程序不能直接操作硬件一样。厨师长(内核)负责协调所有资源,保证厨房有序运转。
二、为什么需要内核?
你可能会问:为什么不能让应用程序直接操作硬件?为什么要多一层内核?
答案可以归结为三个词:管理、保护、抽象。
2.1 管理:让资源有序分配
计算机中的资源是有限的。CPU 只有一个或几个核心,内存容量有限,硬盘只有一个,网卡只有一个。如果多个程序同时想用这些资源,没有统一的管理者,就会乱套。
内核就像一个交通警察,负责决定:
- 哪个进程现在可以使用 CPU?
- 内存如何分配给不同的进程?
- 多个程序同时要写文件,先给谁写?
- 网卡收到数据包,应该交给哪个程序?

图 2:内核作为资源管理者。 多个程序竞争有限资源,内核负责统一分配和调度。
2.2 保护:防止程序互相破坏
如果没有内核,一个程序可以随意读写另一个程序的内存,甚至可以直接操作硬件。这意味着:
- 你写的一个小 bug,可能导致整个系统崩溃;
- 一个恶意程序可以窃取另一个程序的数据;
- 一个程序可以格式化整个硬盘。
内核通过特权级机制 和地址空间隔离来防止这些问题。应用程序运行在用户态,权限受限;内核运行在内核态,拥有最高权限。应用程序想访问硬件或内核数据,必须通过系统调用"请求"内核代为执行。

图 3:内核的保护机制。 程序之间互相隔离,只能通过内核访问共享资源。
2.3 抽象:让编程更简单
直接操作硬件是非常痛苦的。程序员如果必须自己控制磁盘马达、处理网卡中断、管理内存地址,那么开发一个简单程序都会变得极其复杂。
内核提供了大量抽象:
- 进程:把"一个正在运行的程序"抽象出来;
- 文件:把磁盘上的数据抽象成有名字、可读写的对象;
- 虚拟内存:让每个程序都以为自己拥有连续、独立的内存空间;
- 套接字:把复杂的网络协议抽象成简单的发送和接收接口。
有了这些抽象,程序员写代码时只需要调用 open()、read()、write() 这样的接口,而不需要关心底层硬件是怎么工作的。
三、内核的核心职责
内核到底管哪些事?不同教材的分类略有差异,但核心职责可以归纳为以下五大类。
#mermaid-svg-m3QCqiLJNLJv7EA0{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-m3QCqiLJNLJv7EA0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-m3QCqiLJNLJv7EA0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-m3QCqiLJNLJv7EA0 .error-icon{fill:#552222;}#mermaid-svg-m3QCqiLJNLJv7EA0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-m3QCqiLJNLJv7EA0 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-m3QCqiLJNLJv7EA0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-m3QCqiLJNLJv7EA0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-m3QCqiLJNLJv7EA0 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-m3QCqiLJNLJv7EA0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-m3QCqiLJNLJv7EA0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-m3QCqiLJNLJv7EA0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-m3QCqiLJNLJv7EA0 .marker.cross{stroke:#333333;}#mermaid-svg-m3QCqiLJNLJv7EA0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-m3QCqiLJNLJv7EA0 p{margin:0;}#mermaid-svg-m3QCqiLJNLJv7EA0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-m3QCqiLJNLJv7EA0 .cluster-label text{fill:#333;}#mermaid-svg-m3QCqiLJNLJv7EA0 .cluster-label span{color:#333;}#mermaid-svg-m3QCqiLJNLJv7EA0 .cluster-label span p{background-color:transparent;}#mermaid-svg-m3QCqiLJNLJv7EA0 .label text,#mermaid-svg-m3QCqiLJNLJv7EA0 span{fill:#333;color:#333;}#mermaid-svg-m3QCqiLJNLJv7EA0 .node rect,#mermaid-svg-m3QCqiLJNLJv7EA0 .node circle,#mermaid-svg-m3QCqiLJNLJv7EA0 .node ellipse,#mermaid-svg-m3QCqiLJNLJv7EA0 .node polygon,#mermaid-svg-m3QCqiLJNLJv7EA0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-m3QCqiLJNLJv7EA0 .rough-node .label text,#mermaid-svg-m3QCqiLJNLJv7EA0 .node .label text,#mermaid-svg-m3QCqiLJNLJv7EA0 .image-shape .label,#mermaid-svg-m3QCqiLJNLJv7EA0 .icon-shape .label{text-anchor:middle;}#mermaid-svg-m3QCqiLJNLJv7EA0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-m3QCqiLJNLJv7EA0 .rough-node .label,#mermaid-svg-m3QCqiLJNLJv7EA0 .node .label,#mermaid-svg-m3QCqiLJNLJv7EA0 .image-shape .label,#mermaid-svg-m3QCqiLJNLJv7EA0 .icon-shape .label{text-align:center;}#mermaid-svg-m3QCqiLJNLJv7EA0 .node.clickable{cursor:pointer;}#mermaid-svg-m3QCqiLJNLJv7EA0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-m3QCqiLJNLJv7EA0 .arrowheadPath{fill:#333333;}#mermaid-svg-m3QCqiLJNLJv7EA0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-m3QCqiLJNLJv7EA0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-m3QCqiLJNLJv7EA0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-m3QCqiLJNLJv7EA0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-m3QCqiLJNLJv7EA0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-m3QCqiLJNLJv7EA0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-m3QCqiLJNLJv7EA0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-m3QCqiLJNLJv7EA0 .cluster text{fill:#333;}#mermaid-svg-m3QCqiLJNLJv7EA0 .cluster span{color:#333;}#mermaid-svg-m3QCqiLJNLJv7EA0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-m3QCqiLJNLJv7EA0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-m3QCqiLJNLJv7EA0 rect.text{fill:none;stroke-width:0;}#mermaid-svg-m3QCqiLJNLJv7EA0 .icon-shape,#mermaid-svg-m3QCqiLJNLJv7EA0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-m3QCqiLJNLJv7EA0 .icon-shape p,#mermaid-svg-m3QCqiLJNLJv7EA0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-m3QCqiLJNLJv7EA0 .icon-shape .label rect,#mermaid-svg-m3QCqiLJNLJv7EA0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-m3QCqiLJNLJv7EA0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-m3QCqiLJNLJv7EA0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-m3QCqiLJNLJv7EA0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 内核核心职责
进程管理
内存管理
文件系统管理
设备管理
网络管理
创建/销毁进程
进程调度
进程间通信
内存分配与回收
虚拟内存
地址映射
文件读写
目录管理
权限控制
设备驱动
中断处理
缓冲管理
协议栈
数据包收发
网络接口
图 4:内核的五大核心职责。 本系列后续文章将逐一深入讲解每个模块。
3.1 进程管理
进程是程序的一次执行过程。内核负责:
- 创建和销毁进程:当你双击一个图标,内核会创建一个新进程;当程序退出,内核负责回收资源。
- 进程调度:决定哪个进程现在可以使用 CPU,使用多久。Linux 中常用的调度器有 CFS(完全公平调度器)等。
- 进程间通信:提供管道、消息队列、共享内存等机制,让不同进程可以交换数据。
- 进程同步:提供信号量、互斥锁等机制,防止多个进程同时访问共享资源导致错误。

图 5:进程的基本状态转换。 内核负责管理进程在就绪、运行、阻塞等状态之间的切换。
3.2 内存管理
内存是计算机中最宝贵的资源之一。内核负责:
- 内存分配与回收:当程序需要内存时,内核负责分配;当程序释放内存时,内核负责回收。
- 虚拟内存:让每个进程都以为自己拥有独立、连续的内存空间,实际上物理内存可能是不连续的,甚至部分数据暂时存放在硬盘上。
- 地址映射:把程序使用的虚拟地址转换为物理地址。
- 内存保护:防止一个进程访问另一个进程的内存。

图 6:虚拟内存与地址映射。 内核通过内存管理单元(MMU)把不同进程的虚拟地址映射到物理内存。
3.3 文件系统管理
文件系统是内核中负责管理磁盘数据的部分。内核负责:
- 文件的创建、读写、删除 :提供
open()、read()、write()、close()等系统调用。 - 目录管理:组织文件的层次结构,支持路径解析。
- 权限控制:决定哪个用户可以对哪个文件执行什么操作。
- 磁盘空间管理:跟踪哪些磁盘块被使用,哪些空闲。
在 Linux 中,有一句经典的话:"一切皆文件"。不仅普通文件和目录是文件,就连设备、管道、套接字也都被抽象成文件。这大大简化了编程接口。
3.4 设备管理
计算机连接着各种外设:键盘、鼠标、显示器、硬盘、网卡、打印机等。内核负责:
- 设备驱动:每种设备都有对应的驱动程序,内核通过驱动与硬件通信。
- 中断处理:当设备完成操作或发生事件时,会发出中断信号,内核负责响应。
- 缓冲管理:在设备和内存之间设置缓冲区,平衡速度差异。
- 设备分配:多个程序同时请求同一设备时,内核决定先后顺序。
硬件设备 设备驱动 内核 应用程序 硬件设备 设备驱动 内核 应用程序 #mermaid-svg-iYJ9PrEVNDaDcF4t{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-iYJ9PrEVNDaDcF4t .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-iYJ9PrEVNDaDcF4t .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-iYJ9PrEVNDaDcF4t .error-icon{fill:#552222;}#mermaid-svg-iYJ9PrEVNDaDcF4t .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iYJ9PrEVNDaDcF4t .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-iYJ9PrEVNDaDcF4t .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iYJ9PrEVNDaDcF4t .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iYJ9PrEVNDaDcF4t .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-iYJ9PrEVNDaDcF4t .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iYJ9PrEVNDaDcF4t .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iYJ9PrEVNDaDcF4t .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iYJ9PrEVNDaDcF4t .marker.cross{stroke:#333333;}#mermaid-svg-iYJ9PrEVNDaDcF4t svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iYJ9PrEVNDaDcF4t p{margin:0;}#mermaid-svg-iYJ9PrEVNDaDcF4t .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-iYJ9PrEVNDaDcF4t text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-iYJ9PrEVNDaDcF4t .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-iYJ9PrEVNDaDcF4t .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-iYJ9PrEVNDaDcF4t .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-iYJ9PrEVNDaDcF4t .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-iYJ9PrEVNDaDcF4t #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-iYJ9PrEVNDaDcF4t .sequenceNumber{fill:white;}#mermaid-svg-iYJ9PrEVNDaDcF4t #sequencenumber{fill:#333;}#mermaid-svg-iYJ9PrEVNDaDcF4t #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-iYJ9PrEVNDaDcF4t .messageText{fill:#333;stroke:none;}#mermaid-svg-iYJ9PrEVNDaDcF4t .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-iYJ9PrEVNDaDcF4t .labelText,#mermaid-svg-iYJ9PrEVNDaDcF4t .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-iYJ9PrEVNDaDcF4t .loopText,#mermaid-svg-iYJ9PrEVNDaDcF4t .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-iYJ9PrEVNDaDcF4t .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-iYJ9PrEVNDaDcF4t .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-iYJ9PrEVNDaDcF4t .noteText,#mermaid-svg-iYJ9PrEVNDaDcF4t .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-iYJ9PrEVNDaDcF4t .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-iYJ9PrEVNDaDcF4t .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-iYJ9PrEVNDaDcF4t .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-iYJ9PrEVNDaDcF4t .actorPopupMenu{position:absolute;}#mermaid-svg-iYJ9PrEVNDaDcF4t .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-iYJ9PrEVNDaDcF4t .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-iYJ9PrEVNDaDcF4t .actor-man circle,#mermaid-svg-iYJ9PrEVNDaDcF4t line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-iYJ9PrEVNDaDcF4t :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} read() 系统调用调用驱动接口发送控制命令中断信号数据就绪返回数据
图 7:设备读取的简化流程。 应用程序通过内核和驱动间接访问硬件,硬件通过中断通知内核。
3.5 网络管理
现代操作系统都内置了网络协议栈。内核负责:
- 协议栈实现:如 TCP/IP 协议栈,处理数据包的封装、解析、转发。
- 数据包收发:从网卡接收数据包,交给对应的应用程序;把应用程序的数据包发送到网卡。
- 网络接口管理:管理 IP 地址、路由表、防火墙规则等。
你在 Linux 中使用 ping、curl、ssh 等命令时,背后都有内核网络协议栈在默默工作。
四、内核的分类
内核并不是只有一种设计方式。根据内核功能的组织方式,可以分为三大类:宏内核、微内核和混合内核。
#mermaid-svg-T0y6XljyPmK0dZbv{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-T0y6XljyPmK0dZbv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-T0y6XljyPmK0dZbv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-T0y6XljyPmK0dZbv .error-icon{fill:#552222;}#mermaid-svg-T0y6XljyPmK0dZbv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-T0y6XljyPmK0dZbv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-T0y6XljyPmK0dZbv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-T0y6XljyPmK0dZbv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-T0y6XljyPmK0dZbv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-T0y6XljyPmK0dZbv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-T0y6XljyPmK0dZbv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-T0y6XljyPmK0dZbv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-T0y6XljyPmK0dZbv .marker.cross{stroke:#333333;}#mermaid-svg-T0y6XljyPmK0dZbv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-T0y6XljyPmK0dZbv p{margin:0;}#mermaid-svg-T0y6XljyPmK0dZbv .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-T0y6XljyPmK0dZbv .cluster-label text{fill:#333;}#mermaid-svg-T0y6XljyPmK0dZbv .cluster-label span{color:#333;}#mermaid-svg-T0y6XljyPmK0dZbv .cluster-label span p{background-color:transparent;}#mermaid-svg-T0y6XljyPmK0dZbv .label text,#mermaid-svg-T0y6XljyPmK0dZbv span{fill:#333;color:#333;}#mermaid-svg-T0y6XljyPmK0dZbv .node rect,#mermaid-svg-T0y6XljyPmK0dZbv .node circle,#mermaid-svg-T0y6XljyPmK0dZbv .node ellipse,#mermaid-svg-T0y6XljyPmK0dZbv .node polygon,#mermaid-svg-T0y6XljyPmK0dZbv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-T0y6XljyPmK0dZbv .rough-node .label text,#mermaid-svg-T0y6XljyPmK0dZbv .node .label text,#mermaid-svg-T0y6XljyPmK0dZbv .image-shape .label,#mermaid-svg-T0y6XljyPmK0dZbv .icon-shape .label{text-anchor:middle;}#mermaid-svg-T0y6XljyPmK0dZbv .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-T0y6XljyPmK0dZbv .rough-node .label,#mermaid-svg-T0y6XljyPmK0dZbv .node .label,#mermaid-svg-T0y6XljyPmK0dZbv .image-shape .label,#mermaid-svg-T0y6XljyPmK0dZbv .icon-shape .label{text-align:center;}#mermaid-svg-T0y6XljyPmK0dZbv .node.clickable{cursor:pointer;}#mermaid-svg-T0y6XljyPmK0dZbv .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-T0y6XljyPmK0dZbv .arrowheadPath{fill:#333333;}#mermaid-svg-T0y6XljyPmK0dZbv .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-T0y6XljyPmK0dZbv .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-T0y6XljyPmK0dZbv .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-T0y6XljyPmK0dZbv .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-T0y6XljyPmK0dZbv .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-T0y6XljyPmK0dZbv .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-T0y6XljyPmK0dZbv .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-T0y6XljyPmK0dZbv .cluster text{fill:#333;}#mermaid-svg-T0y6XljyPmK0dZbv .cluster span{color:#333;}#mermaid-svg-T0y6XljyPmK0dZbv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-T0y6XljyPmK0dZbv .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-T0y6XljyPmK0dZbv rect.text{fill:none;stroke-width:0;}#mermaid-svg-T0y6XljyPmK0dZbv .icon-shape,#mermaid-svg-T0y6XljyPmK0dZbv .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-T0y6XljyPmK0dZbv .icon-shape p,#mermaid-svg-T0y6XljyPmK0dZbv .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-T0y6XljyPmK0dZbv .icon-shape .label rect,#mermaid-svg-T0y6XljyPmK0dZbv .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-T0y6XljyPmK0dZbv .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-T0y6XljyPmK0dZbv .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-T0y6XljyPmK0dZbv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 内核分类
宏内核
微内核
混合内核
所有功能在内核态
Linux、Windows早期
只保留核心功能
QNX、L4
折中方案
Windows NT、macOS
图 8:内核的三种主要分类。
4.1 宏内核
宏内核(Monolithic Kernel)把进程管理、内存管理、文件系统、设备驱动、网络协议栈等所有核心功能都放在内核态中运行。
代表:Linux、传统的 Unix。
优点:
- 性能高:所有功能都在内核态,函数调用不需要频繁切换特权级。
- 实现直接:模块之间可以直接调用。
缺点:
- 内核体积大:所有代码都在内核态运行,一处出错可能导致整个系统崩溃。
- 扩展性差:添加新功能需要重新编译内核或加载内核模块。
Linux 虽然是宏内核,但支持内核模块机制,可以在运行时动态加载和卸载驱动,兼顾了一定的灵活性。
4.2 微内核
微内核(Microkernel)只把最核心的功能放在内核态,如进程调度、内存管理、进程间通信。文件系统、设备驱动、网络协议栈等都在用户态运行。
代表:QNX、L4、Mach。
优点:
- 可靠性高:某个服务崩溃不会导致整个系统崩溃。
- 安全性好:内核攻击面小。
- 易于扩展:添加新服务不需要修改内核。
缺点:
- 性能开销大:用户态和内核态之间频繁切换,进程间通信成本高。
- 实现复杂:需要精心设计进程间通信机制。
4.3 混合内核
混合内核(Hybrid Kernel)是宏内核和微内核的折中方案。它把一些非核心功能放在用户态,但为了性能,又把一些关键功能放回内核态。
代表:Windows NT、macOS(XNU)。
#mermaid-svg-TtdfkW5F2X5IS6dU{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-TtdfkW5F2X5IS6dU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TtdfkW5F2X5IS6dU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TtdfkW5F2X5IS6dU .error-icon{fill:#552222;}#mermaid-svg-TtdfkW5F2X5IS6dU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TtdfkW5F2X5IS6dU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TtdfkW5F2X5IS6dU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TtdfkW5F2X5IS6dU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TtdfkW5F2X5IS6dU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TtdfkW5F2X5IS6dU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TtdfkW5F2X5IS6dU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TtdfkW5F2X5IS6dU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TtdfkW5F2X5IS6dU .marker.cross{stroke:#333333;}#mermaid-svg-TtdfkW5F2X5IS6dU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TtdfkW5F2X5IS6dU p{margin:0;}#mermaid-svg-TtdfkW5F2X5IS6dU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-TtdfkW5F2X5IS6dU .cluster-label text{fill:#333;}#mermaid-svg-TtdfkW5F2X5IS6dU .cluster-label span{color:#333;}#mermaid-svg-TtdfkW5F2X5IS6dU .cluster-label span p{background-color:transparent;}#mermaid-svg-TtdfkW5F2X5IS6dU .label text,#mermaid-svg-TtdfkW5F2X5IS6dU span{fill:#333;color:#333;}#mermaid-svg-TtdfkW5F2X5IS6dU .node rect,#mermaid-svg-TtdfkW5F2X5IS6dU .node circle,#mermaid-svg-TtdfkW5F2X5IS6dU .node ellipse,#mermaid-svg-TtdfkW5F2X5IS6dU .node polygon,#mermaid-svg-TtdfkW5F2X5IS6dU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TtdfkW5F2X5IS6dU .rough-node .label text,#mermaid-svg-TtdfkW5F2X5IS6dU .node .label text,#mermaid-svg-TtdfkW5F2X5IS6dU .image-shape .label,#mermaid-svg-TtdfkW5F2X5IS6dU .icon-shape .label{text-anchor:middle;}#mermaid-svg-TtdfkW5F2X5IS6dU .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TtdfkW5F2X5IS6dU .rough-node .label,#mermaid-svg-TtdfkW5F2X5IS6dU .node .label,#mermaid-svg-TtdfkW5F2X5IS6dU .image-shape .label,#mermaid-svg-TtdfkW5F2X5IS6dU .icon-shape .label{text-align:center;}#mermaid-svg-TtdfkW5F2X5IS6dU .node.clickable{cursor:pointer;}#mermaid-svg-TtdfkW5F2X5IS6dU .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TtdfkW5F2X5IS6dU .arrowheadPath{fill:#333333;}#mermaid-svg-TtdfkW5F2X5IS6dU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TtdfkW5F2X5IS6dU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TtdfkW5F2X5IS6dU .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TtdfkW5F2X5IS6dU .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TtdfkW5F2X5IS6dU .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TtdfkW5F2X5IS6dU .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TtdfkW5F2X5IS6dU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TtdfkW5F2X5IS6dU .cluster text{fill:#333;}#mermaid-svg-TtdfkW5F2X5IS6dU .cluster span{color:#333;}#mermaid-svg-TtdfkW5F2X5IS6dU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TtdfkW5F2X5IS6dU .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TtdfkW5F2X5IS6dU rect.text{fill:none;stroke-width:0;}#mermaid-svg-TtdfkW5F2X5IS6dU .icon-shape,#mermaid-svg-TtdfkW5F2X5IS6dU .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TtdfkW5F2X5IS6dU .icon-shape p,#mermaid-svg-TtdfkW5F2X5IS6dU .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TtdfkW5F2X5IS6dU .icon-shape .label rect,#mermaid-svg-TtdfkW5F2X5IS6dU .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TtdfkW5F2X5IS6dU .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TtdfkW5F2X5IS6dU .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TtdfkW5F2X5IS6dU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户态服务
文件系统
设备驱动
网络协议栈
微内核
进程管理
内存管理
宏内核
进程管理
内存管理
文件系统
设备驱动
网络协议栈
图 9:宏内核与微内核的对比。 宏内核把所有功能放在内核态,微内核只保留最核心的功能。
五、主流操作系统的内核
5.1 Linux 内核
Linux 内核是世界上最著名的开源内核,由 Linus Torvalds 于 1991 年发布。它采用宏内核设计,但支持动态加载内核模块。
Linux 内核的主要特点:
- 开源:任何人都可以查看、修改、分发源代码。
- 可移植:支持多种 CPU 架构,包括 x86、ARM、RISC-V、龙芯等。
- 模块化:驱动和部分功能可以编译成模块,运行时动态加载。
- 社区驱动:全球数千名开发者共同维护。
你在终端中输入的 uname -r 命令,查看的就是当前 Linux 内核的版本号。
5.2 Windows 内核
Windows NT 内核采用混合内核设计,核心功能包括进程管理、内存管理、对象管理、安全引用监视器等。Windows 的图形子系统(Win32k)早期运行在内核态,后来部分功能逐步移到用户态。
5.3 国产操作系统内核
国产操作系统大多基于 Linux 内核。例如:
- 银河麒麟 、统信 UOS 、深度 deepin:基于 Linux 内核,针对国内软硬件生态进行适配。
- openEuler:华为开源的操作系统,基于 Linux 内核,面向服务器和云计算场景。
- 鸿蒙 HarmonyOS:华为开发的分布式操作系统,其内核为鸿蒙微内核(HarmonyOS Microkernel),采用微内核设计,强调分布式能力和安全性。
#mermaid-svg-lsO9ITE1Lgq7y8eF{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-lsO9ITE1Lgq7y8eF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lsO9ITE1Lgq7y8eF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lsO9ITE1Lgq7y8eF .error-icon{fill:#552222;}#mermaid-svg-lsO9ITE1Lgq7y8eF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lsO9ITE1Lgq7y8eF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lsO9ITE1Lgq7y8eF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lsO9ITE1Lgq7y8eF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lsO9ITE1Lgq7y8eF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lsO9ITE1Lgq7y8eF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lsO9ITE1Lgq7y8eF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lsO9ITE1Lgq7y8eF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lsO9ITE1Lgq7y8eF .marker.cross{stroke:#333333;}#mermaid-svg-lsO9ITE1Lgq7y8eF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lsO9ITE1Lgq7y8eF p{margin:0;}#mermaid-svg-lsO9ITE1Lgq7y8eF .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-lsO9ITE1Lgq7y8eF .cluster-label text{fill:#333;}#mermaid-svg-lsO9ITE1Lgq7y8eF .cluster-label span{color:#333;}#mermaid-svg-lsO9ITE1Lgq7y8eF .cluster-label span p{background-color:transparent;}#mermaid-svg-lsO9ITE1Lgq7y8eF .label text,#mermaid-svg-lsO9ITE1Lgq7y8eF span{fill:#333;color:#333;}#mermaid-svg-lsO9ITE1Lgq7y8eF .node rect,#mermaid-svg-lsO9ITE1Lgq7y8eF .node circle,#mermaid-svg-lsO9ITE1Lgq7y8eF .node ellipse,#mermaid-svg-lsO9ITE1Lgq7y8eF .node polygon,#mermaid-svg-lsO9ITE1Lgq7y8eF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-lsO9ITE1Lgq7y8eF .rough-node .label text,#mermaid-svg-lsO9ITE1Lgq7y8eF .node .label text,#mermaid-svg-lsO9ITE1Lgq7y8eF .image-shape .label,#mermaid-svg-lsO9ITE1Lgq7y8eF .icon-shape .label{text-anchor:middle;}#mermaid-svg-lsO9ITE1Lgq7y8eF .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-lsO9ITE1Lgq7y8eF .rough-node .label,#mermaid-svg-lsO9ITE1Lgq7y8eF .node .label,#mermaid-svg-lsO9ITE1Lgq7y8eF .image-shape .label,#mermaid-svg-lsO9ITE1Lgq7y8eF .icon-shape .label{text-align:center;}#mermaid-svg-lsO9ITE1Lgq7y8eF .node.clickable{cursor:pointer;}#mermaid-svg-lsO9ITE1Lgq7y8eF .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-lsO9ITE1Lgq7y8eF .arrowheadPath{fill:#333333;}#mermaid-svg-lsO9ITE1Lgq7y8eF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-lsO9ITE1Lgq7y8eF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-lsO9ITE1Lgq7y8eF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lsO9ITE1Lgq7y8eF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-lsO9ITE1Lgq7y8eF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lsO9ITE1Lgq7y8eF .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-lsO9ITE1Lgq7y8eF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-lsO9ITE1Lgq7y8eF .cluster text{fill:#333;}#mermaid-svg-lsO9ITE1Lgq7y8eF .cluster span{color:#333;}#mermaid-svg-lsO9ITE1Lgq7y8eF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-lsO9ITE1Lgq7y8eF .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-lsO9ITE1Lgq7y8eF rect.text{fill:none;stroke-width:0;}#mermaid-svg-lsO9ITE1Lgq7y8eF .icon-shape,#mermaid-svg-lsO9ITE1Lgq7y8eF .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lsO9ITE1Lgq7y8eF .icon-shape p,#mermaid-svg-lsO9ITE1Lgq7y8eF .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-lsO9ITE1Lgq7y8eF .icon-shape .label rect,#mermaid-svg-lsO9ITE1Lgq7y8eF .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lsO9ITE1Lgq7y8eF .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-lsO9ITE1Lgq7y8eF .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-lsO9ITE1Lgq7y8eF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 自主内核
鸿蒙微内核
基于Linux内核
银河麒麟
统信UOS
深度deepin
openEuler
图 10:国产操作系统与内核的关系。 大多数国产操作系统基于 Linux 内核,鸿蒙采用自主微内核设计。
六、内核如何与用户程序交互:系统调用
应用程序不能直接调用内核函数,必须通过系统调用(System Call)进入内核态。系统调用是用户程序与内核之间的唯一合法入口。
硬件 内核 系统库 应用程序 硬件 内核 系统库 应用程序 #mermaid-svg-i95FyzWTCzhEDtC8{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-i95FyzWTCzhEDtC8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-i95FyzWTCzhEDtC8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-i95FyzWTCzhEDtC8 .error-icon{fill:#552222;}#mermaid-svg-i95FyzWTCzhEDtC8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-i95FyzWTCzhEDtC8 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-i95FyzWTCzhEDtC8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-i95FyzWTCzhEDtC8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-i95FyzWTCzhEDtC8 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-i95FyzWTCzhEDtC8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-i95FyzWTCzhEDtC8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-i95FyzWTCzhEDtC8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-i95FyzWTCzhEDtC8 .marker.cross{stroke:#333333;}#mermaid-svg-i95FyzWTCzhEDtC8 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-i95FyzWTCzhEDtC8 p{margin:0;}#mermaid-svg-i95FyzWTCzhEDtC8 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-i95FyzWTCzhEDtC8 text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-i95FyzWTCzhEDtC8 .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-i95FyzWTCzhEDtC8 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-i95FyzWTCzhEDtC8 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-i95FyzWTCzhEDtC8 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-i95FyzWTCzhEDtC8 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-i95FyzWTCzhEDtC8 .sequenceNumber{fill:white;}#mermaid-svg-i95FyzWTCzhEDtC8 #sequencenumber{fill:#333;}#mermaid-svg-i95FyzWTCzhEDtC8 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-i95FyzWTCzhEDtC8 .messageText{fill:#333;stroke:none;}#mermaid-svg-i95FyzWTCzhEDtC8 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-i95FyzWTCzhEDtC8 .labelText,#mermaid-svg-i95FyzWTCzhEDtC8 .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-i95FyzWTCzhEDtC8 .loopText,#mermaid-svg-i95FyzWTCzhEDtC8 .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-i95FyzWTCzhEDtC8 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-i95FyzWTCzhEDtC8 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-i95FyzWTCzhEDtC8 .noteText,#mermaid-svg-i95FyzWTCzhEDtC8 .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-i95FyzWTCzhEDtC8 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-i95FyzWTCzhEDtC8 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-i95FyzWTCzhEDtC8 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-i95FyzWTCzhEDtC8 .actorPopupMenu{position:absolute;}#mermaid-svg-i95FyzWTCzhEDtC8 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-i95FyzWTCzhEDtC8 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-i95FyzWTCzhEDtC8 .actor-man circle,#mermaid-svg-i95FyzWTCzhEDtC8 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-i95FyzWTCzhEDtC8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 从用户态切换到内核态 从内核态切换回用户态 调用 read()执行 syscall 指令执行文件读取操作访问磁盘返回数据返回结果返回数据
图 11:系统调用的完整流程。 应用程序通过系统库发起系统调用,内核执行特权操作后返回结果。
常见的系统调用包括:
| 类别 | 系统调用示例 | 作用 |
|---|---|---|
| 进程管理 | fork()、exec()、exit() |
创建、执行、终止进程 |
| 文件操作 | open()、read()、write()、close() |
打开、读写、关闭文件 |
| 内存管理 | brk()、mmap() |
分配、映射内存 |
| 网络通信 | socket()、bind()、send()、recv() |
创建套接字、收发数据 |
| 设备操作 | ioctl() |
控制设备 |
在 Linux 中,系统调用通常通过 syscall 指令或 int 0x80 指令触发。内核中维护着一张系统调用表,根据系统调用号找到对应的处理函数。
七、常见误区澄清
| 误区 | 真相 |
|---|---|
| "内核就是操作系统" | 内核是操作系统的核心,但操作系统还包括系统库、Shell、桌面环境等 |
| "内核是硬件" | 内核是软件,是运行在最高特权级的系统软件 |
| "所有操作系统的内核都一样" | Linux 是宏内核,QNX 是微内核,Windows NT 是混合内核,设计差异很大 |
| "应用程序可以直接访问硬件" | 不能。应用程序必须通过系统调用请求内核代为访问 |
| "内核越大越好" | 不一定。宏内核性能高但可靠性风险大,微内核可靠性高但性能开销大,各有取舍 |
| "鸿蒙内核就是 Linux" | 鸿蒙采用自主微内核设计,不是 Linux 内核 |