Linux 内核学习 1 - 用户态和内核态

用户态和内核态是 Linux 操作系统中运行的进程可能所处的两种状态。

假设用户现在运行了一个应用程序,即在操作系统中启动了一个进程。当进程执行应用程序自己的代码时:我们称该进程处于用户运行状态(简称用户态)。当该过程我行系统调用后进人内核代码中执行时:我们称该进程处于内核运行狀态(简称内核态)。

进程在用户态和内核态执行时,所拥有的权限(主要是指令执行权限和內存访问权限)不同。以 intel处理器为例,其有4个特权级别:Ring0、 Ring 1、 Ring 2、 Ring3。Ring 0级别最高、Ring 3 级别最低。Linux使用 Ring 0 级别执行内核代码态代码时,Ring3 级别执行用户态代码,不使用 Ring1和 Ring2。处理器在Ring3级别执行时,无法执行 Ring0级别才能执行的某些 (如停机指令 HTLT等)指令,无法访问运行在Ring0级别才能访问的內存地址空间(包括代码和数据)。这种机制保证了整个系统的交全,避免了应用程序执行非法的操作(比如访问操作系统本身的内存)。

进程可以在用户态和内核态之间切换。比如运行在用户态的程序可以执行系统调用而进人内核态;处理器收到中断时,会马上进人内核态执行中断处理程序;当系统调用或中断处理程序执行完成后,进程会切换回用户态继续执行。

需要注意的是,运行在用户态和内核态,以及处理器的特权级别,与当前用户是管理员用户(root) 还是普通用户没有关系。所有用户启动的应用程序代码都在用户态还行,所有内核代码都在内核态运行,而不管代码是哪个用户启动的。

你可能感兴趣的:(linux,学习,运维)