-
Notifications
You must be signed in to change notification settings - Fork 200
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rcore-tutorial-book-v3/chapter5/2core-data-structures #47
Comments
为什么需要额外的一个idle_task_cx,不能够直接使用之前task_cx吗,为何在前一个task和后一个task之间还要夹一个idle_task_cx |
@SocialistDalao 这样做的主要目的是使得换入/换出进程和调度执行流在内核层各自执行在不同的内核栈上,分别是进程自身的内核栈和内核初始化时使用的启动栈。这样的话,调度相关的数据不会出现在进程内核栈上,也使得调度机制对于换出进程的Trap执行流是不可见的,它在决定换出的时候只需调用schedule而无需操心调度的事情。从而各执行流的分工更加明确了,虽然带来了更大的开销。 实际上当然可以在Trap处理中直接进行调度找到切换到哪个进程并切换过去。有兴趣的话可以试试。 |
请问idle_task_cx_ptr为什么初始化成0 |
@yongchicy 初始化为多少其实都没关系,每个核在内核初始化完毕后都会调用 |
Processor::run 应该改为 Processor::run_tasks。 |
@lindyang Fixed.另外,这个issue开头的文档链接是有问题的,它指向一个长时间没有同步的旧仓库。 |
idle控制流是不是可以替换成一个idle任务 |
|
@wei-huan 不行吧,idle 找下一个就绪的任务需要留在内核空间 |
base_size 不理解。应用数据仅有可能出现在应用地址空间低于 意思是限制应用虚拟空间的总大小吗? |
idle 控制流我个人的理解:
run_tasks 是在 os 的入口函数中调用的,也即运行在内核系统栈。这个函数是系统的自带调度流,而非被进程所推动的调度流。 而调度操作,我们可以举例追溯 因此,使用一个空上下文作为占位,内核的自己的调度流就不需要关心现在是谁在运行,只要换成下一个就绪任务就行,完成了解耦。 |
@YdrMaster |
Processor::run 现已为 Processor::run_tasks |
idle 控制流的设计和 xv6 的很像,rCore 让 游戏卡(进程)只知道自己被插上要运行,以及到某个点自己要弹出来,它不知道游戏机的存在,这样就做到了任务调度的透明。
|
@HangX-Ma 这个比喻挺有意思:) |
进程机制核心数据结构 — rCore-Tutorial-Book-v3 0.1 文档
http://wyfcyx.gitee.io/rcore-tutorial-book-v3/chapter5/2core-data-structures.html
The text was updated successfully, but these errors were encountered: