切换到内核模式 - 特权指令

Switch to Kernel Mode - Privileged Instruction

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

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

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

简而言之,为了使用户space程序进入内核模式,它需要进行显式系统调用,如打开、读取、写入等,从而导致软件中断(SWI),从而导致系统切换到内核模式。您可以在给定的link中找到更详细的答案,希望对您有所帮助。

让我们一步步来看:

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

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

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

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

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