进程、内存与持久性的工作方式
进程、线程与调度
前置:能区分进程、线程、就绪与阻塞,理解队列和时间片;Python 3.10+ 仅用于轮转调度模型。教学范围为OSTEP虚拟化/并发/持久化模型;Python 3.10+。核对日期2026-10-17。示例未执行,本轮没有安装依赖、生成协议代码、启动服务或浏览器预览。完整文件与输入见轮转调度模型、输入与练习;推演结论只适用于写明的模型。
进程与线程共享什么
两个线程处理同一进程的计数器时会访问相同堆地址,但各自暂停位置与局部调用链不同。单核可以交错执行两个线程,多核才可能在同一瞬间并行;共享地址不代表共享数据自动免于竞争。
查看图表代码
进程与线程共享什么首先区分地址空间与执行上下文。同进程线程通常共享堆与全局数据,各自有寄存器和栈;进程隔离也可通过显式共享内存打通。线程数不是可同时占用CPU核数,并发与并行也不是同一个概念。
系统调用为什么切换
一次立即完成的系统调用可以始终由同一个线程执行。只有需要等待或被抢占等情况,调度器才可能选择另一个线程;因此不能把用户态进入内核态等同于任务更换。
查看图表代码
系统调用为什么切换:普通代码不能任意改页表或设备状态,受控入口进入内核处理特权操作。模式切换不必更换进程,进程上下文切换则还需恢复调度对象状态;不能把每次函数调用都算成系统调用。
轮转调度计算模型
轮转调度计算模型给就绪任务一个有限时间片,用完移到队尾。本文假设任务均在时刻0到达、单CPU、无IO和切换开销,因而能手算公平性;真实调度器还需优先级、唤醒和多核亲和,不能用教学输出预测Linux时延。
来源与适用边界
- 英文官方、作者或规范原文:本专题机制依据;按上述固定版本族阅读。
- 中文官方或作者资料:用于术语和讲解交叉核对,冲突以原始规范为准。
虚拟内存、并发与死锁
分页与地址转换
页大小4KiB时,虚拟地址0x1234拆为页号1、偏移0x234。若页表把虚拟页1映到物理页框9,物理地址就是0x9234。TLB未命中时页表仍可能给出有效映射,不需要从磁盘读取。
查看图表代码
分页与地址转换把虚拟地址拆成页号和页内偏移,通过页表找物理页。TLB缓存翻译结果,TLB未命中并不必然缺页;缺页意味着映射或权限需要内核处理,可能是合法按需分配也可能终止进程。
丢更新与临界区
下图是一种合法交错,最终只有1而非2。要保护的是读取、计算、写回整体;锁住两个独立的写回动作仍无法修复此前读到旧值的问题。原子递增也必须符合相应语言的同步规则。
查看图表代码
丢更新与临界区可手推:两个线程都读到0,各自加1再写回1。读改写不是单个原子操作,需要互斥或适当原子协议覆盖完整临界区。只给写操作加锁仍允许两个线程先读旧值,内存可见性也需语言内存模型约束。
死锁四条件与顺序
假设两把不可重入互斥锁,每把只有一个持有者,线程不会主动释放已持锁。A持L1等L2,B持L2等L1形成等待环。若全部线程始终先取L1再取L2,B无法先持L2,下面这个环就无法形成。
查看图表代码
死锁四条件与顺序包括互斥、占有等待、不可剥夺与循环等待。给资源全局顺序并始终按序获取可以破坏循环等待;超时只是退出策略,未释放已持资源会继续阻塞。饥饿不一定形成环,需要另查调度与公平性。
来源与适用边界
- 英文官方、作者或规范原文:本专题机制依据;按上述固定版本族阅读。
- 中文官方或作者资料:用于术语和讲解交叉核对,冲突以原始规范为准。
文件持久性与操作系统排错
文件持久性边界
图中每个箭头都跨越不同缓冲边界。write成功通常先表示内核接收字节,持久化接口要求把相关状态推进到所承诺的存储边界;原子替换还要考虑目录项。具体保证由文件系统、接口和设备决定,不能仅靠一次close推断掉电结果。
查看图表代码
文件持久性边界针对崩溃模型,要区分应用缓存、内核缓存与稳定存储。写入函数返回不意味着断电后一定保留,原子替换文件还涉及文件内容与目录项的持久顺序。日志恢复修复的是规定故障模型中的一致性,不能代替备份。
操作系统现象证据
操作系统现象证据应区分任务正在运行、可运行但排队,或阻塞等IO。CPU低并不能证明程序空闲,可能所有线程等锁;内存占用也不能直接当泄漏,缓存与映射需分别解释。本轮只手推模型,无系统性能采样。
操作系统阅读边界
操作系统阅读边界采用作者英文OSTEP与作者站点中文译本,围绕虚拟化、并发和持久化。历史自考笔记仍作为考试资料保留,错误题集不是当前内核规范;新课不将考试口径推广为所有平台行为。
来源与适用边界
- 英文官方、作者或规范原文:本专题机制依据;按上述固定版本族阅读。
- 中文官方或作者资料:用于术语和讲解交叉核对,冲突以原始规范为准。
- 相关既有参考:原URL与专业范围保留;历史案例不能自动代表当前实现。
继续阅读
- 持久性与参考
- 持久性与参考
- 持久性与参考