Linux内核是系统运行的底层引擎,负责硬件操作、资源分配与进程调度;它通过CFS调度器管理CPU时间片,用虚拟内存机制实现地址映射,借VFS和驱动抽象设备访问,以系统调用为用户态唯一入口,各子系统需在微秒级协同工作。

Linux内核不是“系统的一部分”,它就是系统运行的底层引擎——所有硬件操作、资源分配、程序调度,都必须经由它中转和裁决。
进程调度:谁用CPU、用多久,全听它的
你打开浏览器、后台跑着 Docker、SSH 连接还挂着,这些看似同时运行的程序,其实是在被内核用毫秒级时间片轮流“喂”CPU。它靠 CFS(完全公平调度器)维护一个红黑树,动态计算每个 task_struct 的虚拟运行时间,确保交互程序响应快、批处理任务不饿死。
常见错误现象:top 里看到 CPU 使用率 100%,但 load average 高得离谱,往往不是 CPU 真忙,而是大量进程在等锁或 I/O —— 这恰恰说明内核正在频繁做上下文切换,调度开销已成瓶颈。
内存管理:给每个进程造一个“假地址空间”
你写个程序访问 0x7fffabcd1234,这个地址在物理内存里根本不存在;内核通过页表把虚拟地址翻译成真实物理页帧,再配合 MMU 硬件完成实时映射。它用 slab 分配器管小对象(比如 socket 结构体),用 buddy system 管大块连续内存,还悄悄把不活跃页写进 swap 或丢弃(如果只是 page cache)。
容易踩的坑:malloc() 成功不代表物理内存已分配——真正分配发生在第一次写入时(page fault 触发);而 OOM killer 杀进程,也不是因为“内存满了”,而是内核发现无法满足下一个内存申请且无法回收足够页面时的最后手段。
设备驱动与 VFS:让硬盘、网卡、键盘“说人话”
你执行 cat /proc/cpuinfo 或 ping baidu.com,背后没有一行代码直接读 CPU 寄存器或发以太网帧。内核用 VFS 抽象出统一的 open/read/write 接口,上层不管底下是 ext4 还是 Btrfs;用 drivers/ 目录下的模块把硬件差异藏起来,只暴露 /dev/sda、/dev/ttyUSB0 这类标准文件节点。
关键点:modprobe 加载的不是“驱动程序”,而是内核模块;它一旦加载,就运行在内核态,一个空指针解引用或无限循环,直接导致整机 panic —— 这和用户态程序崩溃有本质区别。
系统调用:用户程序唯一能“敲门”进内核的入口
所有看似直白的操作——printf()、fopen()、bind()——最终都汇入几十个 sys_* 函数,比如 sys_read() 或 sys_socket()。它们是内核为用户态划出的“安全通道”,每次调用都会触发一次特权级切换(从 ring 3 到 ring 0),并经过参数校验、权限检查、资源审计。
性能影响明显:高频小数据 write() 比批量 writev() 多出数倍上下文切换开销;而用 epoll_wait() 替代轮询 read(),本质是让内核帮你记住哪些 fd 就绪了,避免反复进出内核态。










