5分钟搞懂用户态,内核态

1. 什么是用户态,内核态

用户态就是提供应用程序运行的空间,为了使应用程序访问到内核管理的资源例如CPU,内存,I/O。内核必须提供一组通用的访问接口,这些接口就叫系统调用。

用户态,内核态是指程序所处的状态。我们写的一段程序,我们所写的这段程序在运行过程中,有可能处于用户态,也有可能处于内核态。可能在某一个时刻处于用户态,下一个时刻切换到内核态。

那么用户态在什么时候可以切换到内核态呢?是在满足什么条件的时候触发的呢?
那么这个触发条件就是我们的程序需要去申请外部资源的时候。那么外部资源到底指的是什么呢?比如说内存条,显卡,磁盘,声卡,网卡,usb, 主板上的外设,主板上的LED,都属于外部资源。
也就是当需要操作这些硬件的时候,都需要从用户态转为内核态。

2. 用户态切换到内核态的方式

  • 系统调用,这个上面已经讲解过了,在我公众号之前的文章也有讲解过。其实系统调用本身就是中断,但是软件中断,跟硬中断不同。

  • 异常:如果当前进程运行在用户态,如果这个时候发生了异常事件,就会触发切换。例如:缺页异常。

  • 外设中断:当外设完成用户的请求时,会向CPU发送中断信号。

3. 系统调用

重点说一下系统调用,因为最常用的就是系统调用。 通过 man syscalls 可以获取所有的系统调用。包括5大类。

  • 进程控制相关的, process control。指令:exit, fork

  • 文件管理相关的, file system control。指令:chmod,chown,open

  • 设备相关的, device control。指令:read,write

  • 信息相关的,比如说要获取 cpu相关的信息等。指令:getcpu

  • 通信相关的。比如说进程间的通信等。比如说管道就是一个系统调用。指令:pipe, mmap。

4. 内核态切换到用户态

就是当内核态的任务执行完毕的时候,就回切换为用户态。

5. 举几个例子

  • 例如读写文件的时候,就会触发用户态到内核态的转换。这个时候会进行一个系统调用,(open/read/write)

  • 申请内存。这里的内存指的是堆内存。c 语言中会调用 malloc 这个函数,但是并没有一个系统调用是 malloc。malloc 中会分为俩种系统调用,第一个是 brk. 第二种是通过 mmap. 在小于 128k 内存申请的时候会调用brk。brk 和 mmap 申请的是虚拟地址空间。它并没有申请到主存上的真正的物理内存空间。想要申请到真正的物理内存,那么就需要在第一次访问的时候,如果发现虚拟内存地址没有映射到物理内存地址,那么就会触发一个缺页中断。

总结

本篇文章,没有非常深入的Linux内核实现,只是从宏观的角度阐述了下。看完上面的文章,也能得出一点结论就是:系统调用真的开销蛮大的。涉及到上下文的切换。

鸣谢

搞懂用户态,内核态

5分钟搞懂用户态,内核态相关推荐

  1. 用户态/内核态、用户栈/内核栈

    一.用户态和内核态 内核态和用户态是操作系统的两种运行级别,用于区分不同程序的不同权利. 内核态就是拥有资源多的状态,或者说访问资源多的状态,也称为特权态.相对来说,用户态就是非特权态,访问的而资源将 ...

  2. 42.Linux应用调试-初步制作系统调用(用户态-内核态)

    1首先来讲讲应用程序如何实现系统调用(用户态->内核态)? 我们以应用程序的write()函数为例: 1)首先用户态的write()函数会进入glibc库,里面会将write()转换为swi(S ...

  3. 操作系统用户态内核态线程同步

    1.计算机系统中有两类程序:系统程序和应用程序.为了保证系统程序不被应用程序破坏,为计算机设置了两种状态:内核态和用户态. 内核态运行的程序可以访问计算机的任何资源不受限制. 用户态运行的程序可以直接 ...

  4. html网页和cgi程序编程,十分钟搞懂什么是CGI

    原文:CGI Made Really Easy,在翻译的过程中,我增加了一些我在学习过程中找到的更合适的资料,和自己的一些理解.不能算是严格的翻译文章,应该算是我的看这篇文章的过程的随笔吧. CGI真 ...

  5. mysql decimal型转化为float_5分钟搞懂MySQL数据类型之数值型DECIMAL类型

    速成指南 5分钟搞懂MySQL数据类型 之数值型--DECIMAL类型 DECIMAL类型的语法:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL].其中M指定的是数字的总位 ...

  6. 一分钟搞懂 微调(fine-tuning)和prompt

    一分钟搞懂 微调fine-tuning和prompt 区别与联系 区别 联系 优缺点 微调的优点 微调的缺点 prompt的优点 prompt的缺点 在CV领域 Reference 大家都是希望让预训 ...

  7. python数据分析建模-十分钟搞懂“Python数据分析”

    原标题:十分钟搞懂"Python数据分析" 引言:本文重点是用十分钟的时间帮读者建立Python数据分析的逻辑框架.其次,讲解"如何通过Python 函数或代码和统计学知 ...

  8. 场内场外交易成本_2分钟搞懂场内场外基金

    一天一个金融知识,是成为投资大神的必要条件.今天我们花2分钟搞懂场内基金和场外基金.基金,既可以场内买又可以场外申购,场内场外这两者有什么区别?场内 场外 场内场外的"场",一般指 ...

  9. 看聊天记录都学不会C语言?太菜了吧》(17)5分钟搞懂指针与多重指针

    若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证. 本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新 ...

最新文章

  1. Python Qt GUI设计:窗口之间数据传递(拓展篇—5)
  2. Redis进阶实践之五Redis的高级特性
  3. Fedora 19 Mate环境安装Gnome3
  4. Git笔记(23) 不同角色的贡献
  5. java 和 Android Base64加密,java开发面试笔试题
  6. Job单线程运行的方案
  7. 「python自动化运维」之自动生成配置文件并上传到目标服务器指定的位置
  8. 纪念第一次用vscode给go语言配置环境踩坑
  9. C语言实现EEPROM程序读取24C02成功读取方案单片机用
  10. STM32L010C6Tx的睡眠 按键唤醒和RTC Alarm闹钟唤醒
  11. 移动web适配的方式
  12. pb 选择多行数据窗口数据_PB数据窗口中自动换行
  13. 【allegro 17.4软件操作保姆级教程三】布局操作基础一
  14. 考研复试计算机网络篇
  15. android自动切换暗色,超实用!Android 深色模式适配(可定时开启的APP内主题切换管理工具)...
  16. [论文解读]A Survey of Methods for Explaining Black Box Models
  17. MONSTER童话系列——沒有名字的怪物
  18. 山东涛雒镇万亩水稻 国稻种芯·中国水稻节:日照迎来收割季
  19. chatgpt可以降重论文吗-chatgpt降重论文软件
  20. 制造业大数据分析解决方案,助力生产效率提升

热门文章

  1. 东方博宜OJ 1462 - 【入门】小明的游泳时间
  2. 手摸手系列之---camel ftp监听接收解析xml报文并入库生成Java对象实战
  3. java加载js_[Java教程]javascript如何动态加载js文件
  4. 知名在线音乐网站音悦Tai疑似倒闭
  5. javascript控制台输出
  6. 工地人员行为分析安全帽识别 yolo5
  7. 雪之少女PSP版全CG
  8. Windows服务器配置证书
  9. Linux 从当前目录下切换到根目录下
  10. Activity 的 36 大难点,你会几个?,安卓面试2020