进程与线程的核心区别及 Linux 启动全过程解析

一句话总结

进程是资源分配的基本单位,线程是 CPU 调度的基本单位。

1. 进程(Process)

定义

进程是一个正在运行的程序实例,拥有独立的系统资源。

进程拥有的资源

  1. 独立的 虚拟地址空间
  2. 文件描述符(FD)
  3. 堆、栈
  4. 全局变量
  5. 打开的 socket、管道等

主要特点

  1. 进程之间相互隔离,一个崩溃不会影响另一个
  2. 进程间通信(IPC)成本高,如:管道、共享内存、消息队列等
  3. 创建或销毁进程的成本较高(需分配/回收大量资源)

2. 线程(Thread)

定义

线程是进程中的一个执行流,是 CPU 调度的最小单位。

线程共享的进程资源

  1. 地址空间
  2. 全局变量
  3. 文件描述符
  4. 堆

每个线程拥有独立的:

  1. 栈(stack)
  2. 寄存器(PC、SP)
  3. 线程局部存储(TLS)

主要特点

  1. 线程间切换速度快于进程
  2. 线程间通信简单(直接共享内存)
  3. 一个线程崩溃可能导致整个进程崩溃

3. 工程级对比

|---------|------------|------------|
| 项目 | 进程 | 线程 |
| 调度单位 | ❌ | ✔(线程) |
| 资源分配单位 | ✔ | ❌ |
| 地址空间 | 独立 | 共享 |
| 通信成本 | 高(IPC) | 低(共享内存) |
| 创建/销毁开销 | 大 | 小 |
| 崩溃影响 | 互不影响 | 会影响整个进程 |
| 适用场景 | 服务隔离、多进程架构 | 高并发、计算密集任务 |

4. Linux 启动过程(从按下电源到登录界面)

Linux 的启动过程可分为五大阶段,适用于服务器、桌面和嵌入式系统,核心流程基本一致:

1. 系统固件阶段:BIOS / UEFI 初始化

  1. 按下电源后:
    1. 执行 POST(Power-On Self-Test):检查 CPU、内存、硬盘等硬件
    2. 初始化硬件
    3. 寻找可启动设备(硬盘、U 盘、网络等)
    4. 加载并执行 Boot Loader(如 GRUB)
  2. 加载 Boot Loader 的方式:
    1. BIOS 通过 MBR 找 Boot Loader
    2. UEFI 通过 EFI System Partition(ESP)直接加载 Boot Loader

2. Boot Loader 阶段(如 GRUB)

  1. 主要任务:
    1. 显示启动菜单
    2. 选择内核版本
    3. 加载 Linux 内核(vmlinuz)
    4. 加载 initramfs
    5. 把控制权交给内核
  2. GRUB 配置文件路径:
    1. /boot/grub/grub.cfg

3. 内核加载阶段(Kernel)

  1. GRUB 将内核加载到内存后,内核开始执行:
    1. 解压内核
    2. 初始化 CPU、内存管理、驱动
    3. 挂载临时根文件系统 initramfs
    4. 探测硬件
    5. 挂载真正的 rootfs(如 ext4、xfs 等)
    6. 启动第一个用户态进程:init(PID=1)

4. Initramfs 阶段(临时根文件系统)

  1. initramfs 用于:
    1. 加载必要驱动(如磁盘、文件系统)
    2. 处理 LVM、RAID、加密卷
    3. 找到真正的根文件系统并切换到它

这是内核启动早期非常关键的一步。

5. 用户空间初始化(systemd / init)

  1. 内核启动 PID=1:
    1. 旧系统:/sbin/init
    2. 现代 Linux:systemd
  2. systemd 负责:
    1. 启动系统服务(networkd、udevd、sshd 等)
    2. 挂载文件系统
    3. 管理 target(multi-user.target、graphical.target)
    4. 最终启动登录界面(TTY 或 GUI)

完整流程图(文字版)

复制代码
[按下电源]

      ↓

[BIOS/UEFI → POST → 寻找启动设备]

      ↓

[Boot Loader (GRUB) → 加载内核 + initramfs]

      ↓

[Kernel → 初始化硬件 → 挂载 initramfs → 挂载 rootfs]

      ↓

[systemd/init → 启动服务 → 登录界面]

一句话总结

Linux 启动过程 = 固件初始化 → Boot Loader → 内核 → initramfs → systemd。

相关推荐
Ruiery41 分钟前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
欧米欧1 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery1 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
Sakura_j_h_1 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
qetfw2 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
程序喵大人2 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
一木 之林3 小时前
Dify学习笔记 03 · RAG检索增强生成:三代范式、评估与落地(第40-45、55-56集)
笔记·小程序·交互·dify
逆风的蚂蚁4 小时前
linux服务器性能调整怎么落地?我把 CPU 调度、I/O 优先级和内核参数这几个旋钮都拧了一遍
linux·运维·服务器
apple-mapping4 小时前
网络RTK定位学习总结
学习·网络rtk
jimy14 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++