You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.7 KiB

Rust OS 实验一分析报告

1 环境配置

依据RustOS开发文档中的说明进行安装。编辑器采用VSCode+Rust插件。 成功重现RustOS的交叉编译和在qemu上的x86-64和riscv32的运行步骤重现。

2 注释完善

我负责kernel模块的注释完善工作主要对arch=riscv32从启动到进入shell涉及的代码注释进行了完善其余部分注释尚未完成有待后续分析完善。

3 分析测试

3.0 现有测试分析

现有RustOS shell下已经包含了一部分测试程序测试结果如下(以下测试结果基于arch=riscv32下)

测试程序 是否通过 错误原因分析
waitkill 通过
sleep 通过
spin 通过
sh 未通过 unknown syscall id: 0x66, args: [0, 7000ff97, 1, 7000ff70, 25, 73]
可能是由于尚未实现sh这一系统调用
forktest 通过
faultread 通过 [INFO] open: path: "stdin:", flags: 0
[INFO] open: path: "stdout:", flags: 1
[ERROR] Process 2 error
系统似乎成功处理了该异常并正确结束该进程?
forktree 未通过 PANIC in src/lang.rs at line 22
out of memory
似乎是由于“目前所有没被wait过的进程退出后内存不会被回收”导致的问题
divzero 通过
yield 通过
faultreadkernel 通过 原因同faultread
exit 通过
softint 未实现?
badsegment 通过
hello 通过
ls 未实现
priority 通过
badarg 未通过 PANIC in /home/lcy1996/.rustup/toolchains/nightly-2018-09-18-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/option.rs at line 345
called `Option::unwrap()` on a `None` value
内核bug?错误原因需要进一步探索
testbss 未通过 PANIC in /home/lcy1996/.rustup/toolchains/nightly-2018-09-18-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/option.rs at line 1000
failed to allocate frame
内核bug?错误原因需要进一步探索
pgdir 未通过 [ERROR] unknown syscall id: 0x1f, args: [a, ffff6ad9, 2, 0, 15, ffffffff]
阅读syscall.rs推测原因是尚未实现0x1f(PGDIR)这个系统调用
matrix 通过
sleepkill 未通过 PANIC in /home/lcy1996/Documents/OSTrain/RustOS/crate/process/src/event_hub.rs at line 55
attempt to add with overflow
推测与forktree出错原因相同

此外现有框架下已经有sync和thread的test但是riscv32下这些test均无法编译通过询问王润基后推测原因是目前编译器对RISCV原子指令支持不全。因此尝试从ucore lab中移植一些test过来便于后续lab的裁剪。