Tofu

Results 12 comments of Tofu

I really like `AltBacktick`! I previously used `Easy Windows Switcher` but I found it could not switch windows if those windows had been minimized. I think `Easy Windows Switcher` is...

> 请教一下,heap_test 可以改为 rust 单元测试吗?(不太会改来用,感觉需要做一些其他工作,我会出现 `error[E0463]: can't find crate for test`的问题) 目前仅支持 x86, 需要用到一个 bootimage crate, 我折腾过一天,如果只是想去掉报错的话可以在每个包含 main 的程序开头和结尾分别就加上如下代码。 但想在 qemu 运行 test binary 目前没找到比较合适的办法。希望有大佬能不吝赐教。 ```rust #![reexport_test_harness_main = "test_main"] #![feature(custom_test_frameworks)]...

> 所以`heap_test`中的这段代码: > > ```rust > let mut v: Vec = Vec::new(); > for i in 0..500 { > v.push(i); > } > ``` > > 中的`v`是虚拟地址还是物理地址啊? 物理地址吧,我在 ch3 的基础上直接加上的...

idle 控制流的设计和 xv6 的很像,rCore 让 `run_tasks` 始终保持运行, 可以把这个函数想象成一个游戏机,它的作用就是不断挑选可运行的游戏卡(进程),然后放到 CPU 这个卡槽中。一定时间后这个 CPU 卡槽要给别的游戏卡(进程)用了就把这个当前的卡弹出来(这里就用了 `schedule` 函数弹出),然后游戏机又开始选下一张能用的游戏卡(进程)了。 游戏卡(进程)只知道自己被插上要运行,以及到某个点自己要弹出来,它不知道游戏机的存在,这样就做到了任务调度的透明。 > 希望没理解错 :sob:

> ```rust > unsafe fn __switch(current_task_cx_ptr: *mut TaskContext, next_task_cx_ptr: *const TaskContext) { > SWITCH_TIME_START = get_time_us(); > switch::__switch(current_task_cx_ptr, next_task_cx_ptr); > SWITCH_TIME_COUNT += get_time_us() - SWITCH_TIME_START; > } > ``` >...

> @HangX-Ma > > 1. “此时本该记录context switch的开销”, 你的代码解决了这个问题,是没错,看我之前的回复 > > 2. “那么在你下一次执行__switch从taskB切换到taskA,记录COUNT的时候,实际上把taskB的运行时间也计算进去了。”, 1. 如果task B是 第一次运行,那么 task B 会从用户态trap, task B 会再次运行 `SWITCH_TIME_START = get_time_us(); ` 这就更新了 `SWITCH_TIME_START`, 然后 switch...

> @HangX-Ma 你的学习笔记写的很好,我是对着你的学习笔记来学 rCore 的,如果我的实现有什么问题,欢迎直接到我的repo 下提 issue 或者 PR > https://github.com/OccupyMars2025/reimplement-rCore-Tutorial-v3-from-scratch/commit/09f18069d5ab13f7c941648ef4cd6a6f611733bd 谢谢认可,笔记主要还是厘清思路。个人学习难免有所缺漏,多多讨论好处良多。 另外,虽然rCore仅有这本导读的评论区作为交流平台时效性差了些,但大家的留言都很有质量,收获很多。希望到时候官方能提供更好的交流平台。(错过了一年一度的训练营也能交流的那种hh)

> @HangX-Ma > 您好,您的笔记是在什么平台分享的, 在进行学习rcore过程中,有些地方比较难看懂,希望看下你的笔记 GitPage,我的github主页点开就看得到🤣不过后面两张比较草率写了框架没写个人想法,最近准备把rCore捡起来再看看。

> 你好,这里的实验代码不太能对上吧,在实验要求里 > > ```rust > fn sys_task_info(id: usize, ts: *mut TaskInfo) -> isize > ``` > > 要求两个参数,id和ts,但是在测试代码中 > > ```rust > assert_eq!(0, task_info(&info)); > ``` > > 只使用了一个参数,请问是不是我哪里理解错了...

建议编程题延后完成,除了第一个题目,后面四个都和后续内容相关 > 更可恶的是第二个题目就是第三章的lab。浪费了大量的时间只能完成部分题目然后到下一章的时候感觉自己被坑了。