Skip to content

问题修复

在这段时间的开发中,我们遇到过很多问题,在经过调试后我们修复了它们,摘录如下:

  • 修复了 getdirent不能记录上次调用的返回进度的问题
  • 设置 LD_LIBRARY_PATH,并拷贝合适的库到指定位置
  • 修正了用户程序栈没有正确向16字节对齐的问题,解决了它导致的xmm指令GP异常问题
  • 修复了 sys_kill的返回值错误
  • 修复了 sys_cwd的返回值错误
  • 修复了因没有在异常处理(系统调用)时正确开启中断,导致无法收到IRQ从而在某些情况下sleep卡死的问题
  • 实现了伪inode生成器,使用文件路径的哈希作为文件的inode,尽可能保证不同文件的inode不同,且inode为非负int,支持获取文件和目录的inode
  • sys_open提供 O_EXCL标志支持,即必须创建新文件
  • 修复了lwext4_rust没有在调用前加上挂载点前缀的问题,这可能导致某些操作下的NOENT错误,例如"/tmp_a"这样的文件名会被误认为挂载在了"/tmp"挂载点上
  • 修复了axfs路径解析的问题,现在ext4可以正常解析形如 /foo/./bar/../a这样的路径了
  • 缓解了删除已被打开的文件带来的问题
  • 修正了 sys_clone最后两个参数顺序在不同架构下不同的问题
  • 修复了write等使用来自用户空间缓冲区导致的转换为物理地址错误的问题,解决了这个问题带来的sys_write无法成功写入文件以及无法从控制台读取的问题
  • 修复了execve没有执行部分清理操作的问题,例如,在执行execve后,需要清除之前设置的signal handler和已经映射的共享内存等。
  • 修复了AxNamespace内存泄漏导致的文件描述符表不能正确释放的问题,采取了缓解措施使得即使是在多个进程共享文件描述符表的情况下,也能正确在进程全部退出后关闭它们打开的文件。
  • 修复了ftruncate使用错误的打开行为的问题,这将导致文件被截断为长度0
  • 修复了 stdin, stdout, stderr不可关闭的问题

这些问题有相当一部分来源于我们基于的底层库和代码,也有一部分来源于我们新添加的代码。我们未来在编写代码时,会尽可能保证代码的健壮性,也会逐步将这些修复反馈给上游仓库。