Open utterances-bot opened 2 years ago
编程题1 中,Rust 的 std::fs::read_dir
不包括 .
和 ..
。和 C 的实现好像匹配不上。
@一楼 用 std::process::Command
调用带参数的 ls
命令即可
@xiaoxiangmoe 输出的结果数组中手动添加 .
和 ..
/doge
/
没有..
😂
"应用程度对内存的访问需要通过 MMU" -> 应用程序
pub fn sleep(mills_second: u64) { // Qemu 的mtime寄存器的时钟频率为10MHz,每次增加0.1微妙(100纳秒)1比10_000_000 // 入参数为毫秒为1:10_000 let nano_duration = mills_second.checked_mul(10_000).expect("Overflow in time calculation"); let start_time = unsafe { get_current_time() }; // 计算唤醒时间,同时注意处理可能的溢出 let wake_time = start_time.checked_add(nano_duration).expect("Overflow in wake time calculation"); // 使用SBI调用设置唤醒时间
sbi_rt::legacy::set_timer(wake_time);
println!("Wake time = {}", wake_time);
loop {
if unsafe { get_current_time() } > wake_time {
break;
}
unsafe {
asm!("wfi")
}
}
} const MTIME_ADDR: const u64 = 0x200BFF8 as const u64; // 假定的mtime地址,根据你的具体硬件来更改
unsafe fn get_current_time() -> u64 { return *MTIME_ADDR; }
第三题的实现可以参看:"https://www.cnblogs.com/chenhan-winddevil/p/18292661" ,建议完成第三章的学习之后再完成.
0x10742 在 flap 函数内。根据 flap 函数的开头可知,这个函数的栈帧大小是 16 个字节,所以调用>者处的栈指针应该是 sp + 16 = 0x40007f1320。调用 flap 的调用者返回地址保存在栈上 8(sp) ,可>以读出来是 0x10750 ,还在 flap 函数内
这句里 8(sp) 不是 0x40007f1328 吗?
0x10742 在 flap 函数内。根据 flap 函数的开头可知,这个函数的栈帧大小是 16 个字节,所以调用>者处的栈指针应该是 sp + 16 = 0x40007f1320。调用 flap 的调用者返回地址保存在栈上 8(sp) ,可>以读出来是 0x10750 ,还在 flap 函数内
这句里 8(sp) 不是 0x40007f1328 吗?
@ejacky 这里的意思是调用者的栈指针
是sp + 16
, 而调用者的返回地址保存在栈指针-8
, 所以是sp + 16 - 8 = sp + 8
, 即0x40007f1318
练习参考答案 — rCore-Tutorial-Book-v3 3.6.0-alpha.1 文档
https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter1/8answer.html