linux


Linux

  • Linux 是一个类 Unix 操作系统内核,最初由 Linus Torvalds 在 1991 年开发。
  • “Linux”狭义上是指 内核(Kernel),它负责硬件管理(CPU、内存、磁盘、网络、外设等)、进程调度、内存管理、文件系统等。
  • 广义上,人们常说的“Linux”指的是 基于 Linux 内核的操作系统(发行版,Distribution),比如 Ubuntu、Debian、Fedora、Arch Linux、CentOS 等。

Linux架构

Linux架构通常可以从两个层面来理解:宏观的体系结构和微观的代码结构

宏观体系结构(分层模型)

这是最经典、最易于理解的视角,它将Linux系统划分为多个层次,如下图所示

+-------------------------------------------------+
|        用户空间                                 |
|    +--------------------+ +------------------+  |
|    |   应用程序 App A   | |   应用程序 App B |  |
|    +--------------------+ +------------------+  |
|    |        运行时库    | |   Shell/命令行   |  |
|    | (glibc, libc等)    | |   (bash, zsh等)  |  |
+-------------------------------------------------+
|           系统调用接口 (System Call Interface)  |
+-------------------------------------------------+
|        内核空间 (Kernel Space)                  |
|    +------------------------------------------+ |
|    |              内核 (Kernel)               | |
|    |  +----------+ +---------+ +------------+ | |
|    |  | 进程管理 | |内存管理 | | 文件系统   | | |
|    |  +----------+ +---------+ +------------+ | |
|    |  +----------+ +---------+ +------------+ | |
|    |  | 设备驱动 | |网络协议栈|| ...其他... | | |
|    |  +----------+ +---------+ +------------+ | |
+-------------------------------------------------+
|                  硬件 (Hardware)                |
|    (CPU, 内存, 磁盘, 网卡, 键盘, 鼠标等)        |
+-------------------------------------------------+

用户空间

这是用户应用程序运行的环境

  • 应用程序:用户直接使用的程序,如Firefox、LibreOffice、ls、cp等
  • 系统库:最核心的是C库(如glibc),它封装了系统调用,为应用程序提供丰富的、易于使用的API。此外,还有图形库(如OpenGL)、压缩库等
  • Shell:命令解释器,是用户与系统交互的界面

关键点:用户空间的程序不能直接访问硬件,它们运行在CPU的非特权模式下

内核空间

这是操作系统的核心,拥有最高权限,运行在CPU的特权模式下

  • 系统调用接口:这是一组非常精简的、定义明确的函数组合,是用户空间访问内核的唯一入口。例如read, write, open, fork等。这保证了系统的稳定和安全
  • 内核子系统
    1. 进程管理:
      • 负责进程的创建、调度、终止和通信
      • Linux内核的进程调度器非常高效,支持多任务、多用户
    2. 内存管理:
      • 管理物理内存和虚拟内存
      • 为每个进程提供独立的虚拟地址空间,通过分页机制实现
      • 负责内存的分配与回收、换入换出等
    3. 文件系统:
      • 提供了一个统一的虚拟文件系统接口,支持多种具体的文件系统,如Ext4, XFS, Btrfs, NTFS, FAT等
      • 管理文件和目录,处理数据的读写
    4. 设备驱动:
      • 包含了海量的、用于管理特定硬件设备的驱动程序
      • 它将硬件的操作细节封装起来,向上层提供一个统一的接口
    5. 网络协议栈:
      • 处理网络通信,实现了完整的TCP/IP协议栈
      • 负责数据包的routing, filtering等

硬件

包括计算机的所有物理设备:CPU、内存、硬盘、网卡、显示器等

内核架构模式(单内核与微内核)

Linux采用的是单内核架构,单具备模块化设计

  • 单内核:
    • 特点:操作系统的大部分功能(进程管理、内存管理、文件系统、设备驱动等)都作为一个完整的程序运行在同一个内核地址空间中
    • 优点:组件之间通信效率极高(直接函数调用),性能好
    • 缺点:耦合度高,一个驱动或组件的崩溃可能导致整个系统崩溃;内核体积庞大
  • 微内核:
    • 特点:内核只保留最核心的功能(如进程调度、低级内存管理、进程间通信),其他功能(如文件系统、设备驱动)作为独立的服务运行在用户空间
    • 优点:系统结构清晰,稳定性高(一个服务崩溃不会导致内核崩溃),易于扩展
    • 缺点:服务之间需要通过消息传递进行通信,性能开销较大

