ChCore Lab3 Report
SJTU ChCore Lab3 思考题个人解答
实验记录
思考题
思考内核从完成必要的初始化到第一次切换到用户态程序的过程是怎么样的?尝试描述一下调用关系。
调用关系大致如下:
graph LR
subgraph main
direction LR
init[init...] --> callNode["create_root_thread()"] --> sched["sched()"] --> eret["eret(switch_contect())"]
end
可以看到,初始化后内核主要做了三件事:
- 创建第一个根线程
- 调用调度器
- 用 EL1 切换回用户态
我们主要关注创建根线程的过程:
graph LR
subgraph create_root_thread
direction LR
load_elf_meta --> init_root_cap_group --> init_vmspace --> init_stack --> alloc_thread_obj --> init_elf_segs --> alloc_prepare_env --> init_thread --> init_cap --> flush_cache --> enqueue_thread
end
This post is licensed under CC BY 4.0 by the author.