Kernel Core Module (kernel/kernel_core)
1. 概述
kernel_core 是 Zero-OS 内核的核心模块,位于 /data/thefool/workspace/Zero-os/kernel/kernel_core/。该模块采用 Rust 编写,运行在 #![no_std] 环境下,面向 x86_64 架构。它实现了操作系统内核最基础的功能子系统,包括:
- 进程管理 (
process.rs): 进程控制块(PCB)、进程表、进程生命周期管理 - Fork/Clone (
fork.rs): 进程复制,写时复制(COW)页表机制 - 系统调用 (
syscall.rs): 类 POSIX 系统调用分发与实现(约 8900 行) - 信号处理 (
signal.rs): POSIX 信号定义、投递与默认动作 - ELF 加载器 (
elf_loader.rs): ELF64 可执行文件解析与加载 - RCU 同步 (
rcu.rs): Read-Copy-Update 无锁读同步原语 - Cgroup 资源控制 (
cgroup.rs): Cgroup v2 风格的 CPU/内存/PID/IO 资源限制 - 命名空间隔离: PID (
pid_namespace.rs)、Mount (mount_namespace.rs)、IPC (ipc_namespace.rs)、Network (net_namespace.rs)、User (user_namespace.rs) - 用户空间内存拷贝 (
usercopy.rs): 容错的内核-用户空间数据传输,SMAP 保护 - 异常表 (
exception_table.rs): x86_64 异常表,用于 usercopy 的 EFAULT 语义 - 调度器钩子 (
scheduler_hook.rs): 调度器与其他模块的解耦回调接口 - 时间管理 (
time.rs): 基于时钟中断的时间戳与 TCP 定时器驱动
该模块是整个内核的"中枢",几乎所有其他内核子系统(调度器、IPC、VFS、网络栈)都依赖它提供的进程抽象和系统调用接口。
2. 依赖与集成
2.1 Cargo 依赖 (Cargo.toml)
| 依赖 crate | 路径/版本 | 用途 |
|---|---|---|
spin | 0.9 | 自旋锁 (Mutex, RwLock) |
lazy_static | 1.4 (spin_no_std) | 延迟初始化的全局静态变量 |
bitflags | 2.4 | 位标志宏(Cgroup 控制器、挂载标志等) |
drivers | ../drivers | VGA 缓冲区、println! 宏 |
x86_64 | 0.15 | x86_64 架构支持(页表、寄存器、中断) |
mm | ../mm | 内存管理(帧分配器、页表管理器、TLB shootdown) |
xmas-elf | 0.9 | ELF 文件解析 |
cpu_local | ../cpu_local | Per-CPU 数据(CpuLocal<T>) |
audit | ../audit | 审计日志(系统调用审计) |
seccomp | ../seccomp | Seccomp/Pledge 沙箱过滤 |
cap | ../cap | 能力(Capability)系统 |
lsm | ../lsm | Linux 安全模块(LSM)钩子 |
security | ../security | 安全 RNG |
net | ../net | 网络套接字层 |
trace | ../trace | 可观测性(计数器、watchdog) |
compliance | ../compliance | 合规性配置(FIPS 模式) |
livepatch | ../livepatch | 内核热补丁 |
2.2 模块导出 (lib.rs, 第 1-120 行)
lib.rs 声明了所有子模块并通过 pub use 导出关键类型和函数。主要导出包括:
- 进程相关:
ProcessId,Priority,FutexKey,Credentials,FileOps,FileDescriptor,MAX_FD,NGROUPS_MAX - Fork 相关:
sys_fork,create_fresh_address_space,ForkError,ForkResult,PAGE_REF_COUNT - ELF 加载:
load_elf,ElfLoadError,ElfLoadResult,USER_STACK_SIZE,USER_STACK_TOP - 调度器钩子:
force_reschedule,on_scheduler_tick,register_resched_callback,register_timer_callback - 信号:
send_signal,Signal,PendingSignals,SignalAction - 系统调用:
syscall_dispatcher,SyscallError,SyscallResult,VfsStat,DirEntry,FileType - 能力系统:
CapTable,CapEntry,CapError,CapFlags,CapId,CapRights
2.3 回调解耦架构
为避免 crate 间循环依赖,kernel_core 大量使用回调注册模式:
关键回调类型(process.rs 第 67-97 行):
SchedulerCleanupCallback: 进程移除时通知调度器IpcCleanupCallback: 进程退出时清理 IPC 端点SchedulerAddCallback: fork/clone 后将新进程加入调度队列FutexWakeCallback: 线程退出时唤醒 futex 等待者CpusetTaskJoinedCallback/CpusetTaskLeftCallback: Cpuset 任务计数