Linux的折中方案:模块化单内核
Linux本质上是单内核,但它引入了可加载内核模块机制来解决单内核的缺点

  • 核心内核:编译成一个单独的文件(如/boot/vmlinuz-xxx),包含最核心的功能
  • 内核模块:其他功能(尤其是设备驱动)可以编译成独立的模块文件(.ko文件),在需要时动态加载到内核中,不需要时可以卸载
  • 优势:既保持了单内核的高性能,又获得了微内核的灵活性和可扩展性,避免了内核过度膨胀

微观代码结构(源码目录)

如果想深入了解,可以查看Linux内核的源代码树,其目录结构清晰地反映了其架构

# 假设进入了Linux内核源码的根目录
linux/
├── arch/       # 体系结构相关代码 (如 x86/, arm64/, riscv/)
├── block/      # 块设备层(磁盘I/O调度)
├── crypto/     # 加密算法
├── drivers/    # 设备驱动程序 (这是最大最杂的目录)
├── fs/         # 文件系统 (如 ext4/, nfs/, fat/)
├── include/    # 头文件
├── init/       # 系统初始化代码
├── ipc/        # 进程间通信 (如信号量, 共享内存)
├── kernel/     # 核心子系统 (进程调度, 定时器)
├── lib/        # 内核通用库函数
├── mm/         # 内存管理
├── net/        # 网络协议栈 (如 ipv4/, ipv6/, wireless/)
├── samples/    # 示例代码
└── tools/      # 开发工具

总结

Linux架构的核心要点:

  1. 分层设计:清晰的用户空间和内核空间分离,通过系统调用作为桥梁
  2. 单内核模式:追求极致的性能,核心功能紧密集成
  3. 模块化设计:通过可加载内核模块弥补单内核的不足,实现高度的灵活性和可扩展性
  4. 子系统分工明确:进程、内存、文件、网络、设备驱动五大子系统各司其职,共同协作

组成部分

一个完整的 Linux 系统一般包含三部分:

  1. 内核(Kernel) → 硬件和软件的桥梁。
  2. GNU 工具链 → 提供基本命令(ls, cp, grep)、编译器(gcc)、shell(bash/zsh)。
  3. 软件生态 → 各种应用程序和库(GUI 桌面环境 GNOME/KDE,服务器软件 Nginx/MySQL,开发工具 Vim/VSCode 等)。

Linux也被称作 “GNU/Linux”,强调 GNU 工具在 Linux 系统中的重要性。


特点

  • 开源(GPL 协议):任何人都可以查看源码、修改和分发。
  • 稳定和安全:广泛用于服务器和嵌入式系统。
  • 多用户、多任务:支持多个用户同时登录、同时运行不同进程。
  • 高度可定制:从桌面环境到内核都可以裁剪和修改。
  • 跨平台:运行在从手机(Android 内核就是 Linux)到超级计算机的各种设备上。

应用领域

  • 服务器(占据全球大部分网站和云服务):Nginx、Apache、MySQL、Docker 等都跑在 Linux 上。
  • 桌面操作系统:如 Ubuntu、Fedora、Linux Mint。
  • 嵌入式系统:路由器、智能家居、电视盒子。
  • 移动设备:Android 就是基于 Linux 内核。
  • 超级计算机:全球前 500 台超级计算机几乎全部运行 Linux。
  • 开发与科研:图形学、AI、编译器开发、操作系统学习等。

和其他系统对比

  • 和 Windows

    • Windows 闭源、商业化,用户体验更友好。
    • Linux 开源、灵活,命令行强大,开发者和服务器更喜欢。
  • 和 macOS

    • macOS 也是 Unix-like 系统(基于 BSD),有漂亮的 UI。
    • Linux 自由度更高、社区更活跃,但桌面软件生态不如 macOS/Windows。