V0.2.0.md 12 KB

V0.2.0

发布日期: 2025-08-22

版本定位: 0.2.0 是 DragonOS 在「可用性、可观测性、可扩展性」三个维度的里程碑版本——引入 ext4、动态链接、eBPF、虚拟化、命名空间 (PID/Mount/User 初步)、多体系结构 (x86_64 / RISC-V64 / LoongArch64) 支持,以及系统调用子系统、内存/文件缓存子系统的大幅重构,为后续 0.3.x 的容器化、网络与调度增强打下基础。


📌 概览摘要 (Executive Summary)

核心亮点:

  1. 文件系统与存储: 新增 ext4;完成 mount/umount2;实现 gendisk/分区扫描;/proc/mounts;页面缓存与文件映射体系化;支持实验性 overlayfs;改进 FAT & VFS 元数据 (statx / newfstatat)。
  2. 进程与命名空间: 引入 PID Namespace、Mount Namespace、Namespace Proxy;实现 unshare();改进进程组 / Session / TTY 作业控制;增强 /proc 进程信息。
  3. 内存与虚拟内存: mmap 延迟分配、msync、私有/共享文件映射;PageCache 脏页同步/回收;多处栈使用优化与爆栈修复;SLAB 与 buddy 回收改进。
  4. 可观测性与可扩展: 初步 eBPF 支持(rbpf → 主线 / kprobe / tracepoint / Aya 生态);tracepoint 框架化;静态键 (static-keys)。
  5. 虚拟化: 引入 KVM/VMX 基础框架与 EPT;清理旧 KVM 代码;改进启动稳定性。
  6. 体系结构: 新增 LoongArch64 引导 & 异常处理早期实现;RISC-V64 改进;多引导协议抽象 (Multiboot2 / HVM / Serial Console / Framebuffer)。
  7. 系统调用与内核结构: 统一 syscall table;大量子系统模块化迁移;ERESTARTSYS 机制;补齐/新增大批系统调用(poll/epoll/select、eventfd、execveat、unshare、msync 等)。
  8. 安全与权限: Cred 框架 (UID/GID/FSUID/权限判定);set*id / setres*chown/chmod 迁移与修复。
  9. 设备与 I/O: virtio console、virtio blk 分区识别、loopback 网卡、TTY + epoll、HVC、PCI 配置空间访问、网络设备 sysfs 注册。
  10. 工具链与生态: 动态链接 (ELF 解释器);Dadk 0.2.0 加速构建;统一用户态程序构建;实验接入 Tokio 单线程运行时;文档自动翻译与版本化。
  11. 稳定性与质量: 大量栈帧/死锁/内存越界/竞态/信号/等待语义/PageCache 修复;改进 backtrace/unwind;日志系统统一化。

⚠️ 重大变化与潜在不兼容 (Breaking / Important Changes)

  • Dadk 升级到 0.2.0:旧版配置不兼容,需按新文档迁移。
  • Syscall 结构重排:各子系统迁移到表驱动架构;自定义补丁需适配。
  • 内核栈默认 16K → 32K,并引入 Guard Pages / 写保护 (x86_64)。
  • PageCache 语义升级:mmap + 直接读写需结合 msync;旧行为假设需调整。
  • Namespace 架构初步:接口未来可能调整(仍属实验状态)。
  • eBPF 接口为早期形态:Map / Helper / 类型限制后续可能变化。

✨ 新增 / 增强特性 (Features & Enhancements)

1. 文件系统 & VFS

  • ext4:基于 another_ext4 集成,可从块设备挂载。
  • mount/umount2:真实块设备挂载链路 + 分区扫描 (MBR);支持 MountFlags;/proc/mounts
  • overlayfs (实验):多层只读 + 顶层写 copy-up + whiteout。
  • gendisk 抽象;virtio 磁盘作为根文件系统;块设备自动注册 devfs。
  • FAT/vfat:rename/move 重构;statx 创建时间 (btime);文件映射;page cache 同步修复。
  • VFS:statx/newfstatatfaccessat2linkat/renameat2readlinkat 等;open/close/stat/ioctl 拆分;LookUpFlags;/proc 扩展(kthread 标记 / FD 占用 / exe 链接 / 运行/启动时间 / tty 信息)。

2. 进程 / 命名空间 / 会话

  • PID Namespace:ID 映射与隔离;nsproxy 统一挂载。
  • Mount Namespace:根挂载树隔离。
  • unshare():新建 namespace(现覆盖 PID/Mount 基础)。
  • Session / Process Group:完整作业控制;TTY 前台进程组信号 (SIGINT 等);wait4 修复。
  • reboot 流程增强(magic 校验 / 多 cmd 预留)。

