Jorgen's blog Jorgen's blog
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

jorgen

Love it, make mistakes, learn, keep grinding.
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机系统漫游
  • 进程与线程:操作系统的核心调度单元
    • 前言
    • 进程:程序的执行实体
      • 进程的概念
      • 进程的状态变迁
    • 线程:轻量级的执行单元
      • 为什么需要线程?
      • 线程 vs 进程
    • 进程调度算法
      • 先来先服务 (FCFS)
      • 最短作业优先 (SJF)
      • 时间片轮转 (RR)
    • 多线程编程的挑战
      • 竞争条件
      • 解决方案
    • 结语
  • 12.内存管理-操作系统的资源分配大师
  • 16.内存管理-操作系统的资源分配艺术
  • 内存管理-操作系统的核心资源分配
  • 内存管理-操作系统的核心资源分配器
  • 内存管理-操作系统的核心资源分配机制
  • 内存管理:操作系统的核心资源调度
  • 内存管理:操作系统的资源分配大师
  • 内存管理 - 操作系统的资源分配核心
  • 内存管理:操作系统的资源分配艺术
  • 文件系统与I/O管理-操作系统的数据持久化桥梁
  • 设备管理-操作系统的硬件交互之门
  • 进程间通信-操作系统的对话桥梁
  • 操作系统安全与保护-数字世界的守护者
  • 调度算法-操作系统的指挥棒
  • 死锁-操作系统的资源竞争困境
  • 系统调用-应用程序与操作系统的对话桥梁
  • 虚拟化技术-操作系统的资源抽象魔法
  • 实时操作系统-时间的守护者
  • 并发控制-操作系统的协同艺术
  • 中断处理-操作系统的生命线
  • 分布式操作系统-跨越多机的资源协调大师
  • 操作系统启动过程-从按下电源键到可用的奇妙旅程
  • 页面置换算法-操作系统的内存魔术师
  • operating_system
Jorgen
2023-10-15
目录

进程与线程:操作系统的核心调度单元

# 前言

在《计算机系统漫游》中我们了解了计算机系统的整体架构,但操作系统最核心的魔法发生在资源调度层面。想象一下,当你在浏览器听音乐的同时编辑文档,后台还有下载任务在进行,这一切看似无缝的体验背后,是操作系统对进程和线程的精密调度。今天我们就来揭开这个多任务处理的神秘面纱。

提示

"进程是资源分配的基本单位,线程是CPU调度的基本单位" —— 操作系统经典定义

# 进程:程序的执行实体

# 进程的概念

当你双击一个应用程序,操作系统会创建一个进程来容纳这个程序的所有活动。每个进程都拥有独立的:

  • 地址空间
  • 文件描述符
  • 安全凭证
  • 资源配额

# 进程的状态变迁

graph LR
A[创建] --> B[就绪]
B --> C[运行]
C --> D[阻塞]
D --> B
C --> E[终止]
1
2
3
4
5
6

🏗 进程就像一个独立的"集装箱",装载着程序运行所需的一切资源。操作系统通过进程控制块(PCB)管理每个进程的状态信息。

# 线程:轻量级的执行单元

# 为什么需要线程?

🤔 如果进程已经足够,为什么还要线程?因为创建进程的成本太高!而线程:

  • 共享进程地址空间
  • 拥有独立的栈和寄存器
  • 创建/切换开销比进程小10-100倍

# 线程 vs 进程

特性 进程 线程
资源分配 独立地址空间 共享进程地址空间
切换开销 高(涉及内存映射) 低(仅需切换寄存器)
通信方式 管道/消息队列/共享内存 全局变量/共享内存
健壮性 一个崩溃不影响其他 一个崩溃可能导致整个进程崩溃

# 进程调度算法

操作系统就像交通警察,需要智能调度进程使用CPU。常见算法有:

# 先来先服务 (FCFS)

进程A(5ms) -> 进程B(3ms) -> 进程C(2ms)
平均等待时间: (0+5+8)/3 = 4.33ms
1
2

# 最短作业优先 (SJF)

进程B(3ms) -> 进程C(2ms) -> 进程A(5ms)
平均等待时间: (0+3+5)/3 = 2.67ms
1
2

# 时间片轮转 (RR)

每个进程分配固定时间片,超时则让出CPU:

时间片=2ms: 
A(2) -> B(2) -> C(2) -> A(2) -> B(1) -> C(0)
1
2

💡 现代操作系统通常采用多级反馈队列调度,结合多种算法优势。

# 多线程编程的挑战

虽然线程带来性能提升,但也引入了并发问题:

# 竞争条件

int counter = 0;
void increment() {
    counter++; // 非原子操作!
}
1
2
3
4

# 解决方案

  • 互斥锁 (Mutex)
  • 信号量 (Semaphore)
  • 条件变量 (Condition Variable)

"在多线程编程中,忘记加锁就像在高速公路上逆行,不出事则已,一出就是大事。"

# 结语

进程和线程是操作系统实现多任务并发的基石。理解它们的工作原理,不仅能帮助我们写出更高效的程序,更能让我们欣赏到操作系统设计中的精妙智慧。下次当你享受多任务处理的便利时,不妨想想背后那些默默工作的调度算法和线程切换机制。

"真正的魔法不在于硬件有多快,而在于操作系统如何让硬件高效协作"

#进程#线程#调度#并发
上次更新: 2026/01/28, 14:21:05
计算机系统漫游
12.内存管理-操作系统的资源分配大师

← 计算机系统漫游 12.内存管理-操作系统的资源分配大师→

最近更新
01
LLM
01-30
02
intro
01-30
03
intro
01-30
更多文章>
Theme by Vdoing | Copyright © 2019-2026 Jorgen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式