ARM64 体系结构与内核实现
ARM64 是当今服务器、移动设备与嵌入式平台的主流指令集架构。本文从异常级别 EL0 到 EL3 与 AArch64 系统寄存器体系出发,深入剖析四级页表结构与地址翻译流程,详解设备树 DTS 语法与内核 of 系列接口、FDT 传递与 PSCI 固件调用约定、GICv3 中断控制器架构、cache 一致性与内存屏障语义,最后给出交叉编译与 QEMU 调试的完整实践路径,并与 x86_64 架构逐项对比。
category
ARM64 是当今服务器、移动设备与嵌入式平台的主流指令集架构。本文从异常级别 EL0 到 EL3 与 AArch64 系统寄存器体系出发,深入剖析四级页表结构与地址翻译流程,详解设备树 DTS 语法与内核 of 系列接口、FDT 传递与 PSCI 固件调用约定、GICv3 中断控制器架构、cache 一致性与内存屏障语义,最后给出交叉编译与 QEMU 调试的完整实践路径,并与 x86_64 架构逐项对比。
内核网络栈是 Linux 数据平面的核心,从网卡硬中断到 socket 读取,数据包要穿过 NAPI、协议栈、netfilter、qdisc 等多层结构。本文以 sk_buff 生命周期为主线,详解收发路径、GRO/RPS 优化、conntrack 状态跟踪、TCP 拥塞控制框架与 XDP 快速路径,并给出 netns/veth 容器网络与 perf 丢包定位的完整排查清单。
eBPF 是 Linux 内核中最具影响力的可观测性与网络编程技术,libbpf 与 CO-RE 让它具备了跨内核版本的可移植性。本文剖析 BTF 类型信息与 CO-RE 重定位原理,详解 libbpf 工程骨架与 skeleton 生成流程,并给出验证器报错排查清单。
内存回收是 Linux 内核在内存紧张时维持系统可用性的核心机制。本文从 LRU 四条链表与 lruvec 讲起,剖析页在 active 与 inactive 之间的迁移规则与 refault 距离估算,详解多代 LRU(MGLRU)的 generation 模型与调优参数,深入 kswapd 三水位、直接回收慢路径与分配标志,覆盖 swap、zswap、zram 三种交换后端对比,最后给出 PSI 压力指标、cgroup 内存回收与 OOM 排查清单。
内核并发原语是驱动、网络栈与文件系统正确运行的底层保障。本文从原子操作与内存屏障的语义差异讲起,梳理 spinlock、mutex、rtmutex、rwsem、seqlock 的适用边界与死锁风险,深入剖析 per-CPU 变量与 RCU 宽限期模型,并给出 lockdep、KCSAN 等工具的实战排查清单。
从 CFS 的红黑树与 vruntime 出发,讲解 Linux 6.6 的 EEVDF 调度器如何用 lag 与虚拟截止时间替代权重比例分配,剖析五大调度类与 nice 权重换算,深入调度域负载均衡、PELT 跟踪、CPU 亲和性与隔离,并结合 sched_ext 与 perf sched 给出排查清单。
内核调试是系统稳定性保障的最后一道防线。本文系统讲解 kgdb 远程内核调试的配置与串口连接流程,深入分析 panic 与 oops 日志,覆盖 kdump/vmcore 的收集机制与 crash 工具的强大分析能力,以及 printk 日志级别、dynamic debug、ftrace 函数追踪和 bpftrace/kprobe 动态追踪等生产环境常用诊断技术。
cgroups 与 namespace 是现代容器技术的两大基石。本文深入对比 cgroup v1 与 v2 的层级差异,逐一剖析 cpu/memory/io/pids 等控制器的工作原理,详解 PID/IPC/Net/Mount/UTS/User/cgroup 七种命名空间的隔离机制,覆盖 unshare/nsenter/clone3 工具、挂载传播与用户命名空间安全边界,最后结合 systemd 的 cgroup 集成给出生产实践建议。
Linux 设备驱动是连接硬件与内核的桥梁。本文从主设备号与次设备号的基础概念出发,深入讲解字符设备的注册与 file_operations 设计、ioctl 命令规范、块设备的 I/O 调度与请求队列,进而覆盖 sysfs 动态节点创建、udev 规则、platform driver 总线匹配、miscdevice 简化注册以及 DMA scatter-gather 等进阶主题。
系统调用是用户态与内核态交互的唯一门户。本文从系统调用号的定义与 sys_call_table 出发,深入解析 glibc 封装、INT 0x80 与 SYSENTER/SYSCALL 快速路径的演进,讲解 vDSO 用户态优化、参数传递的寄存器约定以及内核态进出流程中的 pt_regs 结构,最后覆盖系统调用追踪与安全分析工具。
从伙伴系统的 2 的幂拆分与合并机制,到 SLAB/SLOB/SLUB 三种内核对象分配器的演进,再到 Linux 当前默认的 SLUB 实现、CMA 连续内存分配、per-CPU 页分配器与调试特性,本文系统深入地讲解操作系统内核内存分配的核心基础设施,帮助开发者理解 kmalloc 与 vmalloc 的本质差异。
页面置换算法是虚拟内存系统的核心机制,决定了当物理内存不足时应该换出哪个页面。本文从缺页中断处理流程出发,系统讲解 FIFO、LRU、Clock、LFU 等经典算法,深入分析 Belady 异常、栈算法特征与工作集模型,并最终落脚到 Linux 内核的 LRU 平衡策略与 thrashing 预防机制。
Linux 审计子系统在内核里记录安全相关事件:谁在何时对哪个文件执行了哪个系统调用。本文讲解 kauditd 与 netlink 架构、auditctl 规则语法、系统调用与文件监视审计、ausearch/aureport 日志分析,以及性能与合规实践。
ftrace 是内核自带的追踪框架,通过 tracefs 暴露函数追踪、函数图、tracepoint 与动态探针能力。本文系统讲解其分层架构、function_graph 的用法、kprobe 动态插桩、与 perf 的联动以及生产环境下的开销控制。
pthread_mutex 无竞争时根本不进内核,有竞争时才通过 futex 系统调用挂起线程。本文拆解 futex 的用户态快路径、系统调用操作码、等待队列与唤醒,以及 PI futex 如何用优先级继承解决优先级反转。
write 返回不等于落盘:本文拆解页缓存的 address_space 模型、脏页的生成与限流、writeback 线程与 bdi 回写路径、fsync 与 barrier 的持久化语义,以及 dirty_ratio 等参数的调优取舍与常见误区。
从 jiffies 与周期性 tick 到 tickless 内核,从 clocksource 抽象到 hrtimer 高精度定时器,再延伸到 NTP/PTP 校时与 CLOCK_ 系列接口的语义差异,系统梳理 Linux 时间子系统的分层结构与常见陷阱。
从 SMP 到 NUMA 的演进、ACPI SRAT/SLIT 描述的内存拓扑、本地与远程访问的延迟差距,到内核 struct pglist_data 与 zonelist 的调度策略,最后落地 numactl、numad 与自动 NUMA balancing 的调优实践与常见误区。
虚拟化与容器是现代基础设施的两大基石,但它们的隔离模型截然不同。本文从 KVM/QEMU 的硬件虚拟化原理出发,深入 VMX/SVM 指令、EPT 内存虚拟化与 virtio 半虚拟化设备,再剖析容器依赖的 namespace 视图隔离与 cgroup 资源限制,最后对比虚拟机与容器的隔离边界、性能差异与安全风险,帮你建立从 Hypervisor 到 runc 的完整认知链路。
从按下电源键到登录界面,系统要经历固件初始化、Bootloader、内核解压、驱动加载、initramfs、systemd 初始化多个阶段。本文沿真实启动路径逐步解剖:BIOS 与 UEFI 的差异、Secure Boot 信任链、GRUB 如何加载内核、内核从实模式到 start_kernel 的旅程、initramfs 为什么存在,以及 systemd 的并行启动与依赖图,最后给出用 systemd-analyze 做启动性能优化的完整方法。