跳转到内容

练习

切换至 lab3 分支.

git checkout lab3

当前内核的分时系统是存在问题的,请你尝试修复它. 查看我们测试用例:

// user/rust/src/bin/ch3b_yield0.rs
#[no_mangle]
fn main() -> i32 {
    for i in 0..HEIGHT {
        let buf = ['A' as u8; WIDTH];
        println!(
            "{} [{}/{}]",
            core::str::from_utf8(&buf).unwrap(),
            i + 1,
            HEIGHT
        );
        yield_();
    }
    println!("Test write A OK!");
    0
}

接下来请你通过修改内核来支持这个程序的执行. 在本章中用户程序不需要修改.

正确的执行结果应该是:

AAAAAAAAAA [1/5]
BBBBBBBBBB [1/5]
CCCCCCCCCC [1/5]
AAAAAAAAAA [2/5]
BBBBBBBBBB [2/5]
CCCCCCCCCC [2/5]
AAAAAAAAAA [3/5]
...
Test write A OK!
Test write B OK!
Test write C OK!
All applications completed!

实现时间片轮转. 上手试试吧 :-)

支持 task_info 查询和 syscalls 统计

Section titled “支持 task_info 查询和 syscalls 统计”

然后你需要支持 sys_trace,当前虽然给出了代码实现,但是其调用的一些方法还不完善,请你实现 get_current_task_infoget_total_syscall_count. get_total_syscall_count 的返回值是当前 task 的所有 syscalls 的计数之和.

同时,sys_trace 虽然应当返回 syscalls 的执行次数,但是目前统计 syscalls 调用次数的逻辑存在问题.

我们建议通过本地测试后,再提交至云端进行评测,你可以通过 stdout-ch3 看到测评的整个流程. 执行:

cd ustb-os-kernel
git clone https://github.com/USTB-806/ustb-os-checker.git

cd ustb-os-checker
make test CHAPTER=3

其中 CHAPTER=3 意为运行第 3 章的测试.

然后提交 .tar.gz 至 CG 平台. 后续的几章评测方法是类似的,故不赘述.