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路径/版本用途
spin0.9自旋锁 (Mutex, RwLock)
lazy_static1.4 (spin_no_std)延迟初始化的全局静态变量
bitflags2.4位标志宏(Cgroup 控制器、挂载标志等)
drivers../driversVGA 缓冲区、println!
x86_640.15x86_64 架构支持(页表、寄存器、中断)
mm../mm内存管理(帧分配器、页表管理器、TLB shootdown)
xmas-elf0.9ELF 文件解析
cpu_local../cpu_localPer-CPU 数据(CpuLocal<T>
audit../audit审计日志(系统调用审计)
seccomp../seccompSeccomp/Pledge 沙箱过滤
cap../cap能力(Capability)系统
lsm../lsmLinux 安全模块(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 任务计数