# V0.4.0 — DragonOS dev 文档

# V0.4.0

> 前言：本次版本聚焦“Linux 语义对齐 + 工程可用性”。I/O 多路复用、POSIX 定时器/CPU 时间、文件系统与 procfs 获得大幅补强；tmpfs、mount 传播、等待队列重构等为容器/云原生场景铺路；CI/夜构与 Playground 让体验和回归更顺畅。

> 发布日期: 2025-12-22

## 核心亮点

### I/O 多路复用与时间语义：向 Linux 6.6 对齐

- poll/pselect6 系统调用完善：修复信号掩码恢复逻辑，优化 `pselect6` 实现，正确处理 sigmask 参数和 timeout 验证，移除零超时提前返回的逻辑，确保在等待 I/O 时正确保存和恢复信号掩码 (#1531)

- epoll 事件处理增强：正确处理普通文件的 epoll 事件，避免添加不必要的 epitem；修复 epoll 超时唤醒机制，确保定时器通过 Waker 唤醒等待队列；改进 poll_select_finish 函数以支持更多时间类型 (#1528, #1492)

- POSIX interval timer 完整实现：实现 timer_create、timer_settime、timer_gettime、timer_getoverrun、timer_delete 系统调用，支持 SIGEV_NONE/SIGEV_SIGNAL/SIGEV_THREAD_ID 信号投递模式，修复 gVisor timers_test (#1501, #1521)

- 进程与线程 CPU 时间统计：实现 ProcessCpuTime 结构体，支持用户态、内核态及总执行时间统计；为 PCB 添加 cputime_wait_queue，支持 CLOCK_PROCESS/THREAD_CPUTIME_ID 的 clock_nanosleep；扩展 clock_gettime 和 clock_nanosleep 系统调用支持进程和线程 CPU 时间时钟 (#1517)

- POSIX 调度系统调用：实现 sched_getparam、sched_getscheduler 系统调用，重构 sched_yield 到独立模块 (#1416)

### 文件系统与 VFS：功能扩展与稳定性提升

- tmpfs 文件系统支持：新增 tmpfs 支持并与 devfs 集成，提供内存文件系统能力；实现原子大小管理、零页创建、页缓存管理等功能；支持 /dev/shm 挂载，完善 chroot 和挂载传播机制 (#1459, #1480, #1410)

- 新系统调用实现：

  - `copy_file_range`：实现高效的文件范围复制系统调用 (#1513)

  - `creat`：新增 creat 系统调用支持，遵循 Linux 语义（创建新文件或截断现有文件并打开为只写模式）(#1482)

  - `preadv2/pwritev2`：实现带偏移量和标志位的向量化 I/O 系统调用，支持 RWF 标志位验证 (#1451, #1461)

  - `fadvise64`：实现文件访问建议系统调用，支持页面缓存范围写回和驱逐，改进预读机制支持随机访问模式 (#1439)

  - `umask`：实现 umask 系统调用，改进权限处理，设置默认 umask 为 0022 (#1500, #1419)

- 文件操作改进：

  - 修复 truncate 系统调用的页缓存截断逻辑，修复边界条件，添加长度检查 (#1444)

  - 增强符号链接处理，将最大符号链接跟随次数提升至 40（符合 Linux 6.6 标准），改进 VFS 行为 (#1507)

  - 修复 symlinkat 中父目录路径为 None 时的处理逻辑 (#1512)

  - 修复 sys_rename 逻辑并支持 RENAME_NOREPLACE 标志 (#1393)

  - 修复 pread64 系统调用的兼容性和错误处理，验证 offset 参数和用户缓冲区 (#1398)

- append 锁机制：实现文件追加操作的锁管理器，使用 jhash 算法保障并发写入的正确性，支持强制追加语义 (#1483)

- EventFd 文件系统：实现 EventFd 文件系统并增强 VFS inode 能力，支持事件通知机制；为 IndexNode trait 添加 is_stream、supports_seek、supports_pread、supports_pwrite 方法 (#1486)

- 文件系统标志重构：重构文件系统标志体系，区分打开标志与访问模式，提升代码清晰度 (#1414)

- 路径检查统一：统一使用 vfs_check_and_clone_cstr 函数进行路径检查，减少代码重复 (#1481)

- 文件预读功能：添加文件预读功能支持，新增 readahead 模块实现文件预读算法，提升顺序读取性能 (#1391)

- 挂载传播机制：实现挂载传播机制，支持 Shared、Private、Slave、Unbindable 传播类型，实现递归绑定挂载支持 (#1410)

### procfs 与系统信息：可观测性大幅提升

- 进程信息文件完善：

  - `/proc/<pid>/stat`：提供进程状态信息，支持 BusyBox ps/pstree/top 等工具 (#1490)

  - `/proc/<pid>/task`：实现线程目录结构，支持主线程 tid=pid 的展示 (#1490)

  - `/proc/<pid>/cmdline` 和 `/proc/cmdline`：提供进程和内核命令行参数 (#1489)

  - `/proc/<pid>/maps`：提供进程内存映射信息，改进缺页异常处理 (#1468)

  - `/proc/<pid>/statm`：提供进程内存统计信息 (#1455)

- 命名空间支持：

  - `/proc/<pid>/ns/` 目录：支持动态创建命名空间文件，实现 cgroup 命名空间基础结构 (#1515)

  - `/proc/thread-self/ns`：支持查看线程的命名空间，实现 setns 系统调用用于命名空间管理 (#1412, #1515)

  - 修复命名空间文件创建时的竞态条件 (#1413)

- 内核日志管理：实现内核日志级别管理和 procfs 接口（/proc/sys/kernel/printk），支持动态调整日志级别 (#1415)

- 文件描述符信息：在 procfs 中新增文件描述符相关支持，支持 /proc/self/fd/N 魔法链接，实现管道 FIONREAD ioctl 命令，添加 /proc/<pid>/fdinfo 目录支持 (#1426)

### 进程管理与执行：更接近 Linux 行为

- shebang 脚本支持：添加 shebang 脚本执行支持，实现脚本解析和递归执行，可直接运行脚本文件，支持多种解释器 (#1511)

- 进程等待语义修复：

  - 修复线程组中子进程的等待语义 (#1427)

  - 修复子进程退出时父进程唤醒逻辑，确保无论 exit_signal 为何值都唤醒父进程 (#1516)

- 进程执行改进：

  - 修复 sys_exec 相关测试，修复 execve 系统调用中空路径和空参数处理问题 (#1518)

  - 改进 execve 和 execveat 系统调用的实现，增强执行文件权限检查与信号处理

  - 实现 fd_table 在 execve 进程中的 unsharing，确保隔离性

  - 改进路径解析逻辑，修复 shebang 解释器未找到时的错误日志

- 信号处理增强：

  - 修正 POSIX 定时器信号投递逻辑，支持 SIGEV_THREAD 模式，放宽 SIGEV_THREAD_ID 限制 (#1521)

  - 修复信号忽略逻辑，实现信号忽略检查逻辑 (#1434)

  - 实现增强的信号处理和 IPC 机制，添加 rt_sigqueueinfo 和 rt_tgsigqueueinfo 系统调用 (#1423)

  - 修复 kill 进程组的 bug (#1424)

  - 修复 sys_rt_sigtimedwait 和 sys_rt_sigreturn 相关问题 (#1406, #1394, #1400)

### 内存管理与 I/O：性能与稳定性优化

- 用户空间内存访问修复：

  - 修复 IoVecs 构造时对零长度缓冲区的验证，确保符合 Linux 语义

  - 修复 scatter 方法在遇到不可访问内存时的错误处理，避免部分写入后返回错误

  - 修复 readv/preadv 等系统调用，使其支持分块读取和部分成功写入

  - 修复页面回收逻辑，避免回收仍被映射的文件页

  - 修复 UserBufferReader/Writer 对空指针的检查，防止未定义行为

  - 优化 IoVecs 的用户空间内存访问检查与拷贝逻辑，统一使用 user_accessible_len 进行访问性验证 (#1522)

- 块缓存增强：增强 CacheBlock 和 BlockCache 功能，添加 from_slice 和 write_data 方法，改进 insert_one_block 和 immediate_write 方法接受切片而非向量，修复 FileMapInfo::page_cache 的内存泄漏问题（改为 Weak<PageCache>）(#1465)

- 页面缓存改进：

  - 修复 truncate 时的页缓存截断，修复边界条件 (#1444)

  - 改进页面缓存管理，重构页缓存读写以解决死锁问题 (#1455)

- 内存管理优化：

  - 修复 slab 分配器迭代器越界访问和并发安全问题，将 SLABALLOCATOR 改为 SpinLock 保护 (#1464)

  - 修复异常表安全拷贝的错误处理返回值 (#1395)

  - 优化页面回收过程，分离为两阶段以避免死锁 (#1455)

- mmap 支持增强：为多个文件系统节点实现 mmap 方法，改进 mmap 错误处理和验证，增强内存保护处理和验证 (#1455)

### IPC 与管道：阻塞语义与竞态修复

- FIFO 阻塞打开语义：实现 FIFO 的阻塞打开语义，为 LockedPipeInode 添加 open_wait_queue 用于 FIFO 打开时的阻塞等待，实现 Linux FIFO 的阻塞/非阻塞打开语义（O_RDONLY/O_WRONLY/O_RDWR）(#1429)

- 管道行为完善：

  - 修复并完善 pipe 的行为，新增管道文件系统（PipeFS）并注册 PIPEFS_MAGIC

  - 扩展管道缓冲区至 65536 字节，支持原子写入

  - 实现命名管道（FIFO）支持，允许 O_RDWR 模式打开

  - 修复阻塞模式下写端唤醒的竞态条件，在阻塞模式下先增加 writer 计数再等待读端 (#1529, #1426)

  - 为 fcntl 系统调用添加管道缓冲区大小查询功能（F_GETPIPE_SZ 和 F_SETPIPE_SZ）

  - 在 procfs 中新增文件描述符相关支持

### 网络与设备：稳定性提升

- 网络栈优化：

  - 将 NapiManager 的锁机制改为 lock_irqsave，修复在中断上下文中调用 napi_schedule 可能导致的死锁问题 (#1525)

  - 修复 UDP getsockname/getpeername 系统调用 (#1460)

- TTY 驱动增强：

  - 增强 TTY 驱动和设备管理，改进 master 和 slave 类型的处理 (#1462)

  - 修复 TTY 和会话的权限检查逻辑，添加 TIOCNOTTY 命令支持 (#1430)

  - 为 TTY 设备添加 page_cache 方法并处理无页面缓存的情况 (#1428)

  - 改进 PTY 设备管理，添加 /dev/ptmx 符号链接指向内部 devpts 节点 (#1462)

- 异步 I/O 通知：实现异步 I/O 通知机制和 ioctl 系统调用增强 (#1425)

### 文件系统实现：ext4 与 FAT 改进

- ext4 文件系统：

  - 修复 ext4 inode 读写操作中的自旋锁死锁问题

  - 添加父目录指针支持，实现 parent() 方法

  - 改进块设备寻址逻辑，统一使用 512 字节 LBA

  - 增强根文件系统探测机制，支持 ext4 和 FAT 自动识别

  - 修复 ELF 加载器中解释器路径查找问题

  - 为 ext4 和 fat 文件系统添加探测方法并优化代码 (#1509)

- FAT 文件系统：

  - 更新目录链接计数管理，确保目录链接计数从 2 开始（自引用和父目录链接）(#1454)

  - 完善文件系统统计信息支持，实现 statfs 所需的 SuperBlock 字段 (#1491)

  - 修复 FAT32 FSInfo 空闲簇计数更新时的溢出问题 (#1491)

- 文件系统统计：完善 FAT 和 tmpfs 的文件系统统计信息支持，为 tmpfs 添加默认容量策略（物理内存一半）(#1491)

### 等待队列重构：引入 Waiter/Waker 模式

- 等待队列机制重构：重构等待队列机制，引入 Waiter/Waker 模式避免唤醒丢失，统一等待接口，提供 wait_event_interruptible/uninterruptible 方法，重构 futex、epoll、eventfd、semaphore、completion 等模块使用新等待队列，优化进程等待子进程退出逻辑 (#1452)

- 信号处理修复：在 sys_rt_sigtimedwait 中消费信号后及时刷新 HAS_PENDING_SIGNAL 状态，将 futex 可中断唤醒的错误码从 ERESTARTSYS 改为 EINTR，以符合 Linux 语义 (#1452)

### 工程效率与 CI：自动化与工具链改进

- 夜间构建工作流：新增夜间构建与发布工作流，支持自动化构建和发布，分离构建和发布步骤，压缩构建产物为 tarball (#1469, #1471, #1472, #1473, #1474, #1475, #1476, #1477)

- 构建容器升级：构建容器版本升级至 v1.19，修复 CI 相关问题，添加 riscv64 libc 支持，更新 CI 工作流中的 Docker 镜像仓库地址 (#1442)

- CI 流程修复：

  - 修复 CI 流程中测试失败但返回成功状态的问题 (#1403)

  - 修复 gVisor 测试自动化脚本，修复自动化开启/关闭 gVisor syscall 测例打包的脚本 (#1405)

  - 添加 open_test 测试 (#1458)

- 代码审查自动化：添加 Claude 代码审查工作流，优化代码审查流程和配置，启用进度跟踪功能 (#1435, #1436, #1437, #1438, #1440, #1445, #1446, #1447)

- 开发容器支持：添加基于 CNB 镜像的 devcontainer 支持，设置非 root 用户为默认 devcontainer 用户 (#1449, #1457)

### 文档与社区：体验与可访问性提升

- DragonOS Playground：更新 README 和构建文档，添加 DragonOS Playground 体验方式，在 README 中新增云原生开发体验方式，提供 CNB 平台一键启动链接，更新社区新闻添加 Playground 上线信息 (#1484)

- 文档翻译更新：多轮文档翻译更新，提升国际化支持 (#1485, #1453, #1411, #1408, #1402, #1396)

- 用户环境改进：

  - 修正 PS1 环境变量使其与 bash 默认高亮一致 (#1432)

  - 使用彩色 PS1，提升用户体验 (#1422)

### gVisor 测试：兼容性持续提升

- 测试用例扩展：删除 gVisor 测试中的 fifo_test blocklist 文件，扩展测试覆盖范围 (#1524)

- 系统调用修复：

  - 修复 open 系统调用在 gVisor 下的异常表现，修复多个 open 相关测试 (#1417)

  - 修复 utimensat/futimesat 系统调用边界情况以兼容 gVisor 测试 (#1431)

  - 修复 pread64 系统调用的兼容性和错误处理 (#1398)

  - 修复 sys_rename 逻辑并支持 RENAME_NOREPLACE (#1393)

  - 修复 getdents 系统调用实现 (#1397)

  - 修复 syscall/vfs 中写入部分可读缓冲区时的 SIG 衍生问题 (#1375)

  - 修复 cputime、sys_rt_sigtimedwait 和 sys_rt_sigreturn 相关问题 (#1406, #1394, #1400)

### 其他改进

- 符号表查询修复：修复符号表查询问题，使用二分查找符号替代原有逻辑 (#1443)

- 设备驱动改进：添加随机设备支持（/dev/random），提供随机字节生成能力 (#1455)

- 文件系统改进：改进目录链接计数管理，更新 FAT 和 RAM 文件系统中的目录链接计数管理 (#1454)

## 版本概览

- I/O 多路复用：poll/pselect6 信号掩码恢复逻辑修复，epoll 事件处理增强，超时唤醒机制完善

- 时间与定时器：POSIX interval timer 完整实现，CPU 时间统计，clock_nanosleep 完善，POSIX 调度系统调用

- 文件系统：tmpfs 支持，copy_file_range、creat、preadv2、pwritev2、fadvise64、umask 等新系统调用，append 锁机制，EventFd 文件系统，挂载传播机制

- procfs 增强：/proc/<pid>/stat、/proc/<pid>/task、/proc/<pid>/cmdline、/proc/<pid>/maps、/proc/<pid>/ns/、/proc/thread-self/ns 等文件支持，内核日志管理

- 进程管理：shebang 脚本支持，进程等待语义修复，信号处理增强，进程执行改进

- 内存与 I/O：用户空间内存访问修复，块缓存增强，页面缓存改进，slab 分配器并发安全修复，mmap 支持增强

- IPC 与管道：FIFO 阻塞打开语义，管道竞态条件修复，管道缓冲区动态调整

- 网络与设备：网络栈锁机制优化，UDP 套接字修复，TTY 驱动增强，随机设备支持

- 文件系统实现：ext4 死锁修复，FAT 文件系统改进，文件系统统计信息完善

- 等待队列重构：Waiter/Waker 模式，统一等待接口

- 工程效率：夜间构建工作流，构建容器升级至 v1.19，CI 流程修复，代码审查自动化，开发容器支持

- 文档与社区：DragonOS Playground 推广，文档翻译更新，用户环境改进

- gVisor 测试：测试用例扩展，多个系统调用修复以通过 gVisor 测试

## 详细变更

### 1. I/O 多路复用与时间语义：对齐 Linux 6.6

#### poll/pselect6 优化 (#1531)

- 修复 poll_select_finish 中信号掩码恢复逻辑，避免在 ERESTARTSYS 时错误恢复

- 重构 pselect6 系统调用，正确处理 sigmask 参数和 timeout 验证

- 移除 poll_select_finish 中零超时提前返回的逻辑

- 为 PosixTimeSpec 添加 as_millis 方法

- 将 select 相关测试加入白名单

#### epoll 事件处理 (#1528, #1492)

- 修复普通文件在 epoll 中总是就绪的逻辑，避免添加不必要的 epitem

- 改进 poll_select_finish 函数以支持更多时间类型

- 修复 select 系统调用中 timeout 负值检查

- 重构定时器创建逻辑，使用 EpollTimeoutWaker 结构体实现 TimerFunction

- 将超时唤醒方式从直接唤醒 PCB 改为通过 Waker::wake() 触发

#### POSIX interval timer (#1501, #1521)

- 新增 timer_create/timer_settime/timer_gettime/timer_getoverrun/timer_delete 系统调用处理，并接入 syscall table

- 实现进程级 POSIX interval timer：基于 CLOCK_MONOTONIC 的创建/删除/设置/查询、周期性重装与到期调度

- 完整实现 SIGEV_NONE/SIGEV_SIGNAL/SIGEV_THREAD_ID（放宽 SIGEV_THREAD_ID 限制，允许向同线程组的任意线程投递信号）与 SI_TIMER siginfo（含 si_timerid/si_overrun/si_value）

- 修复 overrun 语义与信号合并：按线程 pending 队列合并并累积 overrun，避免重复入队导致进程被信号杀死

- 修复周期性 timer 的 gettime 剩余时间计算与回调窗口返回 0 的问题

- 修复定时器回调中信号锁/队列访问导致的自锁死

- 修复 ProcessControlBlock::raw_tgid() 返回错误字段的问题

#### CPU 时间统计 (#1517)

- 新增 ProcessCpuTime 结构体，用于统计用户态、内核态及总执行时间

- 为 PCB 添加 cputime_wait_queue，支持 CLOCK_PROCESS/THREAD_CPUTIME_ID 的 clock_nanosleep

- 在调度器 CPU 时间统计中增加 CPU-time 等待队列唤醒逻辑

- 扩展 clock_gettime 和 clock_nanosleep 系统调用，支持进程和线程 CPU 时间时钟

- 添加 PosixTimeSpec::from_ns 方法，便于从纳秒创建时间规格

- 在 process_cputime_ns 中添加对无效线程组关系的防御性回退和日志记录

- 为 thread_cputime_ns 添加原子操作顺序的注释说明

- 新增多线程 CPU 时间测试程序，验证进程 CPU 时间累加线程时间的功能

#### POSIX 调度系统调用 (#1416)

- 添加 sched_getparam 系统调用以获取进程调度参数

- 添加 sched_getscheduler 系统调用以获取进程调度策略

- 重构 sched_yield 到独立模块，提供适当的系统调用处理程序

- 添加调度权限检查的实用函数

- 从主系统调用模块中移除旧的 do_sched_yield 实现

### 2. 文件系统与 VFS：功能扩展与稳定性提升

#### tmpfs 文件系统 (#1459, #1480, #1410)

- 引入新的 tmpfs 模块用于内存中的临时文件存储

- 更新 devfs 以将 /dev/shm 挂载为 tmpfs，符合 Linux 语义

- 增强 vfs 模块以包含 TMPFS_MAGIC 用于 tmpfs 识别

- 添加 tmpfs 功能所需的方法和结构，包括 inode 管理和文件操作

- 实现原子大小管理，添加原子操作以管理 tmpfs 文件系统的当前大小

- 将大小管理集成到 inode 操作中，确保大小更新是线程安全的并遵循指定的限制

- 增强 resize 和 truncate 方法以在文件修改期间相应调整文件系统大小

- 实现零页创建，添加 create_zero_pages 方法到 InnerPageCache 以高效创建零页

- 更新 Tmpfs 以在读写操作期间利用新的零页创建，确保无缝处理页面错误

- 增强 PageFaultHandler，添加 pagecache_fault_zero 以专门管理 tmpfs 的页面错误

- 修复 chroot 相关问题，实现挂载传播机制

#### 新系统调用实现

copy_file_range (#1513)

- 实现 copy_file_range 系统调用，支持文件间高效数据拷贝

- 添加完整的测试用例，覆盖基本功能、边界条件和错误处理

creat (#1482)

- 实现 creat 系统调用处理器，遵循 Linux 语义：创建新文件或截断现有文件并打开为只写模式

- 在 x86_64 架构下注册 creat 系统调用到系统调用表

- 在 gvisor 测试白名单中添加 creat 测试项

preadv2/pwritev2 (#1451, #1461)

- 实现 preadv2 系统调用，支持带偏移量和标志位的向量化读取

- 处理 offset 为 -1 时使用当前文件偏移量，其他情况复用 preadv 逻辑

- 添加 RWF 标志位验证，遵循 Linux 兼容性要求

- 实现 pwritev2 系统调用，允许带偏移量和标志的向量化写入

- 实现文件描述符和偏移量的验证，确保健壮的错误处理

- 为新系统调用重用 pwritev 的核心逻辑，保持文件写入操作的一致性

fadvise64 (#1439)

- 新增 fadvise64 系统调用实现

- 添加页面缓存范围写回和驱逐功能

- 改进预读机制，支持随机访问模式

- 扩展文件访问模式标志管理

- 封装文件预读状态访问并优化 fadvise64 实现

- 修复 fadvise64 中页边界检查逻辑

umask (#1500, #1419)

- 为新文件系统实例设置默认 umask 为 0022

- 添加 apply_umask_for_create() 和 chmod_preserve_type() 辅助函数

- 实现文件创建和 chmod 操作的适当权限检查

- 修复 fchmod 系统调用以正确工作并拒绝 O_PATH 文件描述符

- 将 open_create_test 添加到 gvisor 测试套件

#### 文件操作改进

truncate 修复 (#1444)

- 限制缓冲区大小为 512KB，避免分配过大内存导致容量溢出

- 为 resize 加上页缓存截断

- 增加对 len 的检查，检查截断后的长度是否超过限度

- 检查 filemode

- 改进长度参数的类型转换逻辑；统一使用限制大小的缓冲区策略

- 在 fat 的 resize 中加入最大容量检查

- 统一定义 ZERO_BUF_SIZE；增加对零写入的检查；在 vfs 层统一拒绝超出 isize::MAX 的长度

符号链接处理增强 (#1507)

- 更新 tmpfs 以要求常规文件和符号链接都使用页缓存，确保正确的读写操作

- 将最大符号链接跟随次数增加到 40，符合 Linux 6.6 标准

- 改进 VFS 中的符号链接处理，根据路径条件和尾随斜杠正确跟随符号链接

- 在 vfs_statx 中添加冲突标志的验证，防止无效操作

- 改进符号链接和 lstat 的系统调用实现以遵循 Linux 语义，确保符号链接创建和路径解析的正确行为

- 修正符号链接跟随次数的处理逻辑，将 VFS_MAX_FOLLOW_SYMLINK_TIMES 从 40 调整为 41

其他文件操作修复

- 修复 symlinkat 中父目录路径为 None 时的处理逻辑 (#1512)

- 修复 sys_rename 逻辑并支持 RENAME_NOREPLACE 标志 (#1393)

- 修复 pread64 系统调用的兼容性和错误处理，验证 offset 参数和用户缓冲区 (#1398)

#### append 锁机制 (#1483)

- 引入 AppendLockManager 以确保跨文件系统的追加操作的原子性，防止并发写入场景中的数据损坏

- 更新文件写入方法以利用新的追加锁机制，确保追加到文件时尊重最新的文件结束位置

- 增强 write_append 和 pwrite_append 方法以支持强制追加语义，符合 Linux 行为

- 在 VFS 初始化期间初始化追加锁管理器，确保在任何文件写入操作之前准备就绪

- 添加 jhash 库并用于 append_lock 的哈希计算

#### EventFd 文件系统 (#1486)

- 引入 EventFdFs 作为新的伪文件系统以支持 eventfd 文件描述符，包括根 inode 检索和文件系统信息的方法

- 增强 IndexNode trait，添加 is_stream、supports_seek、supports_pread 和 supports_pwrite 方法，以简化流式文件的操作语义

- 更新 VFS 中的文件处理以利用新的 inode 能力，确保 pread、pwrite 和 lseek 操作的正确行为

- 将 eventfd_test 添加到系统调用白名单用于测试

- 修复 pread/pwrite 中 O_PATH 和流式对象的错误处理顺序

#### 文件系统标志重构 (#1414)

- 重构文件系统标志体系，区分打开标志与访问模式

- 提升代码清晰度和可维护性

#### 路径检查统一 (#1481)

- 将多个 VFS 系统调用中的 check_and_clone_cstr 替换为 vfs_check_and_clone_cstr

- 在 page_cache.rs 中简化 page_cache 引用获取方式

- 在 sys_mount.rs 中新增 copy_mount_path_string 函数专门处理挂载路径

- 移除 rename_utils.rs 中冗余的路径长度检查

#### 文件预读功能 (#1391)

- 新增 readahead 模块实现文件预读算法

- 修改 page_cache 模块支持预读标记

- 在 File 结构体中添加预读状态管理

- 为 PageFlags 添加 PG_READAHEAD 标志位

#### 挂载传播机制 (#1410)

- 添加对挂载传播类型的支持：Shared、Private、Slave 和 Unbindable

- 引入新模块用于管理挂载传播语义，包括对等组注册和事件传播

- 更新现有挂载函数以在挂载和卸载操作期间处理传播逻辑

- 增强文档以包含新挂载传播功能的详细信息及其用法

- 添加单元测试以验证不同场景下挂载传播行为的正确性

- 实现递归绑定挂载支持，添加递归绑定挂载功能，支持 MS_BIND | MS_REC 标志

- 实现 BFS 遍历以在 do_recursive_bind_mount 中复制子挂载

- 修复挂载注册顺序以防止失败时的悬空注册

### 3. procfs 与系统信息：可观测性大幅提升

#### 进程信息文件

/proc/<pid>/stat 和 /proc/<pid>/task (#1490)

- 添加 /proc/<pid>/stat 文件生成，支持 BusyBox ps/pstree/top 等工具

- 实现 /proc/<pid>/task 目录结构，支持主线程 tid=pid 的展示

- 新增 proc_pid_stat 和 proc_pid_task 模块处理相关逻辑

- 扩展 ProcFileType 枚举，添加 ProcPidStat、ProcPidTaskDir 等类型

- 在 InodeInfo 中新增 tid 字段以支持线程信息

/proc/cmdline 和 /proc/<pid>/cmdline (#1489)

- 新增 proc_pid_cmdline 模块，实现 /proc/cmdline 和 /proc/<pid>/cmdline 文件的读取逻辑

- 在进程控制块中增加 cmdline 字段，用于存储进程的命令行参数

- 在 execve、fork 和初始进程启动时正确设置和继承 cmdline 数据

- 在 procfs 中创建对应的文件节点并集成到文件类型枚举和打开逻辑中

/proc/<pid>/maps (#1468)

- 新增 proc_maps 模块，实现 /proc/<pid>/maps 文件的生成逻辑

- 在 ProcFS 中注册 maps 文件，支持进程文件夹的创建和清理

- 更新 gvisor 测试白名单，添加 time_test

- 修正缺页异常处理中的用户态判断逻辑，优先使用 TrapFrame 和错误码判断访问发起者

/proc/<pid>/statm (#1455)

- 将 ProcStatm 文件类型引入 ProcFileType 枚举

- 实现 open_statm 函数以返回 statm 文件的占位符响应

- 更新 ProcFS inode 创建以包含每个进程的 statm 文件

- 增强 IndexNode 实现以处理新的 ProcStatm 文件类型

- 优化 statm 文件打开逻辑，增加虚拟内存页数计算

#### 命名空间支持

/proc/<pid>/ns/ 目录 (#1515)

- 新增 /proc/<pid>/ns/ 目录，支持动态创建命名空间文件

- 实现 cgroup 命名空间基础结构，支持 CLONE_NEWCGROUP 标志

- 为命名空间文件添加 ioctl 支持（NS_GET_NSTYPE 等命令）

- 扩展 setns 系统调用以支持 cgroup 命名空间切换

/proc/thread-self/ns (#1412)

- 引入新模块用于处理 /proc/thread-self/ns 下的命名空间文件，允许应用程序通过符号链接引用命名空间

- 实现命名空间文件及其对应 ID 的动态创建，确保与 Linux 行为兼容

- 更新 ProcFS 以为线程特定命名空间创建必要的目录结构和文件

- 增强现有 ProcFileType 枚举以包含线程自身命名空间的新类型

- 实现 setns 系统调用用于命名空间管理，允许进程使用文件描述符加入现有命名空间

命名空间文件竞态修复 (#1413)

- 为并发命名空间文件创建添加适当的错误处理

- 在创建过程中更早地移动命名空间类型验证

- 确保子 inode 在 children map 中可见之前完全初始化

- 通过重新检查 children map 处理 EEXIST 竞态条件

#### 内核日志管理 (#1415)

- 引入新模块用于管理内核日志级别，模仿 Linux 行为

- 添加通过命令行和 procfs 接口动态配置日志级别的支持

- 创建新的 /proc/sys/kernel/printk 文件用于读取和写入日志级别设置

- 更新现有日志机制以利用新的日志级别管理系统

- 增强 QEMU 启动脚本以允许通过环境变量设置日志级别

#### 文件描述符信息 (#1426)

- 在 procfs 中新增文件描述符相关支持

- 为 procfs 的 InodeInfo 添加 target_inode 字段，用于存储魔法链接的原始文件 inode

- 实现 IndexNode::special_node 方法，使 /proc/self/fd/N 能返回原始文件的引用

- 在 VFS 中处理 SpecialNodeData::Reference，支持魔法链接的路径解析

- 为管道文件实现 ioctl 的 FIONREAD 命令，获取可读字节数

- 添加 /proc/<pid>/fdinfo 目录支持并实现管道缓冲区动态调整

### 4. 进程管理与执行：更接近 Linux 行为

#### shebang 脚本支持 (#1511)

- 新增 shebang 模块，实现脚本解析和递归执行

- 重构 exec 模块，支持递归加载和上下文跟踪

- 添加测试程序验证 shebang 功能

- 为 parse_shebang_line 函数添加 inline 属性以优化

#### 进程等待语义修复

线程组等待语义 (#1427)

- 修复线程组中子进程的等待语义

父进程唤醒逻辑 (#1516)

- 修正父进程唤醒条件，确保无论 exit_signal 为何值都唤醒父进程

- 修复线程组 leader 唤醒逻辑的位置错误

#### 进程执行改进 (#1518)

- 修复 execve 系统调用中空路径和空参数处理问题，在解析符号链接前检查 argv 是否为空，避免空指针访问

- 添加对空路径字符串的检查，返回 ENOENT 错误码

- 为 gvisor 测试套件添加版本管理功能，引入版本变量和版本文件以支持自动检测和升级

- 增强执行文件权限检查与信号处理，在 execve 系统调用中增加文件类型和执行权限检查

- 移除 shebang 处理中冗余的 interpreter_path 字段

- 修复 fork 时信号掩码复制问题，确保 POSIX 合规性

- 完善 execveat 系统调用对 AT_EMPTY_PATH 和 AT_SYMLINK_NOFOLLOW 标志的处理

- 实现 fd_table 在 execve 进程中的 unsharing，确保隔离性

- 更新路径解析逻辑，仅在 absolute_path() 成功时替换 argv[0]，在失败时保持原始路径

- 改进 shebang 解释器未找到时的错误日志

#### 信号处理增强

POSIX 定时器信号投递 (#1521)

- 修复 ProcessControlBlock::raw_tgid() 返回错误字段的问题

- 为 POSIX 定时器添加 SIGEV_THREAD 支持，兼容 gVisor 测试

- 放宽 SIGEV_THREAD_ID 限制，允许向同线程组的任意线程投递信号

信号忽略逻辑 (#1434)

- 实现信号忽略检查逻辑

- 修复 getpid 在命名空间中返回正确的 tgid

- 修复 fork 时的 copy_process 顺序

- 修复 init 进程中的 CloneFlags::CLONE_SIGHAND 标志

增强的信号处理和 IPC 机制 (#1423)

- 添加 rt_sigqueueinfo 和 rt_tgsigqueueinfo 系统调用，用于符合 POSIX 的信号投递

- 增强 kill 进程功能，提供适当的信号验证和权限检查

- 改进进程退出处理，包括信号清理和父进程通知

- 更新 fork 实现以正确处理信号继承

- 实现 setresuid 系统调用，提供适当的权限管理

- 添加信号相关系统调用的全面测试覆盖

kill 进程组修复 (#1424)

- 修复 kill 进程组的 bug，使得 KillTest.ProcessGroups 通过

sys_rt_sigtimedwait 和 sys_rt_sigreturn 修复 (#1406, #1394, #1400)

- 修复进程 CPU 时间统计精度，将统计基准调整为扣除 IRQ 和 Steal 时间后的净时间（accounted_cputime）

- 修复 sys_rt_sigtimedwait 的信号等待逻辑，确保即使等待信号集为空也能正确进入 do_kernel_rt_sigtimedwait

- 修复潜在的无限睡眠问题：当线程被非目标信号或非超时事件唤醒时，将正确返回 EINTR

- 修复 bitflags 错误移除的 bug，应该使用 remove()

- 修复 sys_rt_sigreturn：当从信号处理函数返回用户态时，如果待恢复的 %rcx / %r11 与 sysretq 的行为冲突，则强制跳转到 .L_syscall_must_use_iret 分支，使用 iretq 指令精确恢复完整的上下文

### 5. 内存管理与 I/O：性能与稳定性优化

#### 用户空间内存访问修复 (#1522)

- 修复 IoVecs 构造时对零长度缓冲区的验证，确保符合 Linux 语义

- 修复 scatter 方法在遇到不可访问内存时的错误处理，避免部分写入后返回错误

- 修复 readv/preadv 等系统调用，使其支持分块读取和部分成功写入

- 修复页面回收逻辑，避免回收仍被映射的文件页

- 修复 UserBufferReader/Writer 对空指针的检查，防止未定义行为

- 调整缓存阈值并添加 gVisor 测试的内存检测逻辑

- 优化 IoVecs 的用户空间内存访问检查与拷贝逻辑，移除冗余的 verify_area 和 UserBufferReader/Writer 检查，统一使用 user_accessible_len 进行访问性验证

- 在 gather 方法中使用 copy_from_user_protected 进行异常保护的拷贝，与 scatter 方法保持一致

- 改进错误处理逻辑，当部分数据已成功读取时返回已读取的数据，否则返回 EFAULT

#### 块缓存增强 (#1465)

- 为 CacheBlock 添加 from_slice 方法，用于直接从切片创建实例，避免不必要的分配

- 在 CacheBlock 中引入 write_data 方法，允许就地更新块数据

- 更新 BlockCache 中的 insert_one_block 和 immediate_write 方法以接受切片而非向量，提高性能和内存使用

- 在多个位置实现块大小验证的错误处理，确保数据完整性

- 将 FileMapInfo::page_cache 更改为 Weak<PageCache> 以修复由引用循环引起的内存泄漏

#### 页面缓存改进 (#1444, #1455)

- 修复 truncate 时的页缓存截断，修复边界条件

- 重构页缓存读写以解决死锁问题并改进错误处理，将页缓存读写拆分为两阶段以避免用户缺页时持有锁

- 改进文件系统缺页处理，返回 SIGBUS 而非 panic

- 优化 sys_read/sys_write 的用户缓冲区访问检查

- 修复 mprotect 参数对齐检查

#### 内存管理优化

slab 分配器修复 (#1464)

- 为 ObjectPageIterMut 添加 remaining 字段，防止迭代越界

- 将 SLABALLOCATOR 改为 SpinLock 保护，修复并发访问问题

- 在 kernel_allocator 中正确使用锁保护 slab 分配器操作

异常表安全拷贝 (#1395)

- 修改异常表安全拷贝的错误处理返回值

页面回收优化 (#1455)

- 优化页面回收过程以防止死锁，将页面回收分为两阶段以避免长时间持有回收器锁，降低与 page_manager/page_cache 的锁顺序反转风险

- 更新 shrink_list 方法以在不持有回收器锁的情况下处理受害者页驱逐，确保更安全的内存管理

- 改进 drain_lru 方法以高效检索用于回收的受害者页

#### mmap 支持增强 (#1455)

- 为 LockedZeroInode、LockedExt4Inode、LockedFATInode 和 LockedRamFSInode 实现 mmap 方法，允许内存映射操作

- 改进 mmap 错误处理和验证，增强错误处理以返回不支持操作的适当错误

- 添加 MAP_PRIVATE 和 MAP_SHARED 标志的检查，确保只设置一个

- 实现 MAP_FIXED 的页面对齐验证

- 增强内存保护处理和验证，更新 init_xd_rsvd 函数以确保启用 NX 支持并正确处理硬件限制

- 改进 sys_mprotect 中的对齐检查以防止溢出并确保适当的内存区域验证

- 增强 mmap 系统调用的偏移量检查和内存分配逻辑

### 6. IPC 与管道：阻塞语义与竞态修复

#### FIFO 阻塞打开语义 (#1429)

- 为 LockedPipeInode 添加 open_wait_queue 用于 FIFO 打开时的阻塞等待

- 实现 Linux FIFO 的阻塞/非阻塞打开语义（O_RDONLY/O_WRONLY/O_RDWR）

- 添加 has_reader/has_writer 辅助方法检查管道状态

- 更新测试配置，将 fifo_test 加入白名单

#### 管道行为完善 (#1529, #1426)

- 修复并完善 pipe 的行为，新增管道文件系统（PipeFS）并注册 PIPEFS_MAGIC

- 扩展管道缓冲区至 65536 字节，支持原子写入

- 实现命名管道（FIFO）支持，允许 O_RDWR 模式打开

- 改进 fcntl 的 F_SETFL 实现，仅允许修改特定标志位

- 修复写入只读文件描述符的错误码为 EBADF

- 为命名管道自动添加 O_LARGEFILE 标志

- 优化管道读写逻辑，支持循环写入和部分写入

- 修复阻塞模式下写端唤醒的竞态条件：在阻塞模式下先增加 writer 计数再等待读端，避免竞态条件；在增加 writer 计数后立即唤醒等待的读者；处理信号中断时回滚 writer 计数；确保非阻塞模式下也正确唤醒读者

- 在 preadv/pwrite64/pwritev 系统调用中增加对管道、Socket 和字符设备的 ESPIPE 错误检查

- 为 fcntl 系统调用添加管道缓冲区大小查询功能（F_GETPIPE_SZ 和 F_SETPIPE_SZ）

- 优化管道关闭逻辑，避免潜在死锁问题

- 在 procfs 中新增文件描述符相关支持，支持 /proc/self/fd/N 魔法链接并实现管道 FIONREAD

- 添加 /proc/<pid>/fdinfo 目录支持并实现管道缓冲区动态调整

### 7. 网络与设备：稳定性提升

#### 网络栈优化

NapiManager 锁机制 (#1525)

- 将 NapiManager 的锁机制改为 lock_irqsave

- 修复在中断上下文中调用 napi_schedule 可能导致的死锁问题

UDP 套接字修复 (#1460)

- 修复 UDP getsockname/getpeername 系统调用

- 添加测试白名单以支持新的可用 inet 系统调用

#### TTY 驱动增强

TTY 驱动和设备管理 (#1462)

- 更新 TTY 驱动以在关闭操作期间更有效地处理 master 和 slave 类型，确保正确清理 /dev/pts 中的设备条目

- 改进控制 TTY 分离的处理，添加对 TIOCNOTTY 命令的支持

- 重构 PTY 设备初始化以确保正确的元数据设置和设备注册

- 为 /dev/ptmx 添加符号链接指向内部 devpts 节点，防止早期访问期间的 ENOENT 错误

- 改进 PTY 设备管理和清理逻辑，增强 PtyDevPtsLink 结构以更有效地管理 PTY 设备的生命周期

TTY 权限检查 (#1430)

- 修复 TTY 和会话的权限检查逻辑，通过 pty_root_test

TTY page_cache 支持 (#1428)

- 在 TTY 设备中实现 page_cache 方法，返回 None 以表明字符设备不需要页面缓存

- 在页面错误处理中增加对无页面缓存情况的处理，避免 panic 并返回 VM_FAULT_SIGBUS

#### 异步 I/O 通知 (#1425)

- 实现异步 I/O 通知机制和 ioctl 系统调用增强

#### 随机设备支持 (#1455)

- 新增随机设备模块 random_dev，提供随机字节生成能力

- 在 DevFS 中注册 /dev/random 设备，确保系统能够访问随机数据

### 8. 文件系统实现：ext4 与 FAT 改进

#### ext4 文件系统 (#1509)

- 修复 ext4 inode 读写操作中的自旋锁死锁问题

- 添加父目录指针支持，实现 parent() 方法

- 改进块设备寻址逻辑，统一使用 512 字节 LBA

- 增强根文件系统探测机制，支持 ext4 和 FAT 自动识别

- 修复 ELF 加载器中解释器路径查找问题

- 更新 another_ext4 依赖版本

- 为 ext4 和 fat 文件系统添加探测方法并优化代码，在 Ext4FileSystem 和 FATFileSystem 中新增 probe 方法

- 重构 vcore.rs 中的文件系统探测逻辑，使用新的 probe 方法替代原有的独立探测函数

- 优化 Ext4Inode 构造函数中 parent 字段的默认值设置，使用 unwrap_or_default 替代 unwrap_or_else

- 在 rcS 启动脚本中添加 PATH 环境变量设置

#### FAT 文件系统 (#1454, #1491)

- 更新目录链接计数管理，调整目录的链接计数以确保从 2 开始，考虑自引用和父目录链接

- 更新创建和删除目录时递增和递减链接计数的逻辑

- 增强 VFS 层中目录链接计数的动态计算，确保在元数据不可靠时的准确性

- 为 FAT 文件系统实现 statfs 所需的 SuperBlock 字段（f_blocks、f_bfree、f_bavail、f_frsize）

- 修复 FAT32 FSInfo 空闲簇计数更新时的溢出问题

- 为挂载点提供稳定的 st_dev 标识符

#### 文件系统统计 (#1491)

- 完善 FAT 和 tmpfs 的文件系统统计信息支持

- 为 tmpfs 添加默认容量策略（物理内存一半）并同步更新 SuperBlock 统计信息

### 9. 等待队列重构：引入 Waiter/Waker 模式

#### 等待队列机制重构 (#1452)

- 重构 WaitQueue，引入 Waiter/Waker 模式避免唤醒丢失

- 统一等待接口，提供 wait_event_interruptible/uninterruptible 方法

- 重构 futex、epoll、eventfd、semaphore、completion 等模块使用新等待队列

- 优化进程等待子进程退出逻辑，使用新等待队列接口

- 添加等待队列设计文档说明新机制

- 添加 SKIP_GRUB 选项以支持在 CI 或无图形界面环境中跳过 GRUB 安装

#### 信号处理修复 (#1452)

- 在 sys_rt_sigtimedwait 中消费信号后及时刷新 HAS_PENDING_SIGNAL 状态，避免后续等待路径误判

- 将 futex 可中断唤醒的错误码从 ERESTARTSYS 改为 EINTR，以符合 Linux 语义

### 10. 工程效率与 CI：自动化与工具链改进

#### 夜间构建工作流 (#1469, #1471, #1472, #1473, #1474, #1475, #1476, #1477)

- 新增夜间构建与发布工作流

- 支持自动化构建和发布，分离构建和发布步骤

- 压缩构建产物为 tarball 并上传以供后续使用

- 修改 Dockerfile 以复制压缩的产物而非单个文件，提高效率和组织性

- 添加步骤以在夜间构建工作流中创建 ‘bin’ 目录以更有效地组织构建产物

- 在夜间构建工作流中恢复 HOME 环境变量以确保构建过程的适当目录上下文

- 更新夜间构建工作流以有条件地运行构建和发布作业

- 在夜间构建工作流中添加步骤以 checkout DragonOS 代码

#### 构建容器升级 (#1442)

- 构建容器版本升级至 v1.19

- 添加 –ci 安装模式和 APT_FLAG（–no-install-recommends）到 bootstrap.sh

- 在 CI 上跳过 grub/docs，移除旧的 RUST_VERSION_OLD 安装步骤

- 在 Dockerfile 中使用 –no-install-recommends

- 调整构建脚本和 BUILD_CONTAINER_VERSION

- 更新 DADK 版本至 v0.5.1 并调整构建脚本

- 更新 CI 工作流中的 Docker 镜像源

- 添加 linux-libc-dev-riscv64-cross 到 Ubuntu/Debian bootstrap 安装列表，为交叉编译提供 riscv64 交叉 libc 头文件

- 更新 CI 工作流中的 Docker 镜像仓库地址

#### CI 流程修复

测试状态修复 (#1403)

- 修复 CI 流程中测试失败但返回成功状态的问题

gVisor 测试脚本修复 (#1405)

- 修复自动化开启/关闭 gVisor syscall 测例打包的脚本

测试添加 (#1458)

- 添加 open_test 测试

#### 代码审查自动化 (#1435, #1436, #1437, #1438, #1440, #1445, #1446, #1447)

- 添加 Claude 代码审查工作流

- 优化代码审查流程和配置

- 启用进度跟踪功能

- 扩展 Claude 参数以支持更多工具

- 重构提示词结构，明确代码审查的五个重点领域

- 移除重复的注释更新指令，简化工作流逻辑

- 明确使用特定工具进行内联评论和状态更新

- 提供单行和多行评论的具体操作指导

- 简化 PR 状态总结的要求

#### 开发容器支持 (#1449, #1457)

- 添加基于 CNB 镜像的 devcontainer 支持

- 设置非 root 用户为默认 devcontainer 用户

- 修复 devcontainer：将容器用户从 ‘dragonos’ 更改为 ‘root’，然后更新为使用 ‘dragonos’ 作为默认用户

- 修复 CI：将源更改为从默认镜像服务器改为 github

### 11. 文档与社区：体验与可访问性提升

#### DragonOS Playground (#1484)

- 更新 README 和构建文档，添加 DragonOS Playground 体验方式

- 在 README 中新增云原生开发体验方式，提供 CNB 平台一键启动链接

- 更新社区新闻，添加 Playground 上线信息

- 在构建文档开头添加快速体验章节，推荐使用 Playground

#### 文档翻译更新 (#1485, #1453, #1411, #1408, #1402, #1396)

- 多轮文档翻译更新，提升国际化支持

#### 用户环境改进

PS1 环境变量 (#1432, #1422)

- 修正 PS1 环境变量使其与 bash 默认高亮一致

- 使用彩色 PS1，提升用户体验

### 12. gVisor 测试：兼容性持续提升

#### 测试用例扩展 (#1524)

- 删除 gVisor 测试中的 fifo_test blocklist 文件

- 扩展测试覆盖范围，持续提升 Linux 兼容性

#### 系统调用修复

open 系统调用 (#1417)

- 调整 readable 和 writable 返回的错误码类型

- 修复以下测试：OpenTest.OTrunc、OpenTest.OTruncAndReadOnlyDir、OpenTest.OCreateDirectory、OpenTest.MustCreateExisting、OpenTest.CreateWithAppend、OpenTest.AppendOnly、OpenTest.AppendConcurrentWrite、OpenTest.DirectoryWritableFails、OpenTest.DirectoryDirectFails、OpenTest.Null、OpenTest.CanTruncateReadOnly、OpenTest.OpenNonDirectoryWithTrailingSlash、OpenTest.OpenWithStrangeFlags

- 添加 open_test 的 block

utimensat/futimesat (#1431)

- 修复 utimensat/futimesat 系统调用边界情况以兼容 gVisor 测试

pread64 (#1398)

- 修复 pread64 系统调用的兼容性和错误处理

- 验证 offset 参数：当偏移量为负数或发生溢出时返回 EINVAL

- 验证用户缓冲区：使用 new_checked 确保内存已映射，从而正确返回 EFAULT

- 检查文件类型：对不可定位的文件（如管道、Socket）返回 ESPIPE

- 修复 File::readable() 中的权限检查

- 修复了 gVisor pread64 测试集中的多个失败项

sys_rename (#1393)

- 修复 sys_rename 逻辑并支持 RENAME_NOREPLACE

getdents (#1397)

- 修复 getdents 系统调用实现

其他修复

- 修复 syscall/vfs 中写入部分可读缓冲区时的 SIG 衍生问题 (#1375)

- 修复 cputime、sys_rt_sigtimedwait 和 sys_rt_sigreturn 相关问题 (#1406, #1394, #1400)

### 13. 其他改进

#### 符号表查询修复 (#1443)

- 修复符号表查询问题，原有逻辑 addr 刚好等于 kallsyms_adress_list[i+1] 时，索引 index 值会是 i，但是实际上是 i+1

- 现在修改为通过二分查找符号

#### Cargo.lock 清理 (#1530)

- 修复 Cargo.lock 中 another_ext4 包的重复条目问题

- 统一 lockfile 格式，避免不同开发者使用不同 Cargo 版本时产生冲突

## 已知关注点

- I/O 多路复用与信号结合的路径较为复杂，建议在升级到 0.4.0 后重点执行高并发网络服务/事件循环框架的回归测试。

- tmpfs 和 chroot 相关改动涉及文件系统挂载和路径解析，建议验证容器化场景下的行为。

- 等待队列机制重构涉及并发控制，建议重点测试多线程场景下的稳定性和性能。

- POSIX interval timer 和 CPU 时间统计为新增功能，建议在实际应用中验证定时器精度和性能开销。

- 挂载传播机制为新增功能，建议在容器化场景下验证不同传播类型的行为。

## 贡献者鸣谢

感谢所有为 DragonOS 0.4.0 贡献代码、测试、文档和反馈的社区伙伴！

本版本共包含 105 个提交，涉及内核核心、文件系统、进程管理、内存管理、网络、设备驱动、工程工具等多个模块的改进和修复。

主要贡献者包括（按提交时间顺序）：LoGin、Vitus、kaleidoscope416、Samuel Dai、aLinChe、xboHodx、Yuming Jiang、kado、goldwind-ting、sparkzky 等。

详细贡献者列表可参考 GitHub 仓库的 Contributors 页面。

## 参考资料

- Linux 兼容性测试看板：ci-dashboard.dragonos.org

- DragonOS Playground：cnb.cool/DragonOS-Community/playground

- 社区仓库：github.com/DragonOS-Community/DragonOS

- 官方文档：docs.dragonos.org

Other Versions v: V0.4.0

Tags
  V0.1.0
  V0.1.1
  V0.1.10
  V0.1.2
  V0.1.3
  V0.1.4
  V0.1.5
  V0.1.6
  V0.1.7
  V0.1.8
  V0.1.9
  V0.2.0
  V0.3.0
  V0.4.0

Branches
  master