2026-06-29 | linux · os | #eevdf #cfs #scheduler #linux-kernel #vruntime #latency #base-slice
Linux 6.6 用 EEVDF 取代了 CFS 的 SCHED_NORMAL 选取逻辑。从 1995 年原始论文的 lag、eligibility、virtual deadline,到 commit 147f3ef 只重写 placement/pick/preempt,再到本机内核 6.6 上读 sched/debug 把每个任务的 vruntime、eligible 标志、deadline 一一对上 vd=ve+r/w,外加 nice 带宽与 base_slice 抢占两组实测,讲清换的是哪一块、延迟敏感任务凭什么先跑。
2026-06-18 | os | #windows #nt-kernel #iocp #irp #object-manager #wsl2 #epoll #io-uring
NT Executive/Kernel/HAL 分层、Object Manager 与 handle、IRP 驱动栈、IOCP 完成端口 vs epoll/io_uring、EPROCESS/KTHREAD vs task_struct、Registry vs 文件配置,以及 WSL2 为何选择 Hyper-V 轻量 VM。
2026-07-05 | os | #rtos #vxworks #qnx #zephyr #preempt-rt #do-178c #iso-26262 #schedulability
硬实时与软实时的可调度性边界、VxWorks/QNX/Zephyr 机制对照、Linux PREEMPT_RT 与主线合入、DO-178C/ISO 26262 认证语境,以及选型决策树。
2026-07-06 | os | #unikernel #unikraft #mirageos #includeos #library-os
Unikernel 在云上为什么没成主流?MirageOS、IncludeOS、Unikraft、OSv 的设计取舍——库操作系统、启动时间、工具链、调试困难、POSIX 兼容。
2026-07-07 | os | #rust #rust-for-linux #kernel-development #memory-safety #asahi
Rust for Linux 真的在解决问题还是在搬问题?合入时间线、抽象 crate、Pin/unsafe 边界、Asahi GPU 驱动、维护成本、ABI 兼容、工具链依赖。
2026-07-08 | os · security | #confidential-computing #tee #sgx #sev-snp #tdx #cca #attestation #kvm #containers
TEE 保护什么、不保护什么?从 Intel SGX、AMD SEV-SNP、Intel TDX 到 ARM CCA,对照威胁模型、远程认证、Confidential Containers 与 Gramine/Occlum 软件栈,说明机密计算如何改变 Guest 与 Hypervisor 的信任关系,以及与容器隔离的互补边界。
2026-07-09 | os · architecture | #disaggregated-os #cxl #lego-os #far-memory #numa #hmm #dax #memory-tiering
CXL 内存池化如何动摇 OS 对本地 DRAM 的假设?从资源解耦、CXL.mem 语义、LegoOS/PhantomOS/Twilight 学术原型,到 Linux CXL 驱动、dax、HMM 与 memory tiering,说明 disaggregated OS 的工程边界与 NUMA 演进。
2026-07-10 | os · architecture | #os-future #rust-for-linux #confidential-computing #cxl #io-uring #ebpf #sched-ext
综合 Windows/RTOS/Unikernel/Rust/机密计算/CXL 等前沿篇章,从 Rust 内核、机密计算、可拆分内存、io_uring 统一 I/O、eBPF 可编程内核五条趋势出发,按现在/三年/十年框架说明应用开发者应调整的假设与可执行建议。
2026-06-17 | os · security | #freebsd #openbsd #bsd #kernel #zfs #pledge #security #operating-system #comparison
FreeBSD 和 OpenBSD 从同一个 BSD 根分出两条相反的路径:一个追求通用性能与广泛生态,一个追求安全正确性与代码洁癖。本文从安全模型、文件系统(ZFS vs FFS)、网络栈(pf vs pf 正统)、虚拟化(jail/bhyve vs vmm)、社区治理、包管理、硬件支持到生产案例做逐项对比,给出选型框架和不该选 BSD 的典型场景。
2026-05-06 | os | #kasan #kfence #kmemleak #slub-debug #ubsan
内核内存 bug 是最难追的:UAF、OOB、double free、leak 都可能沉默数月。本文讲 KASAN 三种模式、KFENCE 生产采样、kmemleak、SLUB_DEBUG、UBSAN/KCSAN 联动。
2026-05-08 | os | #vfs #inode #dentry #dcache #superblock
Linux 的一切皆文件靠 VFS 实现——superblock、inode、dentry、file 四层抽象加 ops 表。本文讲 VFS 核心数据结构、dcache、inode cache、RCU lookup,以及文件系统如何插入 VFS。
2026-04-22 | os | #operating-system #linux-kernel #scheduling #virtual-memory #filesystem #index
Linux 6.x 视角下的操作系统系列索引:110 篇覆盖调度、虚拟内存、文件系统与 I/O、并发、隔离、可观测性,按主题、阅读路径与关键问题三种入口组织。
2026-05-27 | os | #malloc #jemalloc #tcmalloc #allocator #arena #rseq #hugepage
jemalloc 与 tcmalloc 都想解决多线程分配器的老问题:锁争抢、碎片、RSS 膨胀与回收抖动。但两者把优化重点放在了不同位置:tcmalloc 更激进地把热路径推到 per-CPU,jemalloc 则把 arena、extent、decay 和 profiling 做成了一套更完整的内存治理工具箱。
2026-04-17 | os | #operating-system #linux-kernel #index #series #encyclopedia
110 篇长文,从操作系统的基础抽象到调度、虚拟内存、文件系统、并发、安全、前沿方向。以 Linux 6.x 主线为实现参照,辅以 FreeBSD、XNU、Windows NT、实时 OS 的对照。
2026-04-27 | os | #reclaim #kswapd #lru #mglru #watermark #swappiness
Linux 内存回收是 VM 最复杂的子系统之一。本文讲 active/inactive LRU、kswapd 与 direct reclaim、watermark 三线、swappiness 的真实含义、MGLRU 改造、memcg 回收与 PSI。
2026-04-28 | os | #swap #zram #zswap #swappiness #swap-cache
swap 还值得开吗?本文讲 swap area 基础、swap cache、zram 压缩内存、zswap 前端压缩池、swappiness 的真实含义、容器里的 swap 策略,以及为什么现代 Android 全靠 zram 不靠磁盘。
2026-05-03 | os | #slab #slub #kmem-cache #slub-debug #kasan
buddy 只管页粒度(4K+),内核大多数对象只有几十到几百字节。slab/SLUB 在 buddy 之上做对象级缓存。本文讲 slab 历史、SLUB 接手、SLOB 退场、kmem_cache、per-CPU cache、KASAN 集成。
2026-05-18 | os | #io-uring #sqpoll #async-io #ring-buffer #iopoll
io_uring 用共享内存 ring buffer 实现零 syscall 异步 I/O——SQ/CQ、SQPOLL、IOPOLL、注册 fd/buffer、multishot、安全模型演化。本文深入内核实现与工程实践。
2026-05-22 | os | #splice #tee #vmsplice #zero-copy #dirty-pipe
splice 在内核 pipe buffer 间移动数据——不经过用户态。本文讲 splice/tee/vmsplice 原理、pipe_buffer 与 page 生命周期、sendfile 的前世、CVE-2022-0847 Dirty Pipe 复盘。
2026-05-24 | os | #lkmm #memory-model #memory-barrier #read-once #litmus-test
READ_ONCE、smp_mb、smp_store_release——内核并发代码的基石。本文讲 LKMM 的诞生、ordering 语义、cumulativity、address/data/control 依赖、marked vs plain access、litmus test 方法论。
2026-05-25 | os | #atomic #rmw #lock-prefix #ll-sc #lse #cas
x86 LOCK 前缀、ARM LL/SC、ARMv8.1 LSE、RISC-V A 扩展——四种硬件原子原语的工程差异。本文讲 fetch_add/CAS/swap 成本、cache line bouncing、tearing 与内核 atomic API。
2026-06-19 | os | #ebpf #bpf-verifier #jit #btf #co-re
BPF 为什么能成为 Linux 的第二用户态?verifier、JIT、map 家族、BTF、CO-RE、BPF_LSM、sched_ext——本文讲 eBPF 的内核侧机制。
2026-06-30 | os | #container-security #gvisor #kata #firecracker #isolation
容器 vs 虚机 vs microVM 的真实隔离差距。namespace+cgroup+seccomp+capabilities 组合、user namespace rootless、gVisor、Kata Containers、Firecracker——本文评估容器安全。
2026-07-01 | os | #vmx #svm #ept #vm-exit #apicv
VM-exit/VM-entry 的代价和近年优化。VMX/SVM 硬件虚拟化、EPT/NPT 二级页表、APICv posted interrupts、vCPU 调度、nested virtualization——本文讲 x86 虚拟化基础。
2026-07-02 | os | #kvm #qemu #vhost #virtio #iommu
KVM 在 Linux 中如何做到最小的 hypervisor?/dev/kvm ioctl、QEMU 用户态设备模型、vhost-net/vhost-user、virtio、eventfd/irqfd、IOMMU、SEV/TDX 集成。
2026-06-25 | os | #capabilities #cap-set #ambient #setuid #least-privilege
为什么 setuid root 早该被 capabilities 取代?cap sets(permitted/effective/inheritable/bounding/ambient)、file caps、容器内 capabilities——本文讲 Linux 的细粒度权限模型。
2026-06-26 | os | #seccomp #seccomp-bpf #landlock #sandbox #least-privilege
进程自限如何实现最小权限?seccomp strict mode、filter mode(BPF 过滤器)、user notify、Landlock 文件访问控制、syscall user dispatch——本文讲 Linux 的系统调用过滤。
2026-06-27 | os | #selinux #apparmor #lsm #mac #mandatory-access-control
SELinux 与 AppArmor 的模型差异如何影响运维?LSM hooks、类型强制策略、AppArmor profile、permissive/enforce 模式、容器标签——本文讲 Linux 强制访问控制。
2026-06-28 | os | #ima #evm #dm-verity #fs-verity #tpm
从引导到运行时的完整性保证链如何闭环?measured boot → IMA measurement/appraisal → EVM → dm-verity / fs-verity → TPM PCR——本文讲 Linux 的完整性子系统。
2026-06-29 | os | #kaslr #kpti #retpoline #spectre #meltdown
Spectre/Meltdown 时代留给内核的性能税有多重?KASLR、KPTI、retpoline、IBRS/eIBRS、RSB stuffing、SSBD——本文讲 CPU 漏洞缓解措施的内核实现。
2026-06-17 | os | #ftrace #tracepoint #trace-cmd #function-graph #fentry
ftrace 是 Linux 内核的内置追踪框架——函数追踪、function graph、tracepoints、trace-cmd。本文讲 mcount/fentry 机制、动态 patching、histogram、synthetic events。
2026-06-18 | os | #perf #pmu #perf-event #processor-trace #sampling
perf 到底看到了什么?PMU 硬件计数器、tracepoint、perf_event_open、perf ring buffer、Processor Trace——本文讲 perf 子系统的内核机制。
2026-06-20 | os | #kprobe #uprobe #fprobe #usdt #dynamic-tracing
kprobe/uprobe/fprobe 在热点路径的真实 overhead 是多少?本文讲 int3 断点机制、fprobe 基于 ftrace 的优化、uprobe 用户态探针、USDT、BPF 联动。
2026-06-21 | os | #kdump #kexec #crash #vmcore #pstore
线上 panic 如何留下可分析的证据?kexec 启动捕获内核、crashkernel 参数、vmcore 分析、crash 工具、ramoops/pstore——本文讲 Linux 的故障转储机制。
2026-06-22 | os | #lockdep #kcsan #kfence #deadlock #lock-validation
lockdep 报的 ABBA 死锁该不该怕?本文讲 lockdep 锁依赖追踪、lockdep_assert_held、KCSAN 并发检查、KFENCE 内存越界检测、false positive 处理。
2026-06-23 | os | #printk #dmesg #netconsole #dev-printk #kernel-logging
printk 还能活多久?printk 缓冲区、dev_printk、rate limiting、netconsole、printk lockless 改造——本文讲内核日志子系统的机制与演化。
2026-06-24 | os | #procfs #sysfs #proc-status #pid-namespace #kernel-interface
为什么 /proc/self/status 的字段总让人困惑?本文讲 procfs vs sysfs 设计哲学、常用字段解读、pid namespace 下表现、per-cgroup 接口、稳定性分级。
2026-06-11 | os | #boot #uefi #grub #start-kernel #pid1
按下电源键到看到登录界面——中间经历了固件、bootloader、内核解压、start_kernel、rest_init、PID 1。本文走一遍 x86 和 ARM 的完整启动时间轴。
2026-06-12 | os | #initramfs #dracut #switch-root #uki #early-userspace
现代 Linux 启动离不开 initramfs——加密 root、LVM、NVMe 驱动都在 initramfs 加载。本文讲 cpio 归档、early userspace、dracut 模块化、switch_root、unified kernel image(UKI)。
2026-06-13 | os | #elf #execve #dynamic-linker #got-plt #pie
execve 之后,内核把 ELF 二进制搬上场——PT_LOAD 段 mmap、动态链接器 ld.so、GOT/PLT 延迟绑定、PIE、aux vector。本文走完从 execve 到 main 的全路径。
2026-06-14 | os | #vdso #vvar #vsyscall #getrandom #zero-syscall
vDSO 把 gettimeofday/clock_gettime 搬到用户态——零 syscall 读时间。本文讲 vDSO 原理、vvar 共享页、getrandom vDSO、x86/arm64 差异、vsyscall 退役、time namespace 支持。
2026-06-15 | os | #kernel-module #dkms #signing #lockdown #livepatch
out-of-tree 模块在现代 Linux 还该不该存在?本文讲模块加载机制、符号版本(modversions)、Secure Boot 签名、DKMS、lockdown、module taint、livepatch(kpatch/kGraft)。
2026-06-16 | os | #abi #sysfs #debugfs #syscall #userspace-api
sysctl/sysfs/tracefs 哪些能依赖?syscall 反而最稳定。本文讲 Documentation/ABI 框架、sysfs 规则、debugfs/tracefs 非承诺、Linus 的 never break userspace 规则与例外。
2026-06-03 | os | #interrupt #apic #msi #irq-desc #idt
从硬件信号到 handle_irq——中断的全旅程。本文讲 IDT、APIC/x2APIC、MSI/MSI-X、GSI 到 IRQ 映射、irq_desc、affinity 绑定、IPI、中断风暴与重平衡。
2026-06-04 | os | #softirq #tasklet #workqueue #bottom-half #ksoftirqd
中断下半部有三条路——softirq(静态编号、高性能)、tasklet(动态但退役中)、workqueue(可睡眠、灵活)。本文讲三者实现、ksoftirqd 切换、threaded NAPI、workqueue 类型与调优。
2026-06-05 | os | #threaded-irq #preempt-rt #irqf-oneshot #interrupt-thread #latency
把 IRQ handler 线程化——PREEMPT_RT 的核心改造之一。本文讲 request_threaded_irq、handler/thread_fn 分工、IRQF_ONESHOT、全线程化的延迟与吞吐代价、softirq 线程化趋势。
2026-06-06 | os | #hrtimer #timer-wheel #tick #clock-event #jiffies
从 jiffies 时代的 timer wheel 到纳秒精度的 hrtimer——Linux 定时器的两套体系。本文讲 timer wheel 层次、hrtimer 红黑树实现、clock_event_device、slack 与 coalescing、定时器迁移。
2026-06-07 | os | #nohz #tickless #no-hz-full #isolcpus #housekeeping
NO_HZ_FULL 让 CPU 运行用户态时不受 tick 打断——数据库、DPDK、低延迟交易的利器。本文讲 NO_HZ_IDLE/FULL、housekeeping CPU、RCU nocb、isolcpus、副作用与实际配置。
2026-06-08 | os | #clocksource #tsc #hpet #vdso #ptp
TSC 真的稳吗?本文讲 clocksource/clockevents 分离、TSC invariant/unstable 判定、HPET/ACPI PM/arch_timer、watchdog 校准、vDSO gettimeofday、PTP/PHC 硬件时间戳。
2026-06-09 | os | #cpu-hotplug #cpuhp #online-offline #migration #cloud
云环境和虚拟化里,CPU 可以运行时上下线。本文讲 CPUHP 状态机、cpu_up/cpu_down 路径、RCU 和定时器迁移、锁竞争、nohz_full 与热插拔的陷阱、回归事故案例。
2026-06-10 | os | #power-management #suspend #hibernate #runtime-pm #pm-qos
suspend-to-idle、S3 suspend、hibernate——三种系统级休眠的工程差异。本文讲 runtime PM、system PM、freeze_kernel、pm_qos、设备树/ACPI 配合、笔记本与服务器场景差异。
2026-05-26 | os | #spinlock #ticket-lock #mcs #qspinlock #numa
内核 spinlock 从关中断到 qspinlock 演化了四代。本文讲原始 spinlock、ticket lock、MCS lock、qspinlock、paravirt qspinlock、spin_lock_irqsave 的代价与 NUMA 友好性。
2026-05-27 | os | #mutex #rwsem #adaptive-spin #sleeping-lock #lockdep
内核 mutex 先自旋再睡眠——adaptive spin 策略。本文讲 mutex 实现、MCS wait list、owner handoff、rwsem 公平与不公平、PREEMPT_RT 替换、lockdep 死锁检测。
2026-05-28 | os | #rcu #grace-period #synchronize-rcu #tree-rcu #srcu
RCU 是 Linux 内核使用最广泛的同步机制——读侧零开销。本文讲经典 RCU、Tree RCU、Tasks RCU、SRCU、grace period、rcu_dereference、call_rcu、lazy RCU、nocb CPU。
2026-05-29 | os | #seqlock #seqcount #retry-read #timekeeper #lockless
seqlock 让读者无锁重试——写者递增序列号,读者检测到变化则重试。本文讲 seqcount/seqlock 区别、write_seqlock 语义、timekeeper 用法、与 RCU 对比、load tearing 风险。
2026-05-30 | os | #percpu-refcount #srcu #kref #reference-counting #cache-bounce
高频 refcount 每次 inc/dec 都是 cache line bouncing。percpu_refcount 用 per-CPU 计数器解决——活跃时零竞争,关闭时收敛为原子。本文讲两阶段设计、SRCU、kref 与正确关闭顺序。
2026-05-31 | os | #futex #pthread-mutex #priority-inheritance #robust-futex #futex2
glibc pthread_mutex 背后是 futex——用户态快路径无 syscall,竞争时才进内核。本文讲 FUTEX_WAIT/WAKE、PI futex、robust futex、futex2、requeue、安全补丁与工程陷阱。
2026-06-01 | os | #priority-inversion #priority-inheritance #rt-mutex #preempt-rt #mars-pathfinder
火星探路者号因优先级反转重启——这是实时系统最经典的故事。本文讲优先级反转现象、PIP 优先级继承协议、PCP 优先级天花板、rt_mutex、PREEMPT_RT 的 spinlock 转换、DEADLINE 任务反转。
2026-06-02 | os | #formal-verification #herd7 #litmus-test #cbmc #tla-plus
用 herd7 跑 litmus test、用 CBMC 检查有界模型、用 TLA+ 验证协议——内核并发代码的形式化验证实践。本文讲工具链、实际 bug 案例、与传统测试的权衡。
2026-05-16 | os | #vfs #read-write #io-path #page-cache #direct-io
一次 read(fd, buf, n) 从用户态到磁盘要穿过多少层?本文追踪 VFS read/write 全路径——file_operations、iter_iov、iomap、页缓存命中与 miss、直接 I/O 旁路、块层提交、fsnotify 插桩。
2026-05-17 | os | #aio #libaio #async-io #io-submit #posix-aio
Linux 有两套异步 I/O——glibc POSIX AIO(线程池伪装)和内核 libaio(io_submit/io_getevents,限制重重)。本文讲两者实现、O_DIRECT 约束、io_cancel 不可用性、与 epoll 的不可组合问题。
2026-05-19 | os | #epoll #event-poll #lt-et #thundering-herd #ready-list
epoll 用红黑树管理 fd、就绪链表 O(1) 返回事件——打败 select/poll 的关键。本文讲 eventpoll 结构、LT/ET 语义、EPOLLEXCLUSIVE 与惊群、级联 epoll、EPOLLONESHOT、与 io_uring 的比较。
2026-05-20 | os | #select #poll #io-multiplex #fd-set #ppoll
select 和 poll 是最古老的 I/O 多路复用——O(n) 扫描、fd_set 1024 上限、每次 copy 全部集合。本文讲它们的实现、ppoll 信号安全、pselect、嵌入式与 POSIX 兼容场景下的残留价值。
2026-05-21 | os | #signalfd #eventfd #timerfd #pidfd #fd-abstraction
Linux 把信号、事件、定时器、进程都变成 fd——signalfd/eventfd/timerfd/pidfd。本文讲每种 fd 的用途、与 epoll 组合、KVM 的 eventfd、systemd 的 pidfd、以及 fd 化哲学。
2026-05-23 | os | #benchmark #epoll #io-uring #libaio #async-model
epoll、io_uring、libaio、阻塞线程池——四种异步模型的真实性能对比。本文用统一 workload 量化 echo server、静态文件服务、数据库 I/O 场景下的吞吐、延迟与 CPU 开销。
2026-05-09 | os | #namei #lookup-rcu #openat2 #symlink #pathname
/a/b/c 如何变成 inode 指针?本文讲 namei 的 LOOKUP_RCU 快速路径、mount 穿越、symlink loop 保护、openat2 的 RESOLVE_* 安全标志、case-insensitive 扩展。
2026-05-10 | os | #fd #files-struct #cloexec #pidfd #close-range
fd 是用户态访问文件的句柄——但 fd 的共享语义在 fork/exec/dup/CLOEXEC 下极其微妙。本文讲 files_struct、fdtable、close_range、pidfd_getfd、cloexec 默认化趋势。
2026-05-11 | os | #flock #fcntl-lock #ofd-lock #lease #file-locking
POSIX fcntl 锁为什么在 2025 年还这么坑?本文讲 flock(BSD 锁)、POSIX fcntl 锁、OFD 锁(F_OFD_SETLK)、NFS lockd、lease——以及 POSIX 锁的 fork/close 语义陷阱。
2026-05-12 | os | #xattr #acl #capability #selinux-label
扩展属性(xattr)是 inode 的元数据扩展点——POSIX ACL、capability set、SELinux label 都存在 xattr 里。本文讲 xattr 四命名空间、POSIX ACL、文件 capability、备份工具与容器镜像的 xattr 问题。
2026-05-13 | os | #inotify #fanotify #fsnotify #dnotify #file-watch
监控文件变化的三代方案 dnotify/inotify/fanotify 都不完美。本文讲内核 fsnotify 架构、inotify 的限制、fanotify FAN_REPORT_FID 与内容拦截、audit 联动、高频场景的 overflow 问题。
2026-05-14 | os | #overlayfs #union-mount #container #copy-up #whiteout
OverlayFS 用 lower/upper/work 三层实现联合挂载——容器镜像层栈的内核根基。本文讲 copy_up、whiteout、opaque、metacopy、redirect_dir、性能与 Docker overlay2 驱动的工程细节。
2026-05-15 | os | #fuse #user-filesystem #virtio-fs #passthrough #io-uring
FUSE 把文件系统实现搬到用户态——开发快、崩溃不影响内核。本文讲 FUSE 协议、/dev/fuse 通信、FUSE_PASSTHROUGH、virtio-fs、io_uring FUSE、性能天花板与优化策略。
2026-05-02 | os | #buddy #zone #gfp #compaction #pcp
Buddy 是 Linux 物理页分配的底座——用二的幂次空闲链表管理所有物理页。本文讲 buddy 算法、zone 划分、gfp flags、per-CPU page 热路径、碎片与 compaction 的关系。
2026-05-04 | os | #vmalloc #ioremap #kmap #vmap #pat
内核需要大片虚拟连续但物理不连续的内存时用 vmalloc;需要映射 I/O 寄存器时用 ioremap;kmap 曾是 HIGHMEM 的桥梁。本文讲 vmalloc 区域、vmap、ioremap 与 PAT、kmap_atomic 的退役。
2026-05-05 | os | #percpu #this-cpu #percpu-counter #preempt
per-CPU 变量是内核可扩展性的核心武器——每 CPU 一份副本,读写无锁。本文讲静态 per-CPU、dynamic per-CPU chunk、this_cpu_* 操作、percpu_counter、preempt 与 per-CPU 的微妙关系。
2026-04-20 | os | #vm #mmap #overcommit #cow #address-space
虚拟内存是现代 OS 最核心的抽象:每个进程都像独占一块连续大内存。本文讲 VM 到底给了什么、代价是什么——VA/PA 映射、保护、隔离、COW、mmap 语义、overcommit、地址空间布局。
2026-04-21 | os | #paging #pml4 #pcid #la57 #cr3
x86_64 默认 4 级分页(PML4),Linux 4.14+ 支持 5 级(LA57)。本文讲清各级索引、PTE bit、CR3 切换、PCID/INVPCID,以及硬件 page walker 为什么比软件 walk 快一个数量级。
2026-04-22 | os | #arm64 #vmsav8 #ttbr #asid #mte #bti #vhe
ARMv8-A 翻译体制与 x86 差异很大:两套 TTBR、可选 4K/16K/64K granule、ASID 原生标签、nG/G 分离。本文梳理 VMSAv8-64 核心:TTBR0/1、granule、descriptor、ASID、VHE、MTE、BTI。
2026-04-23 | os | #tlb #shootdown #invlpgb #tlbi #huge-page
TLB 容量有限,shootdown 在多核下常是扩展性终点。本文讲 TLB 层级、PCID/ASID 命中、shootdown 代价、INVLPGB 与 arm64 TLBI 广播、lazy tlb、huge page 对 TLB 的放大效应。
2026-04-24 | os | #mm-struct #vma #maple-tree #anon-vma #mmap-lock
进程地址空间在内核里靠 mm_struct + VMA 链表/树描述。本文讲 mm_struct 核心字段、VMA 从红黑树到 maple tree 的改造、anon_vma 反向映射、mmap_lock 争抢。
2026-04-25 | os | #pagefault #cow #userfaultfd #major-fault #minor-fault
缺页(page fault)是 VM 的核心事件——PTE 不 present 就触发 #PF。本文讲 major/minor/COW/swap/userfault 五种缺页控制流、do_page_fault 调用链、hugefault、userfaultfd 在 CRIU/Live Migration 的角色。
2026-04-26 | os | #page-cache #folio #xarray #readahead #writeback #dirty-throttle
页缓存是 Linux I/O 的灵魂缓冲层。本文从 VM 视角讲 address_space、radix 到 XArray 改造、folio 抽象、readahead 策略、writeback 与 dirty throttling、memcg 对页缓存的约束。
2026-04-29 | os | #oom-killer #oom-score #systemd-oomd #earlyoom #memcg-oom
内存真的耗尽时,内核的最后手段是 OOM Killer——选一个进程杀掉。本文讲 oom_score 算法、oom_score_adj 调优、memcg OOM、PSI 驱动的 systemd-oomd/earlyoom,以及如何追查 OOM 事故。
2026-04-30 | os | #numa #mempolicy #autonuma #cxl #numactl
多路服务器里内存不再平等——本地访问和远程访问延迟差 2-3 倍。本文讲 NUMA 拓扑、mempolicy、AutoNUMA、NUMA balancing、CXL 带来的分级内存层次,以及 NUMA 感知的生产调优。
2026-05-01 | os | #huge-page #thp #hugepage #khugepaged #madvise
大页能让一条 TLB 覆盖 2MB 乃至 1GB,但 THP 为什么在数据库里默认关掉?本文讲 HugeTLB 预留池、THP 的 khugepaged、defrag stall、madvise 模式、file-backed THP、以及工程上的取舍。
2026-04-18 | os | #scheduling-theory #fcfs #sjf #mlfq #edf #cbs #fair-share
调度是在有限 CPU 上分配无限需求的艺术。本文从 FCFS/SJF/RR/MLFQ/Fair-share/Lottery/Stride 一路讲到 EDF/CBS,梳理响应-吞吐-公平三难;给出 Mutexpriority inversion、Multi-level feedback、starvation 的定义,以及为什么任何调度目标都不能同时最优。
2026-04-18 | os | #cfs #vruntime #rbtree #sched-entity #autogroup #wake-preempt
CFS(Completely Fair Scheduler)从 2.6.23 统治 Linux 18 年。本文讲它的核心数据结构:sched_entity、cfs_rq、按 vruntime 排序的红黑树;vruntime 随 nice 加权的公式;sched_latency_ns/min_granularity 如何决定周期;wake-up preemption、autogroup、group scheduling 的来龙去脉。
2026-04-18 | os | #eevdf #latency-nice #virtual-deadline #eligibility #cfs-replacement
Linux 6.6(2023 年 10 月)把默认调度器换成了 EEVDF(Earliest Eligible Virtual Deadline First)。本文讲 EEVDF 的两个新概念——eligible time 与 virtual deadline——如何把「公平」与「延迟」统一,latency-nice 给交互式任务的意义,以及早期 benchmark 与 PREEMPT_RT 的关系。
2026-04-18 | os | #sched-fifo #sched-rr #preempt-rt #rt-throttle #priority-inheritance #cyclictest
Linux 里的实时:SCHED_FIFO/RR 提供优先级调度,但原版内核仍有不可抢占点。PREEMPT_RT 补丁集 20 年后(6.12)合入主线,把几乎所有 spinlock 变 rt_mutex、IRQ 变线程。本文讲 RT 调度语义、RT-throttling、cyclictest 基线、优先级继承、以及 RT 部署的陷阱。
2026-04-19 | os | #sched-deadline #edf #cbs #admission-control #sched-setattr
SCHED_DEADLINE 是 Linux 3.14 合入的 EDF+CBS 调度类。本文讲 (runtime, deadline, period) 三元组、全局 EDF 与准入控制、CBS 带宽服务器、用 sched_setattr 部署 DEADLINE 任务、为什么 DL 与 cpuset/cgroup 互斥,以及视频、机器人、无人机场景。
2026-04-19 | os | #load-balance #sched-domain #numa-balancing #wake-affine #imbalance
Linux 是「每 CPU 一个 runqueue + 周期性 migration」。本文讲 sched_domain 层级 (SMT/MC/DIE/NUMA)、wake-affine、idle pull/periodic push、imbalance 判定;NUMA Balancing 在多 socket 上的作用、prefer_sibling、energy-aware 新维度;经典负载均衡 bug 与诊断。
2026-04-19 | os | #big-little #intel-hybrid #eas #capacity-aware #util-clamp #thread-director
ARM big.LITTLE(2011)和 Intel Alder Lake(2021)之后的 P-core + E-core 让「CPU 不再等价」。调度器必须知道「这任务放大核值不值」。本文讲 CPU capacity、util_avg、PELT、misfit migration、EAS 能量模型、UCLAMP 用户态提示、Intel Thread Director。
2026-04-19 | os | #sched-latency #runqlat #perf-sched #bpftrace #psi #throttle
用户抱怨「慢」时第一问题:是 CPU 本身跑得慢,还是调度器让你等?本文讲 runq latency、wakeup latency、block time 三线拆分;perf sched、bpftrace runqlat、schedviz 工具链;生产案例:CFS quota throttle、NUMA 迁移、PSI 告警。
2026-04-19 | os | #cpuidle #c-states #menu-governor #teo-governor #idle-inject #uncore-idle
CPU 没事干时也要管——进 C-state 太浅省不到电、太深退出延迟大。本文讲 cpuidle 架构、menu / teo / haltpoll governor、C-states 能耗-延迟权衡、PC6/PC10 的 uncore 停摆、idle_inject 与 cluster idle、诊断与调优。
2026-04-19 | os | #cpufreq #schedutil #hwp #amd-pstate #ondemand #p-state
CPU 频率不是一成不变——按负载动态拉升拉低是功耗最核心的杠杆。本文讲 cpufreq 架构、历史 governor(performance/powersave/userspace/ondemand/conservative)、为什么 schedutil 取代 ondemand、Intel HWP 与 amd_pstate 的硬件托管路径、per-task UCLAMP 对频率的影响。
2026-04-17 | os | #operating-system #kernel-architecture #unikernel #vmm #serverless #abstraction #resource-management
从裸机监控器到微内核再到 unikernel 与 serverless,OS 这个抽象层在六十年里被反复挑战又反复回归。本文不做教科书式定义,而是回到工程视角,提炼 OS 真正在做的五件事:资源抽象、复用、隔离、公平、可观测性。以此为尺,丈量宏内核、微内核、VMM、unikernel、serverless 各自的胜负边界。
2026-04-17 | os | #unix #multics #bsd #linux #plan9 #history #design-heritage
要理解 Linux 的很多古怪决定,得回到 Multics、Unix V6/V7、BSD 的历史语境。本文沿时间线梳理 Unix 家谱,挑出每一代留下的设计遗产——fork/exec、一切皆文件、管道、可重定向的 stdin/stdout、9P、命名空间——并指出哪些被 Linux 发扬,哪些被抛弃,哪些仍在 Plan 9 的血脉里孤独活着。
2026-04-17 | os | #kernel-architecture #monolithic #microkernel #l4 #sel4 #xnu #nt #fuchsia
微内核是理论正义但工程失败?Linux 宏内核赢了只是因为先上车?三十年前的那场论战,在 seL4 形式化正确、L4 家族把 IPC 做到单 syscall、Fuchsia 真正商用的 2020s,我们应该怎么重新看?本文用四个可量化的维度——性能、可维护性、隔离性、可验证性——把四种内核架构(宏、微、混合、Exokernel/Unikernel)摆到同一张尺子上对齐。
2026-04-17 | os | #privilege-levels #ring0 #smep #smap #kpti #cet #mte #pku #mitigations #armv8
OS 的隔离能力在哪里落地?CPU 提供了特权级、MMU、MPU、enclave、VMX 等一串原语,OS 把它们组合成进程/用户/内核/hypervisor 等隔离层级。本文从 x86 ring 0-3、SMM、ARMv8 EL0-3 起步,梳理 SMEP/SMAP/PAN、KPTI、CET、MTE、PKU、IBRS 等缓解机制,说清楚每一项挡的是哪一类攻击。
2026-04-17 | os | #syscall #abi #x86_64 #arm64 #riscv #windows-nt #vdso #sysenter #linux
系统调用是 OS 最稳定的接口。本文拆解 Linux syscall 的参数寄存器约定、返回值规范(负 errno 与 2-value ABI)、x86_64 SYSCALL、arm64 SVC、RISC-V ECALL、Windows NT 的 int 2e/syscall/SYSENTER 历史;说明为什么 Linux 承诺 \"don't break userspace\"、什么东西算 syscall ABI、vDSO 如何用共享内存加速、Go/musl/glibc 各自怎么实现 syscall stub。
2026-04-17 | os | #boundary #copy-from-user #get-user-pages #pin-user-pages #user-pointer #capability #seccomp #landlock #lsm
内核代码不能像用户代码那样自由访问任何指针。本文围绕 Linux 的 access_ok / copy_from_user / get_user_pages / pin_user_pages / __user 注解,说明用户页在内核视角的生命周期;再把视角扩展到 capability、namespace、seccomp、Landlock、LSM 等软件边界机制,汇成一张内核对用户态信任的全景图。
2026-04-17 | os | #posix #linux #freebsd #macos #windows #abi-compat #standards #portability
POSIX 标准定义了 \"一个像 Unix 的 OS 应该长什么样\",但没有哪个真实 OS 完全等于它。本文对照 POSIX 基准,列出 Linux、FreeBSD、macOS、Windows 的扩展与偏离:Linux-only 的接口(epoll、io_uring、eventfd、prctl)、BSD-only(kqueue、pf)、NT 的异步模型、符号链接/路径语义差异、signal 语义的方言、fork 的地位演变。
2026-04-17 | os | #myths #zero-copy #realtime #microkernel #containers #misconceptions
\"微内核更安全\"、\"零拷贝零开销\"、\"实时 OS 等于高性能\"、\"Docker 很轻因为没有 OS\"……工程界流传许多关于 OS 的简化叙事,其中不少在深入语境下是错的。本文把十二条典型错觉逐一拆开看。
2026-04-17 | os | #fork #exec #clone #posix-spawn #vfork #copy-on-write #process-model
fork 在 1971 年的 PDP-7 上是一句几十行的汇编;五十年后在一台 256GB 内存的服务器上同一句 fork() 要复制几百万个页表条目。本文讲 fork 的语义、COW 的账本、vfork/clone3/posix_spawn 的替代谱系,以及 fork 与多线程、大内存、JIT、容器相性差在哪里。
2026-04-17 | os | #thread #nptl #futex #green-thread #m-n #goroutine #virtual-thread #async-await
同样一个 'concurrent' 的需求,OS 级 1:1 线程、用户态 N:1 协程、调度器混合 M:N、运行时虚拟线程各给出了不同答案。本文梳理 LinuxThreads → NPTL 的演进、Solaris LWP 的失败、Go GPM / Java Loom / Erlang BEAM / async-await 的选择,以及 M:N 模型的阿克琉斯之踵:阻塞 syscall。
2026-04-17 | os | #task-struct #kernel-data-structure #current #thread-info #cred #mm-struct
Linux 里「一个进程/线程」对应的内核数据结构是 struct task_struct,8KB 左右,几百个字段。本文把它切成 PID/凭据/内存/文件/信号/调度/namespace/追踪 八个区域,讲清楚 current 宏、thread_info、per_task 栈与 task_struct 的布局关系,以及字段变化背后的十年演进。
2026-04-17 | os | #process-lifecycle #do-exit #release-task #zombie #orphan #subreaper #pidfd #waitpid
一个进程从诞生到尸体被回收,在内核里走过六个阶段:clone → run → exec(可选)→ exit → zombie → release。本文按阶段讲 do_fork、bprm_execve、do_exit、release_task,以及 waitpid/pidfd/subreaper 的收尸规则、孤儿与僵尸的语义、systemd PID 1 的特殊性。
2026-04-17 | os | #signals #sigaction #signalfd #tgkill #async-signal-safe #pidfd #sigqueue
signal 在 Unix 里几乎等同「异步打断」,但它的 API 踩满雷:不可重入的 handler、ASS-safe 函数清单、SIGCHLD 丢失、多线程语义、SIG_DFL 的历史包袱。本文讲 kill/tgkill/rt_sigaction、signalfd、pidfd_send_signal、async-signal-safe 的真实边界,以及为什么新代码应该尽量把 signal 转成 fd。
2026-04-17 | os | #pipe #fifo #socketpair #splice #scm-rights #pipe-buf #vmsplice
管道是 Unix 最古老的 IPC。但内核里它不是一条 FIFO 字节流——它是一个环形页缓冲(pipe_buffer 数组),支持 splice/vmsplice 零拷贝。本文讲 pipe/pipe2、PIPE_BUF 原子写边界、O_NONBLOCK 与 SIGPIPE、命名管道 FIFO、socketpair 与 SCM_RIGHTS 传 fd、splice/tee 的数据平面优化。
2026-04-18 | os | #shm #shared-memory #memfd #hugetlbfs #tmpfs #file-seals #ipc
共享内存是最快的 IPC,但 API 分裂成三代:SysV shmget/shmat、POSIX shm_open、现代 memfd_create。本文讲三者的内核差别、hugetlbfs 的大页共享、memfd sealing 在 GPU/Wayland 里的安全作用、以及 /dev/shm 的 tmpfs 真相。
2026-04-18 | os | #message-queue #ipc #mqueue #posix-mq #sysv #kdbus #dbus
消息队列承诺「有边界的带优先级的 IPC」,但 Linux 上两代 API(SysV msg、POSIX mq)都很冷清。内核内的 kdbus 曾想成为下一代系统总线,最终被拒。本文讲三者的设计、使用限制、以及为什么现代系统几乎都改走 Unix socket + 序列化库 + userspace broker。
2026-04-18 | os | #namespace #user-ns #pid-ns #mount-ns #net-ns #rootless #container
namespace 把全局内核资源(pid、mount、net、uts、ipc、user、cgroup、time)切成多个互不可见的视图。本文讲 7 种 namespace 的语义、unshare/setns/clone3 API、user ns 的 uid 映射、rootless 容器、namespace 与 cgroup 的分工、以及 pid ns init 的特殊待遇。
2026-04-18 | os | #cgroup-v2 #psi #systemd-slice #resource-control #io-weight #memory-max
cgroup v2 把 v1 的多 hierarchy 统一成单一树。本文讲 unified hierarchy、controller 清单、cpu.weight/io.weight/memory.max、PSI 压力指标、systemd slice/scope/service 层级、cgroup delegation 与 rootless、以及 cgroup v2 的诊断姿势。