【问题标题】:Switch to Kernel Mode - Privileged Instruction切换到内核模式 - 特权指令
【发布时间】:2018-01-15 12:53:32
【问题描述】:

我研究了切换到内核模式的指令是特权指令的一个例子。硬件允许特权指令仅在内核模式下执行。

但是如果切换到内核态只能在内核态(?)下执行,如果系统处于用户态,怎么能切换到内核态呢?

【问题讨论】:

  • 用户进程不能直接实现。取而代之的是用户进程进行系统调用,系统调用处理程序切换到内核模式并在内核模式下执行代码。
  • link 的完全相同的副本

标签: linux-kernel operating-system interrupt


【解决方案1】:

让我们一步一步看:

  1. 一个进程正在运行。
  2. 进程运行时出现异常。
  3. 进程被中断以调用异常或中断处理程序。
  4. 称为陷阱或系统调用处理程序的指令读取请求的服务+参数的详细信息,然后在内核模式下执行此请求。
  5. 现在我们回到了调用中断的位置的用户模式。

【讨论】:

    【解决方案2】:

    有两种方法可以进入内核模式:异常或中断。在大多数处理器中,异常和中断都分配了编号。操作系统必须定义一个表,其中包含指向每个异常和中断的处理程序的指针数组。

    如果您在代码中除以零,您将作为异常进入内核模式。然后处理器跳转到除以零的处理程序。

    如果您调用系统服务(在大多数系统上),您会执行一条导致异常的指令,从而让您进入内核模式。处理器调用系统服务的处理程序。

    这是一般的工作方式。英特尔芯片有奇怪的方式进入内核模式。

    【讨论】:

      【解决方案3】:

      我曾经回答过类似的问题,你可以在这里查看: How to switch from user mode to kernel mode?

      简而言之,为了让用户空间程序进入内核模式,它需要进行显式的系统调用,例如 open、read、write 等,从而导致软件中断(SWI)导致系统切换到内核模式。您可以在给定的链接中找到更详细的答案,希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-30
        • 2020-08-28
        • 2016-12-26
        • 1970-01-01
        相关资源
        最近更新 更多