fork 之后父子进程如何通过写时复制共享内存页?
围绕“fork 之后父子进程如何通过写时复制共享内存页”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确只读共享加写保护触发复制的机制。
操作系统面试题第 2 页,显示第 51–100 题,共找到 135 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“fork 之后父子进程如何通过写时复制共享内存页”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确只读共享加写保护触发复制的机制。
围绕“什么是按需调页,exec 一个新程序后为什么能立即开始运行”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确页表先建立但页帧延迟分配的机制。
围绕“脏页是如何被写回磁盘的,dirty_ratio 和 dirty_background_ratio 起什么作用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确后台写回与同步阻塞写回两个阈值的行为。
围绕“多线程程序中什么是伪共享(false sharing),如何避免”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确同缓存行多核失效 ping-pong 的机制与对齐填充手段。
围绕“为什么 fork 一个大内存进程通常很快,什么情况下 fork 会变慢”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确复制页表而非页帧的成本模型及大页表场景。
围绕“大页(Huge Page)为什么能提升数据库等应用的性能”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确减少页表项与 TLB miss 的机制及适用负载。
围绕“KSM 内核同页合并如何为虚拟化场景节省内存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确扫描合并相同页的机制与 CPU 开销。
围绕“Linux 如何通过 LRU 链表管理可回收页面”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 active/inactive 链表的页面迁移规则。
围绕“madvise 的 MADV_DONTNEED 和 MADV_WILLNEED 分别解决什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确丢弃与预读提示的行为及风险。
围绕“malloc 分配小内存和大内存分别走 brk 和 mmap 的原因是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确堆扩展与独立映射的碎片和归还差异。
围绕“为什么 free 之后进程的 RSS 往往不会立即下降”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确分配器缓存与堆顶归还条件。
围绕“mmap 的 MAP_SHARED 和 MAP_PRIVATE 在写操作后行为有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确写回文件与写时复制私有副本的差异。
围绕“虚拟化中内存气球(ballooning)如何回收虚拟机的空闲内存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确客户机驱动充气让客户机自己换页/释放的机制。
围绕“缓存一致性协议和内存屏障分别解决多核编程中的什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分硬件保证一致性与编译器/CPU 重排序两个层面。
围绕“内存内部碎片和外部碎片的成因分别是什么,各用什么手段缓解”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按分配单元内外区分两类碎片并对应缓解手段。
围绕“如何区分进程是内存泄漏还是被 glibc 分配器缓存了内存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出观测分配器统计与 valgrind 类工具的判定路径。
围绕“次缺页和主缺页有什么区别,如何用 minflt/majflt 判断程序瓶颈”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确是否需要磁盘 I/O 这一判定标准及排查含义。
围绕“mlock 锁定的内存有什么保证,数据库为什么用它”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确防止换出的语义与典型场景。
围绕“匿名 mmap 和文件 mmap 在页面来源与回收路径上有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 swap 与页缓存两条回收路径的差异。
围绕“用 mmap 读文件和用 read 读文件在数据拷贝和缺页上有什么差异”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确页缓存映射与 read 的额外拷贝及随机小读的劣势。
围绕“NUMA 架构下跨节点访问内存的代价是什么,如何做内存亲和优化”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确本地与远程节点延迟差异及绑定手段。
围绕“Linux OOM Killer 如何挑选要杀死的进程”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 oom_score 的计算因素与调整手段。
围绕“Linux 内存超卖(overcommit)策略的三种模式分别意味着什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释 vm.overcommit_memory 三种取值对分配成败的影响。
围绕“Linux 页缓存是什么,为什么 free 显示的可用内存很少但系统并不缺内存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确缓存可回收性与 available 指标的读法。
围绕“发生缺页异常时操作系统内核的完整处理流程是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按内核处理顺序回答从异常入口到恢复执行的步骤,不区分 minor/major fault 的对比。
围绕“常见的页面置换算法有哪些,为什么 LRU 在实际内核中被近似实现”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较各算法的开销与近似原因。
围绕“内存分页和分段有什么区别,为什么主流系统以分页为主”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确固定大小与变长大小带来的碎片差异。
围绕“Linux 内核的 slab 分配器解决什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确小对象高频分配的内部碎片与初始化成本。
围绕“生产服务器应该禁用 swap 吗,保留少量 swap 的理由是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须权衡换出冷匿名页的价值与换页延迟风险。
围绕“vm.swappiness 参数如何影响匿名页与页缓存的回收倾向”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确取值含义与调成低值的适用场景。
围绕“Linux 透明大页(THP)的 always/madvise/never 策略如何取舍”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确自动合并的收益与分配延迟、碎片风险。
围绕“TLB 在地址转换中起什么作用,TLB miss 时代价有多大”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确缓存页表项避免多级遍历的机制及 miss 路径。
围绕“多核系统中修改共享页表后为什么需要 TLB shootdown”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确各核私有 TLB 与 IPI 失效广播的成本来源。
围绕“虚拟机中客户机虚拟地址到宿主机物理地址经历几级翻译”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 guest VA→guest PA→host PA 两级页表及硬件辅助。
围绕“宿主机回收虚拟机内存时,balloon 和 KSM 各适用于什么场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较主动归还与被动去重的触发方式和开销。
围绕“CPU 如何将虚拟地址翻译成物理地址”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确多级页表逐级查找与 MMU 的角色。
围绕“什么是内存抖动(thrashing),如何诊断系统正在抖动”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出工作集超过物理内存的成因和可观测指标。
围绕“为什么现代操作系统使用多级页表而不是单级页表”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须用 64 位地址空间算清单级页表的内存开销来说明动机。
围绕“为什么操作系统需要虚拟内存而不是直接使用物理内存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确隔离、超配、地址连续性与共享四个动机。
围绕“什么是工作集模型,它和驻留集大小 RSS 有什么关系”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确工作集概念如何指导内存容量评估。
围绕“zswap 和 zram 在压缩换出路径上有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确压缩写回缓存与压缩块设备两条路径的差异。
围绕“原子操作和无锁编程能解决什么问题,为什么原子变量不等于线程安全”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分单变量原子性与复合操作的原子性缺失。
围绕“Linux CFS 完全公平调度器如何用 vruntime 决定下一个运行的任务”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释虚拟运行时间与红黑树选择最小者的机制。
围绕“条件变量为什么必须与互斥锁配合、wait 为什么要在 while 循环里”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释虚假唤醒与唤醒时谓词可能再次失效。
围绕“为什么频繁上下文切换会降低性能,如何在压测中观测”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出 TLB/缓存失效与内核开销两类成本及观测工具。
围绕“一次进程上下文切换具体保存和恢复哪些内容”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须列出寄存器、栈指针、页表与 TLB 影响。
围绕“CPU 亲和性是什么,绑核在什么场景能提升性能”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明缓存局部性收益与负载不均风险。
围绕“死锁的四个必要条件是什么,面试中如何用它推导排查思路”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须列出互斥、占有等待、不可剥夺、循环等待并说明破坏任一即可预防。
围绕“线上进程疑似死锁,如何用 gdb、pstack 或 /proc 定位持锁线程”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出抓线程栈、比对锁持有的实操路径。
围绕“epoll 水平触发与边缘触发的区别是什么,ET 模式为什么必须配非阻塞 fd”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释 ET 只通知一次导致必须读到 EAGAIN 的原因。