很多刚接触 Linux 的同学都会有一个疑问:

Linux到底是什么?

有人说 Ubuntu 是 Linux;有人说 Linux 就是命令行;还有人说 Linux 就是黑窗口。

实际上,这些说法都不准确。

严格来说:

Linux 本身只是一个内核(Kernel)

真正完整的 Linux 系统,是由内核、系统调用、Shell、系统库、文件系统、驱动程序以及应用程序共同构成的。

本文将通过一张 Linux 系统结构图,带你从底层到顶层彻底理解 Linux 的组成以及各部分之间的关系。

一、Linux系统整体结构

Linux 系统采用典型的分层设计:

整个过程可以理解为:

用户不能直接操作硬件,而是通过应用程序发起请求,请求经过系统接口进入内核,再由内核统一调度硬件资源。

可以简单理解成:

用户 → 软件 → 内核 → 硬件

内核就是整个系统的“大管家”。

二、硬件层(Hardware)

Linux 最底层是真实硬件:

  • CPU
  • 内存(RAM)
  • 硬盘(SSD/HDD)
  • 网卡
  • 显卡
  • 其他设备(USB、鼠标、键盘等)

这些硬件的核心职责是提供系统运行所需的基础资源:

  • CPU:负责计算和处理任务
  • 内存:负责临时存储运行数据
  • 磁盘:负责数据的持久化保存
  • 网卡:负责网络通信
  • 其他设备:提供输入输出能力

不过,硬件本身并不会直接与用户程序进行交互,因为不同厂商和设备之间存在较大的差异。例如 Intel 与 AMD 的 CPU 指令实现存在区别,不同品牌网卡的驱动接口也不统一。如果让应用程序直接操作硬件,开发难度和兼容成本都会非常高。因此,需要一个统一的管理层来屏蔽底层差异、协调硬件资源,这时候 Linux 内核就登场了。

三、Linux内核(Kernel):整个系统的核心

Linux 内核处于硬件和用户程序之间。

它负责:

  • 管理CPU
  • 管理内存
  • 管理进程
  • 管理文件
  • 管理网络
  • 控制设备

直接地说:

没有内核,系统根本无法运行。

Linux 内核主要包含几个重要模块。

1.进程管理

进程就是运行中的程序。

例如:

打开浏览器:一个进程

打开微信:一个进程

打开 VSCode:一个进程

但是 CPU 数量有限,所以内核需要决定。谁先运行,谁后运行,谁占用多少时间

这个过程叫:进程调度

Linux 默认使用:CFS(完全公平调度器)、实现多任务并发。

2.内存管理

内存管理主要负责:

  • 分配内存
  • 回收内存
  • 虚拟内存
  • 页面置换

Linux 引入:虚拟内存机制

通俗来说,就是让每个程序感觉自己独占全部内存。

实际情况:程序A:虚拟地址>内核映射>物理地址

这样实现了程序之间互不影响,提高系统稳定性。

3.文件系统管理

文件系统可以理解成:内核负责管理数据如何组织、存储、查找和访问的一套机制。它是连接“用户程序”和“磁盘数据”的桥梁。Linux 有一个经典思想:一切皆文件

文件系统负责:

  • 创建文件
  • 删除文件
  • 权限控制
  • 目录管理

常见文件系统:ext4、xfs、btrfs、ntfs

4.设备驱动管理

设备驱动相当于翻译官。

应用程序:“我要访问网卡”

驱动:“翻译成硬件可识别指令”

Linux 大量代码其实都是驱动代码。

常见驱动:

  • 网卡驱动
  • 显卡驱动
  • 声卡驱动
  • USB驱动

5.网络子系统

Linux 在服务器领域强大的核心原因之一就是:

网络能力极强。

网络栈:Socket>TCP/IP>驱动>网卡

支持:

  • TCP
  • UDP
  • IPv6
  • 路由
  • 防火墙

四、硬件抽象层(HAL)

如果每种硬件都直接暴露给系统,那么程序开发将极其复杂。

因此 Linux 引入硬件抽象思想。

作用是:屏蔽底层硬件差异。

结构关系:

应用程序
    ↓
内核
    ↓
HAL
    ↓
驱动
    ↓
硬件

HAL 会向上提供统一接口

例如:对于程序而言:

read()
write()

无需知道底层设备到底是:

  • SSD
  • HDD
  • U盘
  • 网络磁盘

这样做最大的好处是:提高系统可移植性。

Linux 能运行在:x86、ARM、RISC-V背后离不开抽象机制。

五、系统调用:用户程序进入内核的大门

应用程序不能直接操作内核,否则系统会失控。

因此 Linux 提供:System Call(系统调用)

常见调用:

open()
read()
write()
fork()
socket()

系统调用过程:应用程序>系统调用>Linux内核

系统调用其实就是:

用户空间和内核空间之间的桥梁。

六、系统库(System Library)

直接使用系统调用开发非常复杂,因此 Linux 提供系统库进行封装。

最常见:glibc

开发者写:

printf()

实际过程:

printf()
↓
glibc
↓
write()
↓
系统调用
↓
Linux内核

系统库的作用:把复杂底层接口转换成更容易使用的开发接口,开发效率会大幅提高。

七、Shell与图形界面

Shell 是人与 Linux 交流的窗口。

常见:

  • Bash
  • Zsh
  • Fish

输入:

ls

Shell 执行:

接收命令
↓
解析命令
↓
创建进程
↓
调用程序
↓
输出结果

除了命令行模式,Linux 还支持图形界面。

常见桌面环境:

  • GNOME
  • KDE

本质上:

Shell 与 GUI 都属于人机交互层。

八、应用程序层

应用层是用户真正接触最多的一层。

例如:

  • 浏览器
  • IDE
  • 数据库
  • 办公软件
  • 视频播放器

应用程序一般不会直接访问硬件。

而是:

应用程序
↓
系统库
↓
系统调用
↓
Linux内核
↓
硬件

看似一个简单点击动作。

实际上背后会经过很多组件协同工作。

例如打开浏览器:

可能涉及:文件读取;内存申请;网络连接;图形显示。这些都依赖内核管理。

写在最后

Linux 最大的设计思想其实只有四个字:

抽象与分层

这种设计带来的优势包括:

  • 高稳定性
  • 高性能
  • 易扩展
  • 易维护
  • 强可移植性

这也是 Linux 能够覆盖服务器、手机、嵌入式设备乃至超级计算机的重要原因。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