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