当我们说"上下文切换";,一般来说,这意味着在执行单元(linux中的struct task_struct
(之间切换,这涉及(据我所知(:
-
寄存器值的存储和加载
-
TLB击落,如果两个执行单元不属于同一进程
-
加载页面表
-
用户模式到内核模式切换
我经常看到像";协同程序切换不涉及模式切换";,但我认为协程切换也包括寄存器切换,为什么它不需要内核模式?
因为协程在同一地址空间中运行,没有权限分离,所以不需要进入内核模式来更改任何页表或其他用户无法访问的内核数据。
协程开关只需要保存当前协程的寄存器,恢复其他协程的注册表(都存储在用户空间中(,然后跳转。