fork 之后父子进程如何通过写时复制共享内存页?
fork 之后父子进程如何通过写时复制共享内存页? 本文先给出可直接复述的结论,再用最小代码说明fork 写时复制 copy on write的工作方式、判断依据、项目边界和常见误区。
操作系统面试题第 2 页,显示第 51–100 题,共找到 135 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
fork 之后父子进程如何通过写时复制共享内存页? 本文先给出可直接复述的结论,再用最小代码说明fork 写时复制 copy on write的工作方式、判断依据、项目边界和常见误区。
什么是按需调页,exec 一个新程序后为什么能立即开始运行? 本文先给出可直接复述的结论,再用最小代码说明按需调页 demand paging 惰性加载的工作方式、判断依据、项目边界和常见误区。
脏页是如何被写回磁盘的,dirty_ratio 和 dirty_background_ratio 起什么作用? 本文先给出可直接复述的结论,再用最小代码说明脏页写回 dirty_ratio 参数的工作方式、判断依据、项目边界和常见误区。
多线程程序中什么是伪共享(false sharing),如何避免? 本文先给出可直接复述的结论,再用最小代码说明伪共享 false sharing 缓存行 多线程的工作方式、判断依据、项目边界和常见误区。
为什么 fork 一个大内存进程通常很快,什么情况下 fork 会变慢? 本文先给出可直接复述的结论,再用最小代码说明fork 性能 页表复制 开销的工作方式、判断依据、项目边界和常见误区。
大页(Huge Page)为什么能提升数据库等应用的性能? 本文先给出可直接复述的结论,再用最小代码说明Huge Page 大页 TLB 性能的工作方式、判断依据、项目边界和常见误区。
KSM 内核同页合并如何为虚拟化场景节省内存? 本文先给出可直接复述的结论,再用最小代码说明KSM 同页合并 内存去重的工作方式、判断依据、项目边界和常见误区。
Linux 如何通过 LRU 链表管理可回收页面? 本文先给出可直接复述的结论,再用最小代码说明Linux LRU 链表 active inactive 页面回收的工作方式、判断依据、项目边界和常见误区。
madvise 的 MADV_DONTNEED 和 MADV_WILLNEED 分别解决什么问题? 本文先给出可直接复述的结论,再用最小代码说明madvise DONTNEED WILLNEED 用途的工作方式、判断依据、项目边界和常见误区。
malloc 分配小内存和大内存分别走 brk 和 mmap 的原因是什么? 本文先给出可直接复述的结论,再用最小代码说明malloc brk mmap 分配阈值的工作方式、判断依据、项目边界和常见误区。
为什么 free 之后进程的 RSS 往往不会立即下降? 本文先给出可直接复述的结论,再用最小代码说明free 内存不释放 RSS glibc的工作方式、判断依据、项目边界和常见误区。
mmap 的 MAP_SHARED 和 MAP_PRIVATE 在写操作后行为有何不同? 本文先给出可直接复述的结论,再用最小代码说明MAP_SHARED MAP_PRIVATE 区别的工作方式、判断依据、项目边界和常见误区。
虚拟化中内存气球(ballooning)如何回收虚拟机的空闲内存? 本文先给出可直接复述的结论,再用最小代码说明内存气球 ballooning 虚拟化 回收的工作方式、判断依据、项目边界和常见误区。
缓存一致性协议和内存屏障分别解决多核编程中的什么问题? 本文先给出可直接复述的结论,再用最小代码说明缓存一致性 MESI 内存屏障 区别的工作方式、判断依据、项目边界和常见误区。
内存内部碎片和外部碎片的成因分别是什么,各用什么手段缓解? 本文先给出可直接复述的结论,再用最小代码说明内部碎片 外部碎片 区别 内存的工作方式、判断依据、项目边界和常见误区。
如何区分进程是内存泄漏还是被 glibc 分配器缓存了内存? 本文先给出可直接复述的结论,再用最小代码说明内存泄漏 诊断 RSS 增长 malloc的工作方式、判断依据、项目边界和常见误区。
次缺页和主缺页有什么区别,如何用 minflt/majflt 判断程序瓶颈? 本文先给出可直接复述的结论,再用最小代码说明minor fault major fault 区别 性能的工作方式、判断依据、项目边界和常见误区。
mlock 锁定的内存有什么保证,数据库为什么用它? 本文先给出可直接复述的结论,再用最小代码说明mlock 锁定内存 禁止换出的工作方式、判断依据、项目边界和常见误区。
匿名 mmap 和文件 mmap 在页面来源与回收路径上有什么区别? 本文先给出可直接复述的结论,再用最小代码说明匿名映射 文件映射 mmap 区别的工作方式、判断依据、项目边界和常见误区。
用 mmap 读文件和用 read 读文件在数据拷贝和缺页上有什么差异? 本文先给出可直接复述的结论,再用最小代码说明mmap read 区别 零拷贝 缺页的工作方式、判断依据、项目边界和常见误区。
NUMA 架构下跨节点访问内存的代价是什么,如何做内存亲和优化? 本文先给出可直接复述的结论,再用最小代码说明NUMA 内存亲和 跨节点访问的工作方式、判断依据、项目边界和常见误区。
Linux OOM Killer 如何挑选要杀死的进程? 本文先给出可直接复述的结论,再用最小代码说明OOM Killer 选择机制 oom_score的工作方式、判断依据、项目边界和常见误区。
Linux 内存超卖(overcommit)策略的三种模式分别意味着什么? 本文先给出可直接复述的结论,再用最小代码说明overcommit_memory 超卖 策略的工作方式、判断依据、项目边界和常见误区。
Linux 页缓存是什么,为什么 free 显示的可用内存很少但系统并不缺内存? 本文先给出可直接复述的结论,再用最小代码说明页缓存 page cache available 内存的工作方式、判断依据、项目边界和常见误区。
发生缺页异常时操作系统内核的完整处理流程是什么? 本文先给出可直接复述的结论,再用最小代码说明缺页异常处理流程 内核 page fault的工作方式、判断依据、项目边界和常见误区。
常见的页面置换算法有哪些,为什么 LRU 在实际内核中被近似实现? 本文先给出可直接复述的结论,再用最小代码说明页面置换算法 LRU FIFO Clock 近似的工作方式、判断依据、项目边界和常见误区。
内存分页和分段有什么区别,为什么主流系统以分页为主? 本文先给出可直接复述的结论,再用最小代码说明分页 分段 区别 内存管理的工作方式、判断依据、项目边界和常见误区。
Linux 内核的 slab 分配器解决什么问题? 本文先给出可直接复述的结论,再用最小代码说明slab 分配器 内核 对象缓存的工作方式、判断依据、项目边界和常见误区。
生产服务器应该禁用 swap 吗,保留少量 swap 的理由是什么? 本文先给出可直接复述的结论,再用最小代码说明swap 是否应该禁用 服务器的工作方式、判断依据、项目边界和常见误区。
vm.swappiness 参数如何影响匿名页与页缓存的回收倾向? 本文先给出可直接复述的结论,再用最小代码说明swappiness 参数 swap 回收倾向的工作方式、判断依据、项目边界和常见误区。
Linux 透明大页(THP)的 always/madvise/never 策略如何取舍? 本文先给出可直接复述的结论,再用最小代码说明透明大页 THP madvise 策略的工作方式、判断依据、项目边界和常见误区。
TLB 在地址转换中起什么作用,TLB miss 时代价有多大? 本文先给出可直接复述的结论,再用最小代码说明TLB 作用与 TLB miss 代价的工作方式、判断依据、项目边界和常见误区。
多核系统中修改共享页表后为什么需要 TLB shootdown? 本文先给出可直接复述的结论,再用最小代码说明TLB shootdown 多核 页表 一致性的工作方式、判断依据、项目边界和常见误区。
虚拟机中客户机虚拟地址到宿主机物理地址经历几级翻译? 本文先给出可直接复述的结论,再用最小代码说明虚拟化 二级地址翻译 EPT NPT的工作方式、判断依据、项目边界和常见误区。
宿主机回收虚拟机内存时,balloon 和 KSM 各适用于什么场景? 本文先给出可直接复述的结论,再用最小代码说明balloon KSM 对比 虚拟机内存回收的工作方式、判断依据、项目边界和常见误区。
CPU 如何将虚拟地址翻译成物理地址? 本文先给出可直接复述的结论,再用最小代码说明虚拟地址 物理地址 地址转换 页表的工作方式、判断依据、项目边界和常见误区。
什么是内存抖动(thrashing),如何诊断系统正在抖动? 本文先给出可直接复述的结论,再用最小代码说明内存抖动 thrashing 诊断 swap的工作方式、判断依据、项目边界和常见误区。
为什么现代操作系统使用多级页表而不是单级页表? 本文先给出可直接复述的结论,再用最小代码说明多级页表 稀疏地址空间 页表大小的工作方式、判断依据、项目边界和常见误区。
为什么操作系统需要虚拟内存而不是直接使用物理内存? 本文先给出可直接复述的结论,再用最小代码说明虚拟内存 作用 操作系统的工作方式、判断依据、项目边界和常见误区。
什么是工作集模型,它和驻留集大小 RSS 有什么关系? 本文先给出可直接复述的结论,再用最小代码说明工作集 working set RSS 驻留集的工作方式、判断依据、项目边界和常见误区。
zswap 和 zram 在压缩换出路径上有什么区别? 本文先给出可直接复述的结论,再用最小代码说明zswap zram 区别 压缩内存的工作方式、判断依据、项目边界和常见误区。
原子操作和无锁编程能解决什么问题,为什么原子变量不等于线程安全? 本文先给出可直接复述的结论,再用最小代码说明原子操作 无锁编程的工作方式、判断依据、项目边界和常见误区。
Linux CFS 完全公平调度器如何用 vruntime 决定下一个运行的任务? 本文先给出可直接复述的结论,再用最小代码说明Linux CFS vruntime 调度的工作方式、判断依据、项目边界和常见误区。
条件变量为什么必须与互斥锁配合、wait 为什么要在 while 循环里? 本文先给出可直接复述的结论,再用最小代码说明条件变量 虚假唤醒 while的工作方式、判断依据、项目边界和常见误区。
为什么频繁上下文切换会降低性能,如何在压测中观测? 本文先给出可直接复述的结论,再用最小代码说明上下文切换开销 vmstat的工作方式、判断依据、项目边界和常见误区。
一次进程上下文切换具体保存和恢复哪些内容? 本文先给出可直接复述的结论,再用最小代码说明进程上下文切换 保存内容的工作方式、判断依据、项目边界和常见误区。
CPU 亲和性是什么,绑核在什么场景能提升性能? 本文先给出可直接复述的结论,再用最小代码说明CPU 亲和性 sched_setaffinity的工作方式、判断依据、项目边界和常见误区。
死锁的四个必要条件是什么,面试中如何用它推导排查思路? 本文先给出可直接复述的结论,再用最小代码说明死锁 四个必要条件的工作方式、判断依据、项目边界和常见误区。
线上进程疑似死锁,如何用 gdb、pstack 或 /proc 定位持锁线程? 本文先给出可直接复述的结论,再用最小代码说明死锁排查 gdb 线程栈的工作方式、判断依据、项目边界和常见误区。
epoll 水平触发与边缘触发的区别是什么,ET 模式为什么必须配非阻塞 fd? 本文先给出可直接复述的结论,再用最小代码说明epoll LT ET 非阻塞的工作方式、判断依据、项目边界和常见误区。