Linux 内核是操作系统的核心,主要负责进程管理、内存管理、文件系统、设备驱动、网络协议栈、安全机制等功能。下面是 Linux 内核的详细组成及其关键特性。
1. 进程管理(Process Management)
进程管理负责创建、调度、终止进程,并提供进程间通信(IPC)机制。
1.1 进程调度(Scheduler)
CFS(Completely Fair Scheduler,完全公平调度器):基于 vruntime(虚拟运行时间),适用于普通任务。RT(Real-Time Scheduler,实时调度器):FIFO(先进先出)、RR(时间片轮转),适用于低延迟应用。Deadline Scheduler:适用于实时性要求极高的任务,如视频流处理。
1.2 进程状态
TASK_RUNNING(运行态):进程正在运行或等待 CPU。TASK_INTERRUPTIBLE(可中断睡眠):等待资源,可被信号唤醒。TASK_UNINTERRUPTIBLE(不可中断睡眠):等待 I/O,不响应信号。TASK_STOPPED(已停止):进程被暂停,如 SIGSTOP。TASK_ZOMBIE(僵尸态):进程终止但未被父进程回收。
1.3 进程间通信(IPC)
管道(Pipe):pipe() 进行进程间单向通信。共享内存(Shared Memory):shmget()、shmat(),适用于大数据交换。消息队列(Message Queue):msgget()、msgsnd(),支持多进程消息传递。信号(Signals):如 SIGKILL(9 号信号)、SIGTERM(15 号信号)。Socket:基于 TCP/IP 进行跨进程或网络通信。
2. 内存管理(Memory Management)
负责虚拟内存、物理内存、分页管理、内存分配等。
2.1 虚拟内存
地址空间:用户态(User Space)+ 内核态(Kernel Space)。页表(Page Table):记录虚拟地址到物理地址的映射。TLB(Translation Lookaside Buffer):加速虚拟地址翻译。mmap():将文件或设备映射到进程地址空间。
2.2 物理内存管理
伙伴系统(Buddy System):二倍分配算法,适用于大块内存管理。Slab 分配器:用于缓存小对象,提高内存复用。kmalloc() / vmalloc():内核动态分配内存。
2.3 交换(Swap)
Swappiness:/proc/sys/vm/swappiness 控制内存换出策略。OOM Killer:内存不足时杀死进程,避免系统崩溃。
3. 文件系统(File System)
提供数据存储、访问权限、磁盘管理等功能。
3.1 VFS(Virtual File System,虚拟文件系统)
统一的文件操作接口(open、read、write、close)。支持多种文件系统(EXT4、XFS、Btrfs、ZFS)。
3.2 磁盘管理
inode 结构:存储文件的元数据,如权限、大小、指针等。超级块(Superblock):存储文件系统的整体信息,如块大小、索引表等。日志文件系统(Journaling File System):如 EXT4 使用 JBD2 记录变更,提高可靠性。
3.3 文件权限
用户/组/其他(U/G/O)权限:chmod 控制 rwx 权限。ACL(Access Control List):提供更细粒度的访问控制。SELinux/AppArmor:基于安全策略的强制访问控制(MAC)。
4. 设备驱动(Device Drivers)
管理硬件设备,提供标准化访问接口。
4.1 设备类型
字符设备(Character Device):如 /dev/null、/dev/ttyS0(串口)。块设备(Block Device):如 /dev/sda(磁盘)。网络设备(Network Device):如 eth0(网卡)。
4.2 设备驱动加载
内核模块(Kernel Module):insmod、modprobe、rmmod 进行动态加载和卸载。设备树(Device Tree):用于 ARM 设备的硬件描述。
5. 网络协议栈(Networking)
提供网络通信功能。
5.1 网络层
IP(Internet Protocol):支持 IPv4、IPv6。ARP(Address Resolution Protocol):IP 地址和 MAC 地址映射。
5.2 传输层
TCP(Transmission Control Protocol):可靠传输,支持拥塞控制。UDP(User Datagram Protocol):无连接传输,适用于实时应用。
5.3 应用层
Socket API:socket()、bind()、listen()、accept()。iptables/nftables:用于防火墙、NAT 规则。
6. 任务调度(Task Scheduling)
决定进程如何分配 CPU 资源。
CFS(Completely Fair Scheduler):默认调度器,基于 vruntime 计算调度优先级。实时调度(Real-Time Scheduling):支持 SCHED_FIFO 和 SCHED_RR。抢占式调度(Preemptive Scheduling):高优先级进程可抢占 CPU 资源。
7. 内核安全(Security)
提供系统安全机制,防止未经授权的访问。
7.1 访问控制
权限管理(U/G/O 权限模型)。CAP(Capabilities):细化 root 权限,如 CAP_NET_ADMIN(管理网络)。
7.2 安全模块
SELinux(Security-Enhanced Linux):提供强制访问控制(MAC)。seccomp:限制进程可用的系统调用,提高安全性。
8. 内核模块(Kernel Modules)
动态加载模块:insmod / modprobe / rmmod。查看已加载模块:lsmod。内核符号表:/proc/kallsyms。
9. 系统调用(System Calls)
提供用户态与内核态的交互接口。
进程管理:fork()、execve()、waitpid()。文件操作:open()、read()、write()、close()。内存管理:mmap()、brk()。网络通信:socket()、bind()、listen()、accept()。
总结
Linux 内核是一个高度模块化的操作系统核心,提供了进程管理、内存管理、文件系统、设备驱动、网络协议栈、安全机制等功能。它支持多任务、虚拟内存、强大的网络协议,并且可以通过加载模块进行扩展。你在工作中主要涉及 Linux 相关的哪些优化或运维任务?