3. 内存管理 (MM)

  • mmap 延迟分配 / msync / mprotect 修复 / madvise / msync 表接入。
  • PageCache:ID 管理、页面回写、脏页清理、回收线程、多次映射一致性修复。
  • SLAB → buddy 释放路径补全;爆栈检测 (clippy);拆分大函数降低栈占用。
  • mincore() 占位返回 ENOSYStruncate_inode_pages 框架。

4. 可观测 & eBPF

  • bpf():初始 Map / kprobe / 统计样例;rbpf 升级 → 主线;Aya 兼容模板。
  • tracepoint 框架化;静态键支持热点条件启用。

5. 虚拟化 & 平台

  • 初步 KVM/VMX + EPT;旧 KVM 清理。
  • HVM / Multiboot2 / 启动命令行解析 (Arg/KV/EarlyKV)。
  • LoongArch64:引导进入 kernel_main + 异常处理;RISC-V64 运行 Rust HelloWorld;多平台串口/控制台抽象;Serial Console + nographic。

6. 设备与 I/O

  • virtio console (HVC);virtio blk/网/控制台中断命名改进;PCI 配置空间访问 (portio)。
  • Loopback 网卡;网络设备 sysfs 节点与属性;DHCP 稳定性。
  • eventfd / epoll / poll / ppoll / select / pselect6:等待/超时/信号一致性。
  • TTY:适配 epoll;控制字符解析;波特率/termios;tab/erase 修复;SIGINT 广播。

7. 安全 & 账户

  • Cred 框架:UID/EUID/FSUID/GID/组列表;seteuid/setegid/setres*chown/chmod/fchownat/lchown
  • get/setgroupsumask 类型改造;/proc status 名称精确化。

8. 系统调用子系统

  • 统一 syscall table;ERESTARTSYS;批量迁移(process/mm/vfs/ipc)。
  • 新增/补齐:mount, umount2, eventfd, poll/ppoll/select/pselect6, epoll 重构, fchdir, mkdirat/mkdirat2, utimensat/utimes, newfstatat/statx, execveat, unshare, set|getgroups, msync, madvise, mremap, mprotect, brk/sbrk, reboot 增强, rt_sigpending, mincore(ENOSYS) 等。

9. 工具链 / 构建 / 文档

  • Dadk 0.2.0:镜像生命周期管理 / 构建加速 / profiling。
  • 统一用户程序构建:Rust + C;示例 Rust 应用。
  • 动态链接 ELF 解释器;busybox 引导模式 & NovaShell/DragonReach 演进。
  • 自动文档翻译,多语言,多版本 Sphinx;页脚显示 commit;README / Q&A / namespace 文档更新。
  • CI:Docker 构建缓存、按分支触发、镜像自动推送、MinIO/S3 分发、loongarch64 QEMU 构建、工具链 nightly 锁定、backtrace/unwind 升级、栈溢出测试。

🚀 性能与资源占用 (Performance & Footprint)

  • 减少多处大栈帧:IRQ 初始化拆分、ACPI 表读取宏化、process create/内存池结构重写 (Vec 替换大数组)。
  • PageCache 二次映射写入 panic 修复 → 提升 mmap IO 连贯性;减少 copy。
  • SLAB 空闲页回收 → buddy,降低驻留内存。
  • 通过写保护 + Guard Pages 早期发现非法写入。

🛠 稳定性 & 关键修复 (Stability & Fixes)

代表性修复:

  • 等待/进程:wait/wait4 语义、do_wait 锁释放、Blocked 子进程处理。
  • I/O 多路复用:epoll inode 引用释放、epoll 超时/唤醒广播、poll 边界/RestartBlock。
  • 管道/信号:pipe/FIFO 非阻塞 + 信号/kill 语义;阻塞 pipe 可被 kill;命名管道 POSIX 行为。
  • PageCache:mmap 多实例一致性;回写已 drop address space panic;unlink 后脏页处理。
  • futex:用户态地址安全 safe_read/safe_write;robust list。
  • 信号:默认 handler 恢复;SIGINT 分发;KILL pid=1 反馈;pending not masked 检查;execve 错误传播。
  • TTY:前台进程组置空错误;init 早期字符输入崩溃;tab 展开越界。
  • Timer:插入边界;sleep 被信号打断 ERESTARTSYS
  • 竞争/内存:slab UAF/越界;nttyData 栈溢出;buddy 构造大栈帧;内核地址错误 RIP 输出。
  • 文件系统:getcwd 语义;read O_PATH 校验;unlink 后 dirty 清理;remount 错误;mprotect vm_flags
  • ELF:解释器路径读取越界;execve 失败错误码。
  • 多路复用:select/pselect6 初期编译问题。
  • virtio/PCI:多设备中断冲突;PCI 初始化顺序;virtio net 中断处理。
  • 网络:DHCP 网卡顺序;loopback / poll listen 状态。

🧾 新系统调用清单 (部分)

