-2

当我们从用户模式转移到内核模式时,哪些寄存器会发生变化?!移动到内核模式的原因是什么?

为什么这些原因不会导致迁移到内核模式:

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

3 回答 3

0

“当我们从用户模式转移到内核模式时,哪些寄存器会发生变化?!”

在运行 linux 内核的典型 x86 架构中,会发生以下情况:

  1. 软件程序应通过以下指令触发中断 0x80: int $0x80
  2. CPU会改变程序计数器寄存器和代码选择器来指代linux系统调用处理程序在内存中存在的地方(linux应用虚拟内存概念)。
  3. 到目前为止,受影响的寄存器是:CS、EIP 和 EFLAGS 寄存器。CPU 还会更改堆栈选择器 (SS) 和堆栈指针 (ESP) 以引用内核堆栈的顶部。
  4. 最后,内核更改 Data Selector 和 Extra Data Selector (DS & ES) 以选择内核模式数据段。
  5. 内核应将程序上下文推送到内核堆栈上,通用寄存器(如累加器)将因内核代码的执行而改变。

如您所见,这完全取决于操作系统和架构。

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

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

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

于 2013-07-08T04:51:29.627 回答
0

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

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

于 2013-07-02T09:19:44.870 回答
0

通常,迁移到内核模式发生在

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

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

于 2013-07-02T09:29:21.123 回答