连续分配策略:首次适应、最佳适应与碎片问题
连续分配策略:首次适应、最佳适应与碎片问题 上一篇我们看到,基址/界限模型给每个进程一套独立坐标系,但它隐含了一个要求:进程必须占用一整段连续的物理内存。现在问题来了——内存就这么一大块,进程不停地来、不停地走,操作系统该怎么决定"...
连续分配策略:首次适应、最佳适应与碎片问题 上一篇我们看到,基址/界限模型给每个进程一套独立坐标系,但它隐含了一个要求:进程必须占用一整段连续的物理内存。现在问题来了——内存就这么一大块,进程不停地来、不停地走,操作系统该怎么决定"...
内存管理基础:地址空间、重定位与保护 你写一个 C 程序,打印某个全局变量的地址,可能会看到一个像 0x601040 这样的值。但你心里清楚,机器上插着的那条内存,物理上根本没有专门给你这个程序留下 0x601040 这个格子。更奇怪的是,...
多级反馈队列:操作系统里的调度折中方案 上一篇结尾留了个问题:FCFS、SJF、RR、优先级调度各有所长又各有硬伤,能不能把它们的优点揉到一起?这一篇的主角——多级反馈队列(MLFQ,Multi-Level Feedback Queue)—...
CPU 调度算法:FCFS、SJF、RR 与优先级调度 上一篇我们立下了一条铁规矩:评判调度必须先看目标。现在带着那些指标——吞吐量、周转时间、等待时间、响应时间、公平性——来逐一审视四个最经典的调度算法。 这四个算法不是孤立的知识点,而是...
调度基础:批处理、分时与实时系统 你有没有想过一个问题:你的笔记本同时开着浏览器、IDE、音乐播放器、十几个后台进程,CPU 核心却只有几个。它们凭什么看起来都在"同时"运行?答案是调度(scheduling)——操作系...
死锁基础:产生条件、检测与解除 上一篇哲学家进餐留下了一张"环形等待"的图:五个人转着圈互相等对方手里的筷子,谁也吃不上。那不是个孤立的谜题,而是并发世界里一类最特殊故障的缩影——死锁。 死锁的诡异之处在于:系统既没崩溃...
经典同步问题:生产者消费者、读者写者与哲学家 生产者消费者、读者写者、哲学家进餐——这三道题几乎每本操作系统教材都讲,很多人当成考试题背了答案就丢。但如果你做过几年后端,会越来越体会到一件事:线上那些最棘手的并发 bug,剥开业务外衣,往往...
管程与消息传递:更高层的并发抽象 到上一篇为止,你手里已经有了一套完整的并发工具:互斥锁、信号量、条件变量。理论上它们足够解决任何同步问题了。但只要你真用它们写过稍微复杂点的并发程序,就会有切肤之痛——这些工具太容易用错了。 P 和 V 必...
信号量与条件变量:同步机制的经典工具 上一篇我们把互斥讲透了,但你很快会撞上互斥锁解决不了的一类问题。设想一个任务队列:消费者线程拿到锁、发现队列是空的——然后呢?它能做什么?继续持锁等?那生产者永远拿不到锁往里放东西,死局。放掉锁再重新抢...
互斥与临界区:锁的最小问题模型 如果你写过后端服务,几乎一定遇到过这种事:单元测试跑得好好的,上线后偶尔出现一个对不上的数字——计数器少加了一次、库存超卖了一件、余额算错了几分。重跑一遍又复现不出来。这种"薛定谔的 bug&quo...