# 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 页面](https://github.com/DragonOS-Community/DragonOS/graphs/contributors)。

## 参考资料

- **Linux 兼容性测试看板**：[ci-dashboard.dragonos.org](https://ci-dashboard.dragonos.org)
- **DragonOS Playground**：[cnb.cool/DragonOS-Community/playground](https://cnb.cool/DragonOS-Community/playground)
- **社区仓库**：[github.com/DragonOS-Community/DragonOS](https://github.com/DragonOS-Community/DragonOS)
- **官方文档**：[docs.dragonos.org](https://docs.dragonos.org)
