5分钟搞懂用户态,内核态
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分钟搞懂用户态,内核态相关推荐
- 用户态/内核态、用户栈/内核栈
一.用户态和内核态 内核态和用户态是操作系统的两种运行级别,用于区分不同程序的不同权利. 内核态就是拥有资源多的状态,或者说访问资源多的状态,也称为特权态.相对来说,用户态就是非特权态,访问的而资源将 ...
- 42.Linux应用调试-初步制作系统调用(用户态-内核态)
1首先来讲讲应用程序如何实现系统调用(用户态->内核态)? 我们以应用程序的write()函数为例: 1)首先用户态的write()函数会进入glibc库,里面会将write()转换为swi(S ...
- 操作系统用户态内核态线程同步
1.计算机系统中有两类程序:系统程序和应用程序.为了保证系统程序不被应用程序破坏,为计算机设置了两种状态:内核态和用户态. 内核态运行的程序可以访问计算机的任何资源不受限制. 用户态运行的程序可以直接 ...
- html网页和cgi程序编程,十分钟搞懂什么是CGI
原文:CGI Made Really Easy,在翻译的过程中,我增加了一些我在学习过程中找到的更合适的资料,和自己的一些理解.不能算是严格的翻译文章,应该算是我的看这篇文章的过程的随笔吧. CGI真 ...
- mysql decimal型转化为float_5分钟搞懂MySQL数据类型之数值型DECIMAL类型
速成指南 5分钟搞懂MySQL数据类型 之数值型--DECIMAL类型 DECIMAL类型的语法:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL].其中M指定的是数字的总位 ...
- 一分钟搞懂 微调(fine-tuning)和prompt
一分钟搞懂 微调fine-tuning和prompt 区别与联系 区别 联系 优缺点 微调的优点 微调的缺点 prompt的优点 prompt的缺点 在CV领域 Reference 大家都是希望让预训 ...
- python数据分析建模-十分钟搞懂“Python数据分析”
原标题:十分钟搞懂"Python数据分析" 引言:本文重点是用十分钟的时间帮读者建立Python数据分析的逻辑框架.其次,讲解"如何通过Python 函数或代码和统计学知 ...
- 场内场外交易成本_2分钟搞懂场内场外基金
一天一个金融知识,是成为投资大神的必要条件.今天我们花2分钟搞懂场内基金和场外基金.基金,既可以场内买又可以场外申购,场内场外这两者有什么区别?场内 场外 场内场外的"场",一般指 ...
- 看聊天记录都学不会C语言?太菜了吧》(17)5分钟搞懂指针与多重指针
若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证. 本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新 ...
最新文章
- Python Qt GUI设计:窗口之间数据传递(拓展篇—5)
- Redis进阶实践之五Redis的高级特性
- Fedora 19 Mate环境安装Gnome3
- Git笔记(23) 不同角色的贡献
- java 和 Android Base64加密,java开发面试笔试题
- Job单线程运行的方案
- 「python自动化运维」之自动生成配置文件并上传到目标服务器指定的位置
- 纪念第一次用vscode给go语言配置环境踩坑
- C语言实现EEPROM程序读取24C02成功读取方案单片机用
- STM32L010C6Tx的睡眠 按键唤醒和RTC Alarm闹钟唤醒
- 移动web适配的方式
- pb 选择多行数据窗口数据_PB数据窗口中自动换行
- 【allegro 17.4软件操作保姆级教程三】布局操作基础一
- 考研复试计算机网络篇
- android自动切换暗色,超实用!Android 深色模式适配(可定时开启的APP内主题切换管理工具)...
- [论文解读]A Survey of Methods for Explaining Black Box Models
- MONSTER童话系列——沒有名字的怪物
- 山东涛雒镇万亩水稻 国稻种芯·中国水稻节:日照迎来收割季
- chatgpt可以降重论文吗-chatgpt降重论文软件
- 制造业大数据分析解决方案,助力生产效率提升