切换到内核模式 - 特权指令
Switch to Kernel Mode - Privileged Instruction
我研究了一下,切换到内核模式的指令是特权指令的一个例子。硬件只允许在内核模式下执行特权指令。
但是如果切换到内核态只能在内核态执行(?),如果系统在用户态,怎么切换到内核态呢?
我以前回答过类似的问题,你可以在这里查看:
How to switch from user mode to kernel mode?
简而言之,为了使用户space程序进入内核模式,它需要进行显式系统调用,如打开、读取、写入等,从而导致软件中断(SWI),从而导致系统切换到内核模式。您可以在给定的link中找到更详细的答案,希望对您有所帮助。
让我们一步步来看:
- 一个进程是运行。
- 进程 运行 时出现异常。
- 进程被中断以调用异常或中断处理程序。
- 指令,称为陷阱或系统调用处理程序,读取所请求服务+参数的详细信息,然后在内核模式下执行此请求。
- 现在我们回到用户模式调用中断的位置。
进入内核模式有两种方法:异常或中断。在大多数处理器中,异常和中断都有指定的编号。操作系统必须定义一个 table,其中包含指向每个异常和中断的处理程序的指针数组。
如果您在代码中除以零,您将作为异常进入内核模式。然后处理器跳转到除零处理程序。
如果您调用系统服务(在大多数系统上),您会执行一条导致异常的指令,从而使您进入内核模式。处理器调用系统服务的处理程序。
这是一般的工作方式。英特尔芯片进入内核模式的方式很奇怪。
我研究了一下,切换到内核模式的指令是特权指令的一个例子。硬件只允许在内核模式下执行特权指令。
但是如果切换到内核态只能在内核态执行(?),如果系统在用户态,怎么切换到内核态呢?
我以前回答过类似的问题,你可以在这里查看: How to switch from user mode to kernel mode?
简而言之,为了使用户space程序进入内核模式,它需要进行显式系统调用,如打开、读取、写入等,从而导致软件中断(SWI),从而导致系统切换到内核模式。您可以在给定的link中找到更详细的答案,希望对您有所帮助。
让我们一步步来看:
- 一个进程是运行。
- 进程 运行 时出现异常。
- 进程被中断以调用异常或中断处理程序。
- 指令,称为陷阱或系统调用处理程序,读取所请求服务+参数的详细信息,然后在内核模式下执行此请求。
- 现在我们回到用户模式调用中断的位置。
进入内核模式有两种方法:异常或中断。在大多数处理器中,异常和中断都有指定的编号。操作系统必须定义一个 table,其中包含指向每个异常和中断的处理程序的指针数组。
如果您在代码中除以零,您将作为异常进入内核模式。然后处理器跳转到除零处理程序。
如果您调用系统服务(在大多数系统上),您会执行一条导致异常的指令,从而使您进入内核模式。处理器调用系统服务的处理程序。
这是一般的工作方式。英特尔芯片进入内核模式的方式很奇怪。