操作系统与并发底层原理多道技术
- 并发(Concurrency)
- 多道程序设计(Multiprogramming)
- 底层调度原理
🧠 一、先理解几个基础概念
1. 什么是操作系统(OS)?
操作系统是运行在计算机硬件上的核心程序,负责管理资源(CPU/内存/设备),协调各个应用程序的运行。
2. 什么是并发(Concurrency)?
并发是指“多个程序或任务在同一个时间段内交替执行”,让人感觉它们是在“同时运行”。
💡 注意:并发 ≠ 真并行(Parallelism)
并发是交替切换执行;并行是真正同时执行(多核)
3. 什么是多道技术(Multiprogramming)?
多道技术是操作系统的一个核心设计思想,允许多个程序“同时”驻留在内存中,通过CPU在它们之间快速切换,提高资源利用率。
🧩 二、从现实类比帮助你理解
场景类比:餐厅做饭 🍽️
- 单道程序设计 = 厨师每次只能做一道菜,做完才开始下一道。
- 多道程序设计 = 厨师能同时处理多道菜(先煮这个汤、等汤滚时炒青菜、青菜出锅后炸鸡翅…)
虽然本质上是一个人(CPU)干活,但它在多个任务之间来回切换,让你感觉“好像同时都在做”。
🧱 三、底层原理:操作系统怎么做到“并发”的?
✅ 1. 进程(Process)和线程(Thread)
- 进程 = 正在运行的程序,是资源分配的基本单位
- 线程 = 进程中的执行单元,是调度的基本单位
🔹 一个进程里可以有多个线程(比如浏览器主线程 + 视频线程 + JS线程)
✅ 2. CPU 时间片(Time Slice)切换机制
- 操作系统把 CPU 时间划分为“时间片”(几十毫秒)
- 每次只允许一个线程占用 CPU
- 时间片结束,切换到下一个线程 → 上下文切换
💡 这种快速切换的过程 + 多道程序的驻留 → 实现“并发运行”
✅ 3. 上下文切换(Context Switch)
-
当 CPU 从一个任务切换到另一个任务时,必须:
- 保存当前进程的寄存器、程序计数器、栈指针等状态
- 加载下一个进程的状态
-
这个过程就是“上下文切换”
-
太频繁的切换会带来性能开销
🧠 四、多道程序设计解决了什么问题?
问题 | 多道设计解决方案 |
---|---|
CPU 空闲 | 当一个程序在等 I/O 时,调度另一个任务执行 |
内存浪费 | 多个程序共享内存,提高使用率 |
资源利用率低 | 多个程序交替执行,不让资源空转 |
响应慢 | 快速切换任务,让系统更流畅 |
📦 五、操作系统中的调度策略(简化了解)
策略 | 简介 |
---|---|
先来先服务(FCFS) | 谁先来,谁先执行 |
时间片轮转(RR) | 每个任务轮流分配时间片 |
最短作业优先(SJF) | 先执行短的任务 |
多级反馈队列 | 综合考虑优先级和历史表现,现代系统常用 |
💡 六、可视化结构图(文字版)
+-------------------------+
| 操作系统(OS) |
| |
| [程序A] [程序B] [程序C] ← 多道程序同时驻留内存
| ↓ ↓ ↓
| 进程A 进程B 进程C ← 被加载为独立进程
| ↓ ↓ ↓
| 线程A1 B1 C1 ← OS按时间片轮流调度线程
| ↓ ↓ ↓
| ← CPU快速切换执行 →
| |
+-------------------------+
🧰 七、实际应用举例(你日常就在体验)
-
你同时打开:
- 浏览器(进程A)→ 看网页
- QQ(进程B)→ 接收消息
- WPS(进程C)→ 写文档
虽然只有一个 CPU(或有限几个核心),操作系统用 多道 + 并发 + 调度机制 让它们“看起来”同时运行。
📘 八、延伸学习关键词(你可以继续深入)
如果你想继续深入学习操作系统和并发原理,建议搜索和学习:
关键词 | 内容 |
---|---|
进程与线程的区别 | 多任务调度基础 |
上下文切换 | 并发的代价 |
进程控制块(PCB) | 存储进程信息的数据结构 |
时间片轮转算法 | 最基本调度策略 |
I/O阻塞与非阻塞 | 多道技术配合I/O调度 |
并发 vs 并行 | 计算机多任务基础概念 |
多核并发 | 真正同时执行的并行 |
✅ 总结一句话:
多道技术是操作系统的核心机制,它通过让多个程序同时驻留在内存中,快速切换 CPU 执行,结合进程调度与上下文切换,实现“并发执行”的效果。