mount, umount2, fchdir, mkdirat/mkdirat2, linkat/renameat/renameat2, newfstatat, statx, readlinkat, faccessat/faccessat2, eventfd, poll, ppoll, select, pselect6, epoll (重构), utimensat, utimes, msync, madvise, mremap, mprotect, brk/sbrk (表化), execveat, unshare, setgroups/getgroups, rt_sigpending, reboot (增强), mincore(ENOSYS) ...


🧪 开发与构建体验 (Dev Experience)

  • Dadk 0.2.0:镜像创建 / 挂载 / 卸载统一;构建加速;profiling。
  • 用户程序:Rust + C 统一构建流水线;Rust 示例。
  • 工具链:固定 nightly 版本 & 升级脚本;多架构交叉工具链脚本。
  • 文档:自动翻译 & 失效清理;中英双语;FAQ / 构建问题指引。

🙌 贡献者 (部分, 按提交活跃度 / 首字母)

感谢所有贡献者在内核子系统、文件系统、虚拟化、文档与工具链方面的持续投入。

特别感谢以下核心贡献者:

  • longjin - 项目负责人,大量核心功能实现与重构
  • chenlinfeng (Godones) - eBPF、网络、文件系统等
  • sparkzky - TTY、进程管理、系统调用重构
  • MemoryShore - 文件系统、内存管理、VFS
  • Samuel Dai - KVM、网络、驱动
  • 黄铭涛 - PCI、驱动、内核优化
  • 以及所有其他贡献者!

本版本贡献者清单

LoGin longjin@DragonOS.org, jinlong@tencent.com
linfeng: chenlinfeng25@outlook.com, 1925466036@qq.com
火花 sparkhhhhhhhhhh@outlook.com, 146502758+sparkzky@users.noreply.github.com
MemoryShore: 1353318529@qq.com, 105195940+MemoryShore@users.noreply.github.com
黄铭涛: 1037827920@qq.com, 114841534+1037827920@users.noreply.github.com
Jomo xuzihao@dragonos.org
Samuel Dai: samuka007@dragonos.org, dailvchen@dragonos.org
曾俊 110876916+ZZJJWarth@users.noreply.github.com
kaleidoscope416 2448956191@qq.com
github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
DoL 1240800466@qq.com
donjuanplatinum 113148619+donjuanplatinum@users.noreply.github.com
chiichen chiichen@qq.com
BrahmaMantra 140599389+BrahmaMantra@users.noreply.github.com
Vitus: zhzvitus@gmail.com, 144411726+Vitus213@users.noreply.github.com
YJwu2023 yujianwu2019@gmail.com
GnoCiYeH heyicong@dragonos.org
LIU Yuwei 22045841+Marsman1996@users.noreply.github.com
yuyi2439 68320855+yuyi2439@users.noreply.github.com
codeironman 1553389239@qq.com
EMasi 1176949486@qq.com
SMALLC 121806694+smallcjy@users.noreply.github.com
laokengwt 143977175+laokengwt@users.noreply.github.com
Godones chenlinfeng25@outlook.com
oeasy1412 oeasy1412@gmail.com
dragonosbot bot@dragonos.org
xiaolin2004 1553367438@qq.com, 109840258+xiaolin2004@users.noreply.github.com


✅ 验证建议 (Smoke Test Checklist)

  • 基础启动:x86_64 / riscv64 / loongarch64 (串口/图形);检查 /proc/mounts /proc/*/status
  • 动态链接:运行动态链接 busybox / Rust 程序。
  • 文件系统:挂载 ext4 & vfat;创建/删除/rename;mmap + 直接写 + msync
  • 进程控制:多 shell / Ctrl+C / 前后台切换。
  • 网络:loopback ping / DHCP 初始化日志。
  • eBPF:加载示例 kprobe 统计程序;读取 trace_pipe
  • poll/epoll:运行 test_poll / test_epoll
  • reboot:执行 reboot 系统调用(模拟)。
  • Namespace:测试 unshare(挂载隔离 / PID 观察)。

🙏 致谢 (Acknowledgements)

感谢所有开发者、测试者、文档贡献者及社区用户的反馈。DragonOS 0.2.0 站在前序版本的实验与积累之上,也为后续容器化、资源隔离与性能优化奠定结构基础。欢迎通过 Issue / PR / 讨论区持续参与。


🔎 附录: 关键词索引 (便于检索)

ext4 overlayfs PageCache mmap PID namespace mount namespace unshare syscall table eBPF kprobe tracepoint Aya KVM VMX EPT LoongArch64 RISC-V virtio console loopback eventfd poll epoll select pselect6 ppoll statx newfstatat execveat dynamic linking Dadk 0.2.0 Cred chown msync mprotect utimensat reboot slab buddy Guard Page WP Tokio groupprocess/session

-- END OF DragonOS 0.2.0 Release Notes --