如何理解用户态和内核态?

简介

下图为 Linux 32位操作系统的进程空间分配图(来源于网络),低位的 3G 属于进程自己使用的内存,高位的 1G 是内核空间,内核空间由所有进程共享。

 

内核空间和用户空间指的是虚拟内存。当进程运行在内核空间时就处于内核态,当进程运行在用户空间时就处于用户态。

现代CPU主要的设计目标就是多任务系统,多任务系统的三个核心特征:权限分级、数据隔离、任务切换。内核态和用户态的概念,就是为了实现多任务系统的权限分级、数据隔离。

有什么区别呢?

  内核空间用于运行操作系统内核、硬件驱动,用户空间给普通应用程序使用。比如一应用程序想访问打印机,而打印机驱动运行于内核空间,此时需要切换到内核态运行。

为什么要这么划分呢?

  如果程序直接访问硬件资源,一旦程序有恶意或错误的行为,会导致其它程序无法正常运行。

  所以引入一个协调者,就是操作系统,由操作系统来协调。(也有其它好处,如操作系统屏蔽了底层硬件细节,提供高层次的抽象,使应用程序开发更简单、更通用)

CPU指令

  CPU指令是分权限的,这是因为CPU是可以直接访问硬件资源的。普通应用程序可以执行非特权指令。

用户态和内核态切换

  • 系统调用(软中断):系统调用是操作系统提供给应用程序的API,如程序读取某个硬盘上的文件,CPU发现该指令是特权指令,需要在内核态运行,此时 CPU 就会通过中断切换到内核态,处理完成后CPU再切换回用户态。
  • 硬件中断:如网络数据准备就绪,就会触发硬中断,通知应用程序处理。(为什么这么设计呢 ?有时间写下)
  • 异常:如程序读取数据时,发生缺页,即内存里没有该数据,此时 CPU 会通过异常切换到内核态。

切换肯定有开销,简单来说有以下几点

  • 保留用户态上下文
  • 执行内核态代码
  • 复制内核态执行结果到用户态空间
  • 恢复用户态上下文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值