用户态和内核态的切换

用户态和内核态的切换

我们经常说,一个程序依赖DMA设备来减少用户态和内核态的切换次数,以此来提升性能。那么对于它的细节是如何进行的呢?本篇,博主与你一起研究一下用户态和内核态的划分,以及这件事情的前因后果。

用户空间和内核空间

对于32位的操作系统而言,它的寻址空间最大为4g(2的32次方),换言之一个系统进程最大可运行的内存地址空间为4个G,操作系统核心空间占用1g,其他3g则给予用户空间使用。针对Linux操作系统而言,最高的1G字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF),由内核使用,称为内核空间,而较低的3G的字节(从虚拟地址 0x00000000 到 0xBFFFFFFF)由各个进程使用,称为用户空间。
在这里插入图片描述

为什么要区分内核空间和用户空间

为了安全,通过隔离内核空间和用户空间,使得相互之间不受影响。内核空间由操作系统所管理,负责的都是比较核心的资源管理,甚至中断等。通过环境隔离,使得操作系统的资源被保护起来,这样不会因为用户空间的用户进程滥用崩溃从而导致内核空间也跟着崩溃。

内核空间这些指令在CPU层面被称之为R0级的指令,而用户空间则运行在R3级别的指令集。操作系统也是应用了cpu的这种指令级别划分。

在这里插入图片描述


什么是用户态和内核态

通过上文的分析,我们已经了解到操作系统通过空间隔离,隔离用户的程序和操作系统的程序,这就使得它们之间互不影响。从而建立操作系统程序的健壮性。但是,这种空间隔离也带来了运行程序额外的开销,即空间切换。

进程运行在内核空间就处于内核态,运行在用户空间则属于用户态,任何一个进程,有两个堆栈,在(内核态和用户各有一个堆栈),这就使得用户在发起一个系统调用或者系统中断的时候必须要暂停当前的应用程序,并且保存当前程序的上下文,并且将程序切换到内核堆栈中执行。这个切换的过程,也就是我们所说的性能开销。

在这里插入图片描述

用户态切换到内核态的3种方式
  • 系统调用:用户进程通过系统函数发起一次系统调用,系统调用的机制,核心是使用了操作系统为用户开放的终端来实现,例如Linux的ine 80h中断
  • 异常:CPU通过持有的虚拟地址和地址总线访问链接在地址总线上的所有设备,由MMU将虚拟地址转换成物理地址,当没有创建一个虚拟地址到物理地址的映射,或创建了映射,但物理页不允许写的时候,触发的缺页异常
  • 设备的中断信号:当外围设备处理完成某项操作之后,它会发出一个中断信号,以此来中断当前运行的用户程序,转而抢占cpu的执行权。比如硬盘的读写完成、用户的输入输出。这些都需要优先处理。否则,用户端看起来只能是操作的卡顿。

运行态切换的细节

  • 从当前进程的描述符中提取其内核栈的ss0和esp0的信息

  • 使用ss0和esp0指向的内核栈将当前进程的cs,eip,eflags,ss,esp信息保存起来。

  • 将先前由中断向量检索得到的中断处理程序的cs,eip信息装入相应的寄存器,开始

    执行中断处理程序,这时就转到了内核态的程序执行了。

说明:那么上面的这个过程细节,目前来看,也没有那么明朗,虽然大家都这样写。但是,并没有一个实际的案例。

这里博主先todo,稍后单开一篇文章叙述。到时这里会换上链接,当然,比较着急的同学也可以参考这篇:

https://zhuanlan.zhihu.com/p/142084966

番外篇:cpu占比(top3)

在这里插入图片描述

  • us(user) :cpu在用户空间的消耗时间百分比
  • sy(system): cpu在内核空间的消耗时间百分比
  • ni(niceness): cpu消耗在低优先级程序消耗的时间百分比
  • id(idle) : cpu空闲时间百分比
  • wa(wait) : cpu等待外部 i/o的时间百分比,在此期间纯粹等待,这个值太高则说明外围设备有问题
  • hi(hardware interrupt): cpu响应硬件设备中断所占用的百分比
  • si(software interrupt):cpu 响应软件中断所占用的百分比
  • st(stole time) : 只对虚拟机有效,指当前虚拟机cpu时间中,被同一台物理机上其他虚拟机偷走的时间百分比

参考文章

  • 详解用户态和内核态切换:https://www.cnblogs.com/sparkdev/p/8410350.html
  • 番外top3:https://cloud.tencent.com/developer/article/1352415
  • cpu的运行级别和保护机制:https://zhuanlan.zhihu.com/p/55478625
  • 切换细节:https://www.cnblogs.com/maxigang/p/9041080.html
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值