什么是内核?操作系统内核到底管哪些事

什么是内核?操作系统内核到底管哪些事

这是"操作系统系列教程"的第二篇。在上一篇文章中,我们知道了操作系统是硬件与应用软件之间的桥梁。那么,这座桥梁最核心的承重结构是什么?答案就是------内核

从一个日常场景说起

你有没有遇到过这种情况:

电脑突然蓝屏,屏幕上跳出一行看不懂的错误码;或者 Linux 服务器上的某个进程怎么都杀不掉,提示"Operation not permitted";又或者手机卡死之后自动重启,开机后一切恢复正常。

这些现象背后,往往都和同一个东西有关------内核

很多初学者会有一个误解:以为操作系统就是内核,内核就是操作系统。这两个概念确实关系密切,但并不能画等号。上一篇文章我们说过,完整的操作系统包括内核、系统库、Shell、桌面环境等。而内核,只是其中最核心、最底层、权限最高的那一部分。

打个比方:如果把操作系统比作一家公司,那么内核就是公司的总经理办公室------它不直接面对客户(用户),也不负责具体业务(应用程序),但它掌握着所有资源的调配权,决定着谁能用会议室、谁能报销、谁可以进出哪些区域。

这篇文章,我们就来把"内核"这件事讲清楚。

一、内核到底是什么?

1.1 内核的定义

先给出一个正式的定义:

内核(Kernel)是操作系统的核心部分,是运行在最高特权级上的系统软件,负责管理计算机的硬件资源,并为上层应用程序提供受控的访问接口。

这个定义里有三个关键词:

  1. 核心部分:内核不是操作系统的全部,但它是操作系统中最关键的部分。没有内核,操作系统就无法运转。
  2. 最高特权级:内核运行在 CPU 的最高特权级(通常称为内核态或 Ring 0),可以执行所有指令、访问所有硬件。
  3. 受控访问:应用程序不能直接操作硬件,必须通过内核提供的接口(系统调用)来请求服务。

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 中使用 pingcurlssh 等命令时,背后都有内核网络协议栈在默默工作。

四、内核的分类

内核并不是只有一种设计方式。根据内核功能的组织方式,可以分为三大类:宏内核、微内核和混合内核。
#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 内核
相关推荐
可涵不会debug1 小时前
公司外怎么连接管家婆?从 SQL Server 安装到 cpolar 固定 TCP 远程登录
linux·运维·ubuntu
wuyk5551 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 12 章 Linux 系统 WiFi 常用命令全集:iw/iwlist/ip/wpa_cli 实战
linux·网络·stm32·物联网·tcp/ip
wuminyu1 小时前
纯轻量级锁体系下C2编译器锁粗化和消除机制剖析
java·linux·c语言·jvm·c++
运维全栈笔记1 小时前
Nginx 模块化多业务站点通用配置模板
linux·运维·nginx
辛迪聊物业数字化1 小时前
【拆解智慧物业管理系统架构:从SaaS落地到IoT全链路实现】
大数据·linux·组合模式
j7~1 小时前
【C++微服务项目开发脚手架】(准备篇)从 0 到跑通:Docker 容器开发环境 + 宿主机用户 + Trae 远程连接 全链路踩坑实战
linux·c++·学习·xshell·docker容器·trae
程序员-Benothing2 小时前
Linux用户与组管理命令大全:useradd、usermod、groupadd、passwd
linux·运维·服务器
bksczm2 小时前
MySQL基础篇之事务
linux·数据库·sql·mysql
bksczm2 小时前
MySQL基础篇之视图与用户管理
linux·数据库·sql·mysql