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//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)(#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//stat、/proc//task、/proc//cmdline、/proc//maps、/proc//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//stat 和 /proc//task (#1490)

  • 添加 /proc//stat 文件生成,支持 BusyBox ps/pstree/top 等工具

  • 实现 /proc//task 目录结构,支持主线程 tid=pid 的展示

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

  • 扩展 ProcFileType 枚举,添加 ProcPidStat、ProcPidTaskDir 等类型

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

/proc/cmdline 和 /proc//cmdline (#1489)

  • 新增 proc_pid_cmdline 模块,实现 /proc/cmdline 和 /proc//cmdline 文件的读取逻辑

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

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

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

/proc//maps (#1468)

  • 新增 proc_maps 模块,实现 /proc//maps 文件的生成逻辑

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

  • 更新 gvisor 测试白名单,添加 time_test

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

/proc//statm (#1455)

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

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

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

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

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

命名空间支持

/proc//ns/ 目录 (#1515)

  • 新增 /proc//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//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 以修复由引用循环引起的内存泄漏

页面缓存改进 (#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//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 页面

参考资料