首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xv6中的硬件和Sotfware在上下文切换中的保存

xv6中的硬件和Sotfware在上下文切换中的保存
EN

Stack Overflow用户
提问于 2017-04-09 16:54:37
回答 1查看 391关注 0票数 1

我正在研究xv6上下文切换到操作系统:三个简单的部分书中。我不能完全理解保存和还原第六章的上下文部分(第8页)。

  • 为什么有两种类型的寄存器保存/恢复发生在上下文切换协议中?
  • 上述用户寄存器和内核寄存器之间的区别是什么?
  • 其含义是:通过交换堆栈,内核在一个进程(被中断的进程)的上下文中输入对开关代码的调用,并在另一个进程(即将执行的进程)的上下文中返回。
EN

回答 1

Stack Overflow用户

发布于 2017-04-09 18:05:32

为什么有两种类型的寄存器保存/恢复发生在上下文切换协议中?

假设你说的是第10页,这篇文章有点误导(但不像我在一些书中看到的那样糟糕)。他们将寄存器保存在中断中与上下文开关进行比较。这真的不是一个很好的比较。

在中断处理中进行寄存器保存的方式与在函数调用中进行的方式相同(而不像在上下文切换中那样)。您必须在开始中断处理时保留要处理的任何寄存器值,然后在中断处理程序返回之前恢复它们。您也只处理通用寄存器(不处理进程控制寄存器)。

上下文开关中的寄存器保存是大量完成的.所有进程的寄存器一次被保存。中断服务例程可能保存4个寄存器,而上下文开关可能保存30多个寄存器。

提到的用户寄存器和内核寄存器之间有什么区别?

有些寄存器可以在用户模式下访问和修改。一般用途的登记册当然是用户登记册。处理器状态是一个混合的包,因为它可以在用户模式下读取,在用户模式下可以通过执行指令在某些方面进行修改,但通常只在用户模式下读取。您可以将其称为用户寄存器,也可以不称其为用户寄存器。

还有其他寄存器只能在内核模式下访问。例如,将有定义进程页表的寄存器。其他寄存器将定义系统调度表。

注意,内核模式寄存器中只有一些是进程寄存器(例如,那些设置页面表的寄存器),需要与进程一起保存和恢复。其他内核寄存器是系统范围的(例如,用于定时器和系统调度表的寄存器)。这些都不会随着进程的变化而改变。

通过交换堆栈,内核在一个进程(被中断的进程)的上下文中输入对开关代码的调用,并在另一个进程(即将执行的进程)的上下文中返回。

这在节选中有点误导,但如果我仔细阅读这本书,可能会更有意义。

进程上下文切换要求将所有每个进程寄存器更改为由CPU定义其结构的块。在您的摘录中,我发现的误导之处是,上下文切换涉及的不仅仅是交换堆栈。

通常,上下文更改看起来类似于:

代码语言:javascript
复制
SAVE_PROCESS_CONTEXT_INSTRUCTION address_of_the_current_process_context_block
LOAD_PROCESS_CONTEXT_INSTRUCTION address_of_the_next_process_context_block

一旦加载了流程上下文,您就处于新流程中。该开关包括更改内核模式堆栈。

有些操作系统在其文档中使用术语,这意味着中断(特别是)和(有时)异常(有时)是在处理程序的上下文中不会完成的。实际上,CPU总是在进程的上下文中执行。

一旦执行上下文切换指令,您就处于新进程中,但处于内核模式下的异常或中断处理程序中。内核堆栈中的更改将导致来自异常或中断的返回恢复新进程的用户模式代码。

因此,您已经处于进程的上下文中,PCB switch.The导致内核模式堆栈指针(即建立一个新的内核模式堆栈)中的更改,从而导致从异常或中断返回到新进程进入内核模式之前的位置(通过异常或中断)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43309382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档