前言
谁再和我提内核/用户态, 我跟谁……
image记不清哪天了,
咸鱼刚入职场,
依稀记得某天的下午时光,
公司内的一群大牛, 聚在一起 image尽讨论一些高大上的技术话题, 或底层原理, 或架构……
时不时传来一些专业术语“用户态”,“内核态”…………
咸鱼在边上默默听着, 也不敢插嘴, image只能仰望大佬, 同时暗下决心, 今天一定要把这两个概念搞懂!
那么, 用户态和内核态代表究竟是个啥?
用户态和内核态
简而言之, 内核态和用户态就是linux的权限划分.
- 内核态(Kernel Mode)
运行操作系统程序, 操作硬件
- 用户态(User Mode)
运行用户程序
为什么要进行这样的划分呢?
其实本质是为了保证系统不会崩溃!
你总不希望系统跑你的程序时,
因为你的程序有bug, 导致操作系统崩溃吧!
特权级别及指令划分
这两种运行级别有不同的特权, 可以运行不同的指令集
特权级别一般分为四种
-
R0
-
R1
-
R2
-
R3
从R0到R3特权能力依次降低
- R3相当于用户态
当程序运行在R3级特权上时, 就可以称之为运行在用户态.
- R0相当于内核态
当程序运行在0级特权级上时,就可以称之为运行在内核态.
不同级别能够运行不同的指令集合
- 特权指令
只能由操作系统使用、用户程序不能使用的指令.
- 非特权指令
用户程序可以使用的指令.
状态的切换
用户态和内核态可以互相切换.
运行在用户态下的程序不能直接访问操作系统内核数据结构和程序.
当我们在系统中执行一个程序时, 大部分时间是运行在用户态下的,
在其需要操作系统帮助完成某些它没有权力和能力完成的工作时,
就会切换到内核态.
用户态--->内核态
可以通过三种途径
- 系统调用(访管指令)(用户进程主动发起)
为了安全, 应用程序无法直接调用硬件的功能,
- 异常(被动)
当CPU在执行运行在用户态下的程序时,
- 外围设备的中断(被动)
当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,
内核态--->用户态
- 设置程序状态字PSW
两种状态的区别
这两种状态的主要差别是
-
处于用户态执行时,进程所能访问的内存空间和对象受到限制,其所处于占有的处理机是可被抢占的
-
处于核心态执行中的进程,则能访问所有的内存空间和对象,且所占有的处理机是不允许被抢占的.
谁再和你提内核/用户态, 请把怼飞他!
image欢迎关注我
技术公众号 “CTO技术”
网友评论