文章目录

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

linux基础

linux的kernel内核外是系统调用,系统调用外是shell、库函数,而应用程序则在最外层

系统调用和库函数的区别

  • 内核:屏蔽了调用各硬件资源的细节
  • 系统调用:内核提供给用户调用的接口,但系统调用的可移植性差
    移植性差的原因:windows、linux内核的系统调用是不同的,比如:同一个功能提供给用户的函数名、参数都不相同,会出现从一个系统移植到另一个系统无法正常运行。
  • 库函数:为了解决系统调用移植新差的问题,同时封装windows和linux系统调用,对用户提供一个的函数(接口)。
  • 系统调用在内核地址空间执行,而库函数是在用户地址空间调用。

为什么要区分用户态和内核态?

在CPU指令中,有些指令是非常危险的,如果错用将导致系统崩溃,比如清内存、设置时钟等,所以CPU将指令分为特权指令和非特权指令。对于危险指令,只允许操作系统及其相关模块使用,普通应用程序只能使用不危险的指令。

  • Intel的CPU将特权等级分为4个级别:Ring0~Ring3,而Linux使用Ring3级别运行用户态,Ring0作为内核态。
  • 操作系统启动时对内存进行了划分,操作系统的数据都是存放于内核空间的,用户进程的数据是存放于用户空间的。处于用户态级别的程序只能访问用户空间,而处于内核态级别的程序可以访问用户空间和内核空间。
  • 当一个进程执行系统调用而陷入内核代码中执行时,我们就称进程处于内核态

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

内核为上层应用使用CPU、存储、IO等硬件资源提供了接口,即系统调用,如果一个应用程序需要用到内核资源,就需执行系统调用的相关语句。
(1)当执行系统调用时,首先会保存现场,然后通过系统调用到内核态执行,最后内核态变为用户态执行用户程序时,需要恢复用户态的现场。
在进入内核的时候需要保存用户态的寄存器,在内核态返回用户态的时候会恢复这些寄存器的内容。

(2)每个线程都有两个栈:用户栈和内核栈,当执行系统调用时,线程就会由用户栈切换到内核栈,而内核代码对用户不信任,需要进行额外的检查。
Linux | 为什么用户态和内核态的切换耗费时间?

哪些情况会出出现用户态和内核态的切换

  • 线程间的切换(上下文):线程上下文切换时,前一个线程的线程线程(切换前最后时刻的数据和指令)会被保存到内核中,而切换回来时需要从内核空间中读取数据恢复现场。
  • Syncronized锁的获取和释放:使用内核中monitor对象

用户态切换到内核态的三种方式

  • 当程序在用户态需要申请外部资源(如声卡、网卡、U盘、磁盘)时,需要从用户态切换到内核态,主要有3种情况需要申请外部资源:
    (1)系统调用
    举例: 创建线程时,需要通过pthread函数库调用内核来创建
    (2)中断
    举例: 当外围设备完成用户请求的操作后,会想CPU发送中断信号。这时CPU会暂停执行下一条指令(用户态)转而执行与该中断信号对应的中断处理程序
    (3)异常:某些异常如缺页异常只能由内核进行处理

用户态和内核态的简单理解相关推荐

  1. 从根上理解用户态与内核态

    欢迎来到操作系统系列,采用图解 + 大白话的形式来讲解,让小白也能看懂,帮助大家快速科普入门. 本篇文章开始探秘用户态与内核态,虽然一般面试不会问这个,但搞清楚这块,对我们理解整个计算机系统是及其有意 ...

  2. java运行在用户态_理解Linux用户态和内核态

    Linux整体架构图 我们先来看一张Linux整体架构图. 系统调用 ​ 系统调用时操作系统的最小功能单位.根据不同的应用场景,不同的Linux发行版本提供的系统调用数量也不尽相同,大致在240-35 ...

  3. 用户态与内核态的区别与理解

    用户态与内核态的区别与理解 先给大家看看Linux进程的地址空间,如下: 对于Linux内核态的地址空间,3G-4G是大家共享的.这里存放的是整个内核的代码和所有的内核模块以及内核所维护的数据. 1. ...

  4. 用户态和内核态的理解和区别

    1.linux进程有4GB地址空间,如图所示: 3G-4G大部分是共享的,是内核态的地址空间.这里存放整个内核的代码和所有的内核模块以及内核所维护的数据. 2.特权级的概念: 对于任何操作系统来说,创 ...

  5. Linux用户态和内核态

    究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子: 1)例 ...

  6. 多线程之:用户态和内核态的区别

    一:大话版用户态和内核态 (1)用户态和内核态的概念? --->内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序 ---& ...

  7. 操作系统基础知识用户态和内核态的区别

    这节课给你带来了一道非常经典的面试题目:用户态线程和内核态线程有什么区别? 这是一个组合型的问题,由很多小问题组装而成,比如: 用户态和内核态是什么? 用户级线程和内核级线程是一个怎样的对应关系? 内 ...

  8. IO操作底层调用过程 | 用户态切换内核态原理 | 中断概念

    IO操作底层调用过程|内核|中断| 做后端的程序员都知道我们编写的程序主要分方法程序和IO操作程序. 有什么不一样呢? 方法程序就不多说了.IO程序有什么不同呢?IO操作指的是对硬件设备操作,比如键盘 ...

  9. 「操作系统」什么是用户态和内核态?为什么要区分

    「操作系统」什么是用户态和内核态?为什么要区分 参考&鸣谢 从根上理解用户态与内核态 程序员阿星 并发编程(二十六)内核态和用户态 Lovely小猫 操作系统之内核态与用户态 fimm 文章目 ...

最新文章

  1. python构建cnn图片匹配_tensorflow搭建cnn人脸识别训练+识别代码(python)
  2. VTK:模型之DiscreteMarchingCubes
  3. Jquery常用标签
  4. 本文以H264视频流为例,讲解解码流数据的步骤。
  5. CentOS7.4中搭建lnmp环境
  6. 电商设计师必备素材|快速组合自己想要的场景和落版文字
  7. IDEA如何使用热部署方式启动项目?
  8. 关闭window 8.1 的skydrive
  9. 2021-05-17 吾日三省吾身
  10. python用户登录界面设计_python如何做一个登录注册界面
  11. usb启动计算机boss设置方法,技嘉主板bios设置usb启动(图文教程)
  12. ESP8266-连接阿里云示例
  13. 获取银行卡Log接口
  14. 计算机科学方向的会议或期刊,计算机顶会和顶刊_计算机顶会_顶会
  15. HTML+CSS+JS实现鼠标点击特效富强民主文明方法
  16. SpringBoot整合Sa-Token
  17. FPS游戏自瞄爆头原理
  18. 怎么给MP4加密、选用隐大师U盘
  19. 第03课:如何学习“机器学习”
  20. 捻深红尚透,谁信道、花亦通灵。多态

热门文章

  1. Matlab中对文件夹下.mat文件进行读取及操作
  2. [SinGuLaRiTy] NOIP互测模拟赛
  3. 3亿新市民金融崛起前夕,谁能率先打通服务链?
  4. 【每日最爱一句】2013.06.22
  5. 从内层循环退出外层循环的方法
  6. Quartus II 13.0无modelsim进行仿真(用自带仿真器)
  7. 2022 长安“战疫”网络安全卫士守护赛 WriteUp
  8. linux 系统调用 优先级,Linux内核学习笔记(6)-- 进程优先级详解(prio、static_prio、normal_prio、rt_priority)...
  9. Python 学习:浮点数
  10. oshi-core实用的采集系统信息工具