tianole/docs/agents/tasks/07-user-mode.md
2026-05-08 21:26:30 +08:00

1.6 KiB
Raw Blame History

07 用户态、系统调用与进程

目标

让 Tianole 从只运行 kernel 代码,进入可运行用户程序的阶段。

前置条件

  • 虚拟内存可用。
  • VFS 可读取 ELF 文件或 init 程序。
  • 异常和 syscall 入口可用。

建议边界

  • kernel/syscall/:系统调用入口和分发。
  • kernel/process/:进程、线程、地址空间。
  • kernel/elf/:用户 ELF 加载。
  • arch/x86/ring 3 切换和 syscall 指令支持。

实现内容

  • 建立用户地址空间。
  • 建立 syscall ABI。
  • 建立用户指针检查。
  • 加载用户 ELF。
  • 支持进程退出和等待。
  • 早期可先实现 spawn/exit/wait,再演进到 fork/exec
  • 为 POSIX syscall、fcntl/stat/chmod、signal、pipe、socket、eventfd、futex、共享内存、poll/select 和 IPC 预留 ABI 边界。
  • 为 uid/gid、用户/组、文件权限、进程权限、capability 或等价隔离模型预留进程凭据结构。

非玩具化约束

  • syscall 表要稳定记录。
  • 用户指针不能直接信任。
  • 进程、线程、地址空间结构不要混成一个对象。
  • 用户态崩溃不能直接拖垮 kernel。
  • syscall 不能只按当前 demo 程序硬编码。
  • 进程资源释放必须有明确所有权和引用计数规则。
  • fork/exec/wait、signal、pipe、poll/select 是运行复杂 Unix 程序的关键路径,不能被路线遗漏。

验收方式

  • 最小用户程序可以输出并退出。
  • kernel 能回收用户进程资源。
  • 非法用户访问能进入异常处理并终止进程。
  • syscall ABI 文档化,后续可以被 libc 绑定。