用户态和内核态的切换耗费时间的原因

总的来说,就是线程切换或者加锁解锁都是因为需要用户态和内核态的切换,从而导致的开销大。
应用程序的执行需要依托内核提供的资源,包括CPU、存储、IO等,因此内核提供了一个统一的接口,
也就是系统调用,一个应用程序从用户态进入到内核态,就需要执行系统调用。
用户态转化为内核态时,需要执行系统调用,保存现场,也就是保存用户态的寄存器等,
然后去系统调用,并在内核态执行,最后恢复现场。并且由于内核对于用户的不信任,
因此内核需要对用户进行一些额外的检查,这就需要耗费更多的工作了。

用户态和内核态

用户态和内核态:
1、划分的原因:为了防止用户进程破坏操作系统的稳定,对一些资源的访问进行了等级划分,与系统相关的一些关键性操作必须由高级别的程序来完成,这样可以做到集中管理,减少冲突。
2、两者的区别:内核态和用户态是操作系统的两种运行级别,总共有四种运行级别,分别为 R0、R1、R2和 R3。
内核态权限最高,为 R0 级,用户态权限最低,为 R3 级。
用户态运行用户程序,进程所能访问的内存空间和对象受到很大的限制,所占有的处理机可被抢占;
内核态运行操作系统程序,能访问所有的内存空间和对象,所占有的处理机不可被抢占。用户态和内核态的切换:
进程大部分时间运行在用户态下 ,在其需要操作系统帮助完成一些用户态特权以外的操作时就会切换到内核态 。
切换到内核态的方式有 : 系统调用(父进程fork一个子进程)、发生异常、外围设备中断。

用户态和内核态的切换耗费时间的原因相关推荐

  1. Linux / 用户态和内核态的切换耗费时间的原因

    应用程序的执行必须依托于内核提供的资源,包括 CPU 资源.存储资源.I/O 资源等.为了使上层应用能够访问到这些资源,内核必须为上层应用提供访问的接口:即系统调用.因此,如果一个程序需要从用户态进入 ...

  2. 用户态和内核态的简单理解

    文章目录 linux基础 系统调用和库函数的区别 为什么要区分用户态和内核态? 用户态和内核态的切换耗费时间的原因 哪些情况会出出现用户态和内核态的切换 用户态切换到内核态的三种方式 linux基础 ...

  3. 用户态和内核态之间的切换

    用户态和内核态之间的切换 切换方式 从用户态到内核态切换可以通过三种方式,或者说会导致从用户态切换到内核态的操作: 系统调用,这个上面已经讲解过了,在我公众号之前的文章也有讲解过.其实系统调用本身就是 ...

  4. 用户态与内核态之间切换详解

    用户空间和内核空间 用户程序有用户态和内核态两种状态.用户态就是执行在用户空间中,不能直接执行系统调用.必须先切换到内核态,也就是系统调用的相关数据信息必须存储在内核空间中,然后执行系统调用. 操作硬 ...

  5. 操作系统 | 用户态和内核态的切换(中断、系统调用与过程(库函数)调用)

    文章目录 中断 过程调用 系统调用 过程调用和系统调用的区别 中断 用户态.内核态之间的切换是怎么实现的? 用户态→内核态 是通过中断实现的.并且 中断是唯一途径 . 核心态→用户态 的切换是通过执行 ...

  6. Linux系统编程33:进程信号之详解信号的捕捉过程,用户态和内核态及其切换,sigaction和signal

    文章目录 (1)用户态和内核态 (2)用户态和内核态的切换 (3)内核是如何实现信号的捕捉 (4)sigaction (1)用户态和内核态 我们说过,每个Linux进程有4GB的地址空间 其中0-3G ...

  7. 进程用户态和内核态及其切换过程

    1.进程的堆栈 内核在创建进程的时候,会为进程创建相应的堆栈.每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间.当进程在用户空间运行时,CPU堆栈指针寄存器里面的内容是用户堆 ...

  8. 进程用户态和内核态及其切换过程(转)

    1.进程的堆栈 内核在创建进程的时候,会为进程创建相应的堆栈.每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间.当进程在用户空间运行时,CPU堆栈指针寄存器里面的内容是用户堆 ...

  9. 系统调用原理与用户态以及内核态相互切换过程,以linux系统为主

    1. 讲系统调用前需要清楚的几个基本概念 1.1 内核态与用户态 内核态:当CPU执行内核的代码(CPU堆栈指针指向内核堆栈)时,我们就称此时处于内核态,内核态的代码可以使用特权指令,这些指令可以控制 ...

最新文章

  1. maven的java工程取mysql数据库数据
  2. ubuntu 16.04 安装TensorFlow GPU版本
  3. java设计模式适配器模式_Java中的适配器设计模式
  4. php 5.5.7.tar.gz,编译 php-5.5.26.tar.gz
  5. oreo另一个意思_记一次有意思的统计(部分大宗商品价格指数相关性统计)
  6. 三星Galaxy Z Fold3定档8月11日:售价预计将超1.5W
  7. C#与Java之比较
  8. python装饰器打印函数执行时间_python装饰器计算函数执行时间
  9. 【异或】LeetCode 137. Single Number II
  10. CMS垃圾回收器总结
  11. N54L文件服务器,N54L安装群晖需要修改的硬件设置
  12. 开源好用的 Android 市场 F-Droid
  13. 中兴新支点操作系统_中兴新支点操作系统的设计和功能怎样?
  14. ipod nano7安装linux,怎么用ipod nano看视频?
  15. 2017计算机办公自动化试题,【2017年整理】计算机办公自动化试题.doc
  16. linux下的护眼软件
  17. 屏蔽google adsense和百度推广的广告
  18. python傅里叶逆变换_C# 傅里叶变换 逆变换 调用MathNet包|简明python教程|python入门|python教程...
  19. 成功破解苹果iPhone全功能之网友教程篇
  20. poi-tl实现word文档按模板下载

热门文章

  1. window和frame的用法
  2. 入职字节跳动一年,谈谈我的工作收获,另附入职面经
  3. 上海出差之行--领略外滩美景、RT-Thread总部之旅、嵌友面基、返程记录
  4. 用计算机弹暖暖数字代码,奇迹暖暖网页版计算器
  5. mysql 1593_Linux中MySQL主从复制中出现1593错误码的低级错误
  6. 优思学院|准时化生产(JIT)是什么?
  7. JSON文件的读取操作详解
  8. js 对象的键名 可以是数字么
  9. zigbee设备入网流程分析
  10. 采用ASP.NET使用C#.NET语言开发的在线学生选课系统(源码+数据库+论文)