Skip to content

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

Open
@alexfanqi

Description

@alexfanqi

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions