计算机基础理论知识梳理篇(二):目态(用户态)、管态(内核态)

目态与管态

多数计算机系统将CPU执行状态分为目态(用户态)与管态(内核态),CPU的状态属于程序状态字PSW的一位,CPU交替执行操作系统程序和用户程序。

1. CPU设计中的目态、管态

目态指非特权状态,代码的执行被硬件限定,如不能读写其他进程的私有存储空间(程序的用户空间)以及操作系统的内核空间。

管态又叫特权态、系统态或内核态。CPU在管态下可以执行指令系统的全集,操作系统在管态下运行。

x86结构拥有四种级别,级别最高的是ring 0,也就是核心态。级别最低的是ring 3,也就是用户态。ring 1和ring 2设计成供驱动程式使用,但一般很少使用。

2. 操作系统设计中的目态、管态

内核禁止在目态下的应用程序写入系统配置文件、杀掉其他用户的进程、重启系统等。 操作系统中的用户态与用户权限等级不是一个概念,普通用户、管理员(root)或者超级用户(superuser)开启的程序都可能运行在用户态和内核态。操作系统中的用户态代码运行在CPU的用户态,实现了从硬件上对非法程序的隔离禁止控制。与CPU设计中的用户态相比,操作系统对用户态有更加复杂的权限设定,比如在Unix系统中,运行在用户态的代码,不能侦听1024以下的端口号,以伪装成常见的服务,而超级用户运行的代码则有权这样做。程序在目态下执行特权指令,硬件将发生中断,由操作系统获得控制,特权指令被禁止执行,这样可以防止用户程序有意或无意的破坏系统。 

3. 任何一个应用程序都有可能运行在目态或管态
  • 当一个应用程序执行系统调用而陷入内核代码执行时,则处于内核态,此时CPU执行处于特权0级的内核代码,内核代码使用当前进程的内核栈(每个进程都有自己的内核栈)。
  • 当一个应用程序执行自己的代码时,则处于用户态,此时CPU执行处于特权3级用户代码。
  • 从目态转换为管态的唯一途径是中断, 从管态到目态可以通过修改程序状态字来实现。
  • 当程序陷入内核态后,先把目态堆栈的地址保存在内核栈之中,然后设置堆栈指针寄存器的内容为内核栈的地址,这样就完成了目态栈向内核栈切换;当程序从内核态恢复到用户态时,先将保存在内核栈里的用户栈地址恢复到堆栈指针寄存器即可完成内核栈向用户栈切换。另外,程序使用的内核栈在切换进入内核运行之前是空的,在切换出内核运行之后也是空的,看上去像一个临时栈。
 

用户空间与内核空间

 

操作系统采用虚拟内存管理方式,将内部存储器映射为高地址段内核空间和低地址段用户空间两个部分。程序,在内核空间中运行称为内核态,在用户空间中运行称为用户态。

 

转载于:https://www.cnblogs.com/XiongMaoMengNan/p/8010724.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值