Linux
linux 系统是当今使用最为广泛的操作系统,从嵌入式设备到手机、PC、服务器,处处都有其身影,在实际的生产中,往往会基于已有的操作系统进行定制,而不是从头开始编写,利用现有的 linux 实现可以极大加速系统层开发,同时复用 linux 平台上的应用层软件生态。
linux 系统开发
linux 系统是一个高度模块化的软件系统,由开源社区维护。系统开发者可以充分参与其中开发,并以之为基础定制属于自己的操作系统。
linux 包含多个子系统,每个子系统负责特定的功能,常见的重要的子系统有:
子系统名称 | 功能简介 |
---|---|
🔧 进程管理子系统 | 管理 task(进程/线程)、调度器、上下文切换等 |
🧠 内存管理子系统(MM) | 管理虚拟内存、物理页框、页表、内存映射、swap、slab/slub 等 |
📁 文件系统子系统(VFS) | 抽象多种文件系统接口(ext4、xfs、proc、tmpfs 等) |
💾 块设备子系统(Block I/O) | 管理磁盘等块设备、I/O 调度器 |
🧮 系统调用接口子系统(Syscall) | 提供用户态与内核通信的接口(如 open/read/write) |
🌐 网络子系统(Net) | 实现 TCP/IP 协议栈、socket、路由、防火墙等功能 |
⌨️ 设备驱动子系统 | 通过驱动框架(platform bus、PCI、USB 等)管理硬件 |
🔐 安全子系统(LSM) | 提供权限控制、安全策略(SELinux、AppArmor) |
🧾 中断和时钟子系统 | 处理中断、定时器、时钟源 |
⌛ 电源管理子系统(PM) | 控制设备节能模式、休眠、唤醒等 |
🔄 同步/IPC 子系统 | 实现信号、信号量、futex、消息队列、管道等通信机制 |
📊 审计与跟踪子系统 | 提供 audit、tracepoints、perf、eBPF 支持 |
🪤 错误处理子系统 | 处理异常、oops、panic、内存纠错等 |
进程管理子系统与很多其他子系统均有交际,是理解操作系统最为最为关键的子系统。
内核模块
Linux 是可扩展架构,允许动态加载和卸载功能模块:
- 包括设备驱动程序、文件系统、网络协议栈等
- 动态加载通过 insmod/modprobe 命令
- 卸载通过 rmmod 命令
内核模块加载后:
- 符号空间中的函数不会被加入到操作系统运行的物理内存中
- 通过 EXPORT_SYMBOL 宏导出函数
- 只有通过该宏显式导出的函数才能在模块外部可见
内核模块加载区别于动态链接库加载:
- 内核模块加载是将二进制目标文件加载到物理内存中
- 动态链接库由系统在创建进程时加载到虚拟内存中