Comments (16)
@SocialistDalao 这样做的主要目的是使得换入/换出进程和调度执行流在内核层各自执行在不同的内核栈上,分别是进程自身的内核栈和内核初始化时使用的启动栈。这样的话,调度相关的数据不会出现在进程内核栈上,也使得调度机制对于换出进程的Trap执行流是不可见的,它在决定换出的时候只需调用schedule而无需操心调度的事情。从而各执行流的分工更加明确了,虽然带来了更大的开销。
实际上当然可以在Trap处理中直接进行调度找到切换到哪个进程并切换过去。有兴趣的话可以试试。
from rcore-tutorial-book-v3.
@yongchicy 初始化为多少其实都没关系,每个核在内核初始化完毕后都会调用Processor::run
,在第一次被调度器分配到一个任务执行的时候,就会通过__switch
真正初始化它的值指向一个合法的任务上下文。
from rcore-tutorial-book-v3.
为什么需要额外的一个idle_task_cx,不能够直接使用之前task_cx吗,为何在前一个task和后一个task之间还要夹一个idle_task_cx
from rcore-tutorial-book-v3.
idle 控制流我个人的理解:
idle_task_cx_ptr
实际上只是一个占位符。它存在的意义就是作为 __switch 的第一个参数。
run_tasks 是在 os 的入口函数中调用的,也即运行在内核系统栈。这个函数是系统的自带调度流,而非被进程所推动的调度流。
而调度操作,我们可以举例追溯 sys_yield
的实现,发现它调用 suspend_current_and_run_next
,后者调用 schedule
。即:进程的内核栈主动请求了将自己换出,换成新的进程。
因此,使用一个空上下文作为占位,内核的自己的调度流就不需要关心现在是谁在运行,只要换成下一个就绪任务就行,完成了解耦。
from rcore-tutorial-book-v3.
内核将跳转到 Processor::run 中 __switch 返回之后的位置,也即开启了下一轮的调度循环。
Processor::run 现已为 Processor::run_tasks
from rcore-tutorial-book-v3.
@HangX-Ma 这个比喻挺有意思:)
from rcore-tutorial-book-v3.
请问idle_task_cx_ptr为什么初始化成0
from rcore-tutorial-book-v3.
Processor::run 应该改为 Processor::run_tasks。
我看最新的 3 个分支 ch5, ch5-lab, ch5-dev 都是 run_tasks。
from rcore-tutorial-book-v3.
@lindyang Fixed.另外,这个issue开头的文档链接是有问题的,它指向一个长时间没有同步的旧仓库。
from rcore-tutorial-book-v3.
idle控制流是不是可以替换成一个idle任务
from rcore-tutorial-book-v3.
Weak
在语义上本来就是可空的,用 ::new()
/::default()
可以构造,不用再包一个 Option
了。
from rcore-tutorial-book-v3.
idle控制流是不是可以替换成一个idle任务
@wei-huan 不行吧,idle 找下一个就绪的任务需要留在内核空间
from rcore-tutorial-book-v3.
base_size 不理解。应用数据仅有可能出现在应用地址空间低于 base_size
字节的区域中。
意思是限制应用虚拟空间的总大小吗?
from rcore-tutorial-book-v3.
@YdrMaster Weak<T>
的可空语义好像和这里无关吧
from rcore-tutorial-book-v3.
idle 控制流的设计和 xv6 的很像,rCore 让 run_tasks
始终保持运行, 可以把这个函数想象成一个游戏机,它的作用就是不断挑选可运行的游戏卡(进程),然后放到 CPU 这个卡槽中。一定时间后这个 CPU 卡槽要给别的游戏卡(进程)用了就把这个当前的卡弹出来(这里就用了 schedule
函数弹出),然后游戏机又开始选下一张能用的游戏卡(进程)了。
游戏卡(进程)只知道自己被插上要运行,以及到某个点自己要弹出来,它不知道游戏机的存在,这样就做到了任务调度的透明。
希望没理解错 😭
from rcore-tutorial-book-v3.
处理器管理结构 Processor 负责从任务管理器 TaskManager 中分出去的维护 CPU 状态的职责:
这句话好像不太通畅。
from rcore-tutorial-book-v3.
Related Issues (20)
- 我想在user_lib中syscall的部分对Read操作增加枚举 HOT 1
- rCore-Tutorial-Book-v3/chapter8/4condition-variable HOT 1
- rCore-Tutorial-Book-v3/chapter8/5concurrency-problem HOT 4
- rCore-Tutorial-Book-v3/chapter0/8answer HOT 1
- ch4-lab无法编译成功 HOT 4
- rCore-Tutorial-Book-v3/chapter0/7exercise
- rCore-Tutorial-Book-v3/chapter4/9answer HOT 7
- rCore-Tutorial-Book-v3/chapter7/3cmdargs-and-redirection HOT 2
- 1. 运行完第一个用户程序之后,run_next_app()函数是被什么东西调用的?。进入_restore之后,匹配到的是用户申请的trap,不会运行run_next_app
- 建议将本书中部分”同学“字样 修改成 ”同学们“
- ch9: 2device-driver-3 成员变量 `avail_idx` 是可用环索引
- ch8: 用户态的线程管理一节 spawn 方法中 s_ptr.offset(32) 问题
- rCore-Tutorial-Book-v3/appendix-d/1asm HOT 1
- rCore-Tutorial-Book-v3/chapter9/2device-driver-0 HOT 4
- 代码仓RustSBI兼容性适配的对应文档更新
- rCore-Tutorial-Book-v3/chapter9/2device-driver-4 HOT 2
- rCore-Tutorial-Book-v3/chapter9/5answer HOT 1
- 优化调度算法一节的描述并修复错误
- 一些功能与内容方面的建议 HOT 4
- 新增基于vscode的devcontainer插件,利用docker配置环境的相关说明
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rcore-tutorial-book-v3.