# 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/newfstatat`、`faccessat2`、`linkat/renameat2`、`readlinkat` 等;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()` 占位返回 `ENOSYS`;`truncate_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/setgroups`;`umask` 类型改造;`/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 ,
linfeng: , <1925466036@qq.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
Samuel Dai: ,
曾俊 <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
BrahmaMantra <140599389+BrahmaMantra@users.noreply.github.com>
Vitus: , <144411726+Vitus213@users.noreply.github.com>
YJwu2023
GnoCiYeH
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
oeasy1412
dragonosbot
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 --