Open
Description
直觉上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