计算机基础理论知识梳理篇:目态(用户态)管态(内核态)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机基础理论知识梳理篇:目态(用户态)管态(内核态)相关的知识,希望对你有一定的参考价值。
目态与管态
多数计算机系统将CPU执行状态分为目态(用户态)与管态(内核态),CPU的状态属于程序状态字PSW的一位,CPU交替执行操作系统程序和用户程序。
1. CPU设计中的目态、管态
目态指非特权状态,代码的执行被硬件限定,如不能读写其他进程的私有存储空间(程序的用户空间)以及操作系统的内核空间。
管态又叫特权态、系统态或内核态。CPU在管态下可以执行指令系统的全集,操作系统在管态下运行。
x86结构拥有四种级别,级别最高的是ring 0,也就是核心态。级别最低的是ring 3,也就是用户态。ring 1和ring 2设计成供驱动程式使用,但一般很少使用。
2. 操作系统设计中的目态、管态
内核禁止在目态下的应用程序写入系统配置文件、杀掉其他用户的进程、重启系统等。 操作系统中的用户态与用户权限等级不是一个概念,普通用户、管理员(root)或者超级用户(superuser)开启的程序都可能运行在用户态和内核态。操作系统中的用户态代码运行在CPU的用户态,实现了从硬件上对非法程序的隔离禁止控制。与CPU设计中的用户态相比,操作系统对用户态有更加复杂的权限设定,比如在Unix系统中,运行在用户态的代码,不能侦听1024以下的端口号,以伪装成常见的服务,而超级用户运行的代码则有权这样做。程序在目态下执行特权指令,硬件将发生中断,由操作系统获得控制,特权指令被禁止执行,这样可以防止用户程序有意或无意的破坏系统。
- 当一个应用程序执行系统调用而陷入内核代码执行时,则处于内核态,此时CPU执行处于特权0级的内核代码,内核代码使用当前进程的内核栈(每个进程都有自己的内核栈)。
- 当一个应用程序执行自己的代码时,则处于用户态,此时CPU执行处于特权3级用户代码。
- 从目态转换为管态的唯一途径是中断, 从管态到目态可以通过修改程序状态字来实现。
- 当程序陷入内核态后,先把目态堆栈的地址保存在内核栈之中,然后设置堆栈指针寄存器的内容为内核栈的地址,这样就完成了目态栈向内核栈切换;当程序从内核态恢复到用户态时,先将保存在内核栈里的用户栈地址恢复到堆栈指针寄存器即可完成内核栈向用户栈切换。另外,程序使用的内核栈在切换进入内核运行之前是空的,在切换出内核运行之后也是空的,看上去像一个临时栈。
用户空间与内核空间
操作系统采用虚拟内存管理方式,将内部存储器映射为高地址段内核空间和低地址段用户空间两个部分。内核空间中存放的是内核代码和数据,对应的是内核态;用户空间中存放的是用户程序的代码和数据,对应的是用户态。
以上是关于计算机基础理论知识梳理篇:目态(用户态)管态(内核态)的主要内容,如果未能解决你的问题,请参考以下文章