rust-based-os-comp2022 icon indicating copy to clipboard operation
rust-based-os-comp2022 copied to clipboard

[Question] os2-lab4中如何给task模块解耦

Open alexfanqi opened this issue 3 years ago • 0 comments

直觉上task模块只需要提供当前task的信息就好了,然后处理都放在syscall中。可是由于TASK_MANAGER要exclusive access,对于不想要拷贝只想引用的task信息,比如当前task的memset,就没法返回引用,比如以下简化的代码就会有问题

fn get_cur_memset() -> &memset {
    let inner = TASK_MANAGER.exclusive_access();
   & inner.cur_task.memset
}

这就导致一堆syscall的东西必须放在task里面,感觉不太好

我的尝试:

fn get_cur_memset(inner: &'a appmanager_inner) -> &'a memset {
   ...
}

然后在syscall中

{
let inner = TASK_MANAGER.exclusive_access();
let memset = get_cur_memset(inner);
do something for memset
}

可是appmanager_inner本身就是要隐藏的成员。另一种办法直接返回&static,可这还用什么rust啊。还想了一种办法是传入lambda函数,好像就更复杂了,QAQ

alexfanqi avatar Jul 25 '22 08:07 alexfanqi