Skip to content

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 宏导出函数
  • 只有通过该宏显式导出的函数才能在模块外部可见

内核模块加载区别于动态链接库加载:

  • 内核模块加载是将二进制目标文件加载到物理内存中
  • 动态链接库由系统在创建进程时加载到虚拟内存中