操作系统

连续分配策略:首次适应、最佳适应与碎片问题

连续分配策略:首次适应、最佳适应与碎片问题 上一篇我们看到,基址/界限模型给每个进程一套独立坐标系,但它隐含了一个要求:进程必须占用一整段连续的物理内存。现在问题来了——内存就这么一大块,进程不停地来、不停地走,操作系统该怎么决定&quot...

2026-06-23 19 分钟 操作系统, 操作系统教程, 连续分配, 内存碎片
操作系统

内存管理基础:地址空间、重定位与保护

内存管理基础:地址空间、重定位与保护 你写一个 C 程序,打印某个全局变量的地址,可能会看到一个像 0x601040 这样的值。但你心里清楚,机器上插着的那条内存,物理上根本没有专门给你这个程序留下 0x601040 这个格子。更奇怪的是,...

2026-06-23 19 分钟 操作系统, 操作系统教程, 内存管理, 地址空间
操作系统

多级反馈队列:操作系统里的调度折中方案

多级反馈队列:操作系统里的调度折中方案 上一篇结尾留了个问题:FCFS、SJF、RR、优先级调度各有所长又各有硬伤,能不能把它们的优点揉到一起?这一篇的主角——多级反馈队列(MLFQ,Multi-Level Feedback Queue)—...

2026-06-23 18 分钟 操作系统, 操作系统教程, 多级反馈队列, 调度折中
操作系统

CPU 调度算法:FCFS、SJF、RR 与优先级调度

CPU 调度算法:FCFS、SJF、RR 与优先级调度 上一篇我们立下了一条铁规矩:评判调度必须先看目标。现在带着那些指标——吞吐量、周转时间、等待时间、响应时间、公平性——来逐一审视四个最经典的调度算法。 这四个算法不是孤立的知识点,而是...

2026-06-23 18 分钟 操作系统, 操作系统教程, CPU调度, 经典算法
操作系统

调度基础:批处理、分时与实时系统

调度基础:批处理、分时与实时系统 你有没有想过一个问题:你的笔记本同时开着浏览器、IDE、音乐播放器、十几个后台进程,CPU 核心却只有几个。它们凭什么看起来都在"同时"运行?答案是调度(scheduling)——操作系...

2026-06-23 18 分钟 操作系统, 操作系统教程, 调度基础, 系统类型
操作系统

死锁基础:产生条件、检测与解除

死锁基础:产生条件、检测与解除 上一篇哲学家进餐留下了一张"环形等待"的图:五个人转着圈互相等对方手里的筷子,谁也吃不上。那不是个孤立的谜题,而是并发世界里一类最特殊故障的缩影——死锁。 死锁的诡异之处在于:系统既没崩溃...

2026-06-23 18 分钟 操作系统, 操作系统教程, 死锁, 资源竞争
操作系统

经典同步问题:生产者消费者、读者写者与哲学家

经典同步问题:生产者消费者、读者写者与哲学家 生产者消费者、读者写者、哲学家进餐——这三道题几乎每本操作系统教材都讲,很多人当成考试题背了答案就丢。但如果你做过几年后端,会越来越体会到一件事:线上那些最棘手的并发 bug,剥开业务外衣,往往...

2026-06-23 18 分钟 操作系统, 操作系统教程, 经典同步问题, 并发模型
操作系统

管程与消息传递:更高层的并发抽象

管程与消息传递:更高层的并发抽象 到上一篇为止,你手里已经有了一套完整的并发工具:互斥锁、信号量、条件变量。理论上它们足够解决任何同步问题了。但只要你真用它们写过稍微复杂点的并发程序,就会有切肤之痛——这些工具太容易用错了。 P 和 V 必...

2026-06-23 20 分钟 操作系统, 操作系统教程, 管程, 消息传递
操作系统

信号量与条件变量:同步机制的经典工具

信号量与条件变量:同步机制的经典工具 上一篇我们把互斥讲透了,但你很快会撞上互斥锁解决不了的一类问题。设想一个任务队列:消费者线程拿到锁、发现队列是空的——然后呢?它能做什么?继续持锁等?那生产者永远拿不到锁往里放东西,死局。放掉锁再重新抢...

2026-06-23 20 分钟 操作系统, 操作系统教程, 信号量, 条件变量
操作系统

互斥与临界区:锁的最小问题模型

互斥与临界区:锁的最小问题模型 如果你写过后端服务,几乎一定遇到过这种事:单元测试跑得好好的,上线后偶尔出现一个对不上的数字——计数器少加了一次、库存超卖了一件、余额算错了几分。重跑一遍又复现不出来。这种"薛定谔的 bug&quo...

2026-06-23 19 分钟 操作系统, 操作系统教程, 互斥, 临界区