当我们从用户模式转到内核模式时,哪些寄存器被更改?以及迁移到内核模式的原因是什么?

时间:2013-07-02 06:47:07

标签: c++ c operating-system computer-science

当我们从用户模式转到内核模式时,哪些寄存器会被更改?以及迁移到内核模式的原因是什么?

为什么这些原因不会导致进入内核模式:

  1. 通过root(超级用户或管理员)
  2. 创建新的管理员
  3. 如果我错过了TLB,为什么我们不转向内核模式
  4. 当我们写入Page表格中修改的位页面

3 个答案:

答案 0 :(得分:0)

从您的问题中我发现您的操作系统概念很差。 好吧,让我解释一下,(我假设你使用的是linux而不是windows)。

“当我们从用户模式转到内核模式时,哪些寄存器会被更改?”        要了解此问题的答案,您需要了解流程管理。 但我可以简单地说,linux使用系统调用接口从用户空间转换到内核空间。系统调用接口使用一些寄存器(基于您的处理器)来传递系统调用的系统调用号和参数。

答案 1 :(得分:0)

通常,在

时会转移到内核模式
  • 您向内核发出明确请求(系统调用)
  • 你向内核发出一个隐式请求(访问未映射到你空间的内存,无论是否有效)
  • 内核决定它需要做一些比执行代码更重要的事情(通常是硬件中断的结果)。

所有寄存器都将被保留,因为如果您的寄存器可以随机更改,编写代码会相当困难,但如何会发生特定于CPU的情况。

答案 2 :(得分:0)

“当我们从用户模式转到内核模式时,哪些寄存器会被更改?!”

在运行Linux内核的典型的基于x86的架构中,会发生这种情况:

  1. 软件程序应通过指令触发中断0x80:int $ 0x80
  2. CPU将改变程序计数器寄存器&要引用的代码选择器 内存中存在linux系统调用处理程序的地方(linux应用虚拟 记忆概念)。
  3. 到目前为止受影响的寄存器是:CS,EIP和EFLAGS寄存器。 CPU也会改变 堆栈选择器(SS)和堆栈指针(ESP)指的是内核堆栈的顶部。
  4. 最后,内核将数据选择器和额外数据选择器(DS& ES)更改为 选择内核模式数据段。
  5. 内核应该在内核堆栈和通用目的上推送程序上下文 由于正在执行内核代码,寄存器(如累加器)将发生变化。
  6. 正如您所看到的,这一切都取决于操作系统和架构。

    “以及迁移到内核模式的原因是什么?”

    CPU默认在内核模式下工作,你的问题应该是“用户模式需要什么?”。用户模式是必需的,因为它不提供对正在运行的软件的所有权限。您可以在用户模式下运行浏览器/文件管理器/ shell而无需担心。如果对应用程序软件给予完全权限,他们将访问内核数据并对其造成损害,并且他们也可能访问硬件,例如,销毁存储在硬盘上的数据。

    内核当然必须在内核模式下工作(至少是内核的核心)。例如,应用程序软件可能需要将数据写入磁盘上的文件。应用程序软件无权访问磁盘(因为它在用户模式下运行)。实现这一目标的唯一方法是调用内核(在内核模式下运行)来完成这项工作。这就是你需要从用户模式转到内核模式的原因,反之亦然。