资料介绍
内核空间和用户空间是操作系统理论的基础之一,即内核功能模块运行在内核空间,而应用程序运行在用户空间。现代的CPU都具有不同的操作模式,代表不同的级别,不同的级别具有不同的功能,在较低的级别中将禁止某些操作。Linux系统设计时利用了这种硬件特性,使用了两个级别,最高级别和最低级别,内核运行在最高级别(内核态),这个级别可以进行所有操作,而应用程序运行在较低级别(用户态),在这个级别,处理器控制着对硬件的直接访问以及对内存的非授权访问。内核态和用户态有自己的内存映射,即自己的地址空间。
正是有了不同运行状态的划分,才有了上下文的概念。用户空间的应用程序,如果想要请求系统服务,比如操作一个物理设备,或者映射一段设备空间的地址到用户空间,就必须通过系统调用来(操作系统提供给用户空间的接口函数)实现。如下图所示:
通过系统调用,用户空间的应用程序就会进入内核空间,由内核代表该进程运行于内核空间,这就涉及到上下文的切换,用户空间和内核空间具有不同的地址映射,通用或专用的寄存器组,而用户空间的进程要传递很多变量、参数给内核,内核也要保存用户进程的一些寄存器、变量等,以便系统调用结束后回到用户空间继续执行,所谓的进程上下文,就是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容,当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。
同理,硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理,中断上下文就可以理解为硬件传递过来的这些参数和内核需要保存的一些环境,主要是被中断的进程的环境。
Linux内核工作在进程上下文或者中断上下文。提供系统调用服务的内核代码代表发起系统调用的应用程序运行在进程上下文;另一方面,中断处理程序,异步运行在中断上下文。中断上下文和特定进程无关。
运行在进程上下文的内核代码是可以被抢占的(Linux2.6支持抢占)。但是一个中断上下文,通常都会始终占有CPU(当然中断可以嵌套,但我们一般不这样做),不可以被打断。正因为如此,运行在中断上下文的代码就要受一些限制,不能做下面的事情:
1、睡眠或者放弃CPU。
这样做的后果是灾难性的,因为内核在进入中断之前会关闭进程调度,一旦睡眠或者放弃CPU,这时内核无法调度别的进程来执行,系统就会死掉
2、尝试获得信号量
如果获得不到信号量,代码就会睡眠,会产生和上面相同的情况
3、执行耗时的任务
中断处理应该尽可能快,因为内核要响应大量服务和请求,中断上下文占用CPU时间太长会严重影响系统功能。
4、访问用户空间的虚拟地址
因为中断上下文是和特定进程无关的,它是内核代表硬件运行在内核空间,所以在终端上下文无法访问用户空间的虚拟地址
正是有了不同运行状态的划分,才有了上下文的概念。用户空间的应用程序,如果想要请求系统服务,比如操作一个物理设备,或者映射一段设备空间的地址到用户空间,就必须通过系统调用来(操作系统提供给用户空间的接口函数)实现。如下图所示:
通过系统调用,用户空间的应用程序就会进入内核空间,由内核代表该进程运行于内核空间,这就涉及到上下文的切换,用户空间和内核空间具有不同的地址映射,通用或专用的寄存器组,而用户空间的进程要传递很多变量、参数给内核,内核也要保存用户进程的一些寄存器、变量等,以便系统调用结束后回到用户空间继续执行,所谓的进程上下文,就是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容,当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。
同理,硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理,中断上下文就可以理解为硬件传递过来的这些参数和内核需要保存的一些环境,主要是被中断的进程的环境。
Linux内核工作在进程上下文或者中断上下文。提供系统调用服务的内核代码代表发起系统调用的应用程序运行在进程上下文;另一方面,中断处理程序,异步运行在中断上下文。中断上下文和特定进程无关。
运行在进程上下文的内核代码是可以被抢占的(Linux2.6支持抢占)。但是一个中断上下文,通常都会始终占有CPU(当然中断可以嵌套,但我们一般不这样做),不可以被打断。正因为如此,运行在中断上下文的代码就要受一些限制,不能做下面的事情:
1、睡眠或者放弃CPU。
这样做的后果是灾难性的,因为内核在进入中断之前会关闭进程调度,一旦睡眠或者放弃CPU,这时内核无法调度别的进程来执行,系统就会死掉
2、尝试获得信号量
如果获得不到信号量,代码就会睡眠,会产生和上面相同的情况
3、执行耗时的任务
中断处理应该尽可能快,因为内核要响应大量服务和请求,中断上下文占用CPU时间太长会严重影响系统功能。
4、访问用户空间的虚拟地址
因为中断上下文是和特定进程无关的,它是内核代表硬件运行在内核空间,所以在终端上下文无法访问用户空间的虚拟地址
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 基于句子级上下文的神经机器翻译综述 64次下载
- 一种上下文信息融合的时序行为提名方法 5次下载
- CPU上下文切换的详细资料讲解
- 上下文统计分析的软件故障定位方法 0次下载
- Web服务的上下文的访问控制策略模型 0次下载
- 基于低秩重检测的多特征时空上下文的视觉跟踪 0次下载
- 基于局部敏感直方图的时空上下文跟踪_葛骁倩 0次下载
- 基于Pocket PC的上下文菜单实现 0次下载
- 基于Pocket PC的上下文菜单实现 17次下载
- 终端业务上下文的定义方法及业务模型
- 移动设备的个性化推荐在上下文感知应用
- 新鲜度敏感的上下文推理实时调度算法
- 基于交互上下文的预测方法
- 基于多Agent的用户上下文自适应站点构架
- 基于形状上下文的人脸匹配算法
- SystemView上下文统计窗口识别阻塞原因 237次阅读
- FreeRTOS系列技术文章:上下文切换 885次阅读
- 首篇!Point-In-Context:探索用于3D点云理解的上下文学习 645次阅读
- 谷歌新作SPAE:GPT等大语言模型可以通过上下文学习解决视觉任务 1143次阅读
- 我们能否扩展现有的预训练 LLM 的上下文窗口 556次阅读
- 切换k8s上下文有多快 636次阅读
- 高负载处理及上下文切换 619次阅读
- 基于异常检测的模型表现对比 1562次阅读
- 基于金字塔特征融合与全局上下文注意模块实现完全自动缺陷检测 3032次阅读
- 如何分析Linux CPU上下文切换问题 1830次阅读
- Linux驱动中断上下文中会发生什么结果实验测试 836次阅读
- 基于Transformer模型的上下文嵌入何时真正值得使用? 2784次阅读
- 如何利用多个上下文信息来做同义实体发现问题上进行了一些新的探索 2532次阅读
- 讲解将知识图谱特征学习引入到推荐系统的各种思路与实现方法 8696次阅读
- 初学OpenGL:什么是绘制上下文 2396次阅读
下载排行
本周
- 1GBT1094.11-2022电力变压器第11部分:干式变压器
- 14.12 MB | 3次下载 | 免费
- 2FT-7800R对讲机维修手册附原理图
- 3.35 MB | 2次下载 | 免费
- 3串口工具UartAssist5.0.exe
- 0.60 MB | 2次下载 | 免费
- 4爬电距离和电气间隙计算
- 0.75 MB | 2次下载 | 1 积分
- 5UC3584DW次级侧后置稳压器EVM板原理图
- 38.97KB | 2次下载 | 免费
- 6UCC38C42 25瓦自谐振复位正激变换器
- 320.6KB | 1次下载 | 免费
- 7ZX-D37 BLE主从一体蓝牙模块技术手册
- 1.22 MB | 1次下载 | 免费
- 8使用15个时钟周期的ADS7841和ADS7844
- 188.55KB | 1次下载 | 免费
本月
- 1无刷电机控制方案设计合作
- 1.05 MB | 22次下载 | 免费
- 2美的超薄电磁炉TM-S1-09B主板原理图
- 0.08 MB | 20次下载 | 免费
- 3纯电动汽⻋的主要部件及⼯作原理
- 5.76 MB | 12次下载 | 5 积分
- 4GP328和GP88S对讲机的维修实列资料合集免费下载
- 0.03 MB | 10次下载 | 10 积分
- 5舒尔SLX4无线话筒接收机原理图:二次变频超外差部分
- 0.27 MB | 8次下载 | 免费
- 6IP5385_DEMO开发资料
- 1.96 MB | 7次下载 | 2 积分
- 7i.MX Linux开发实战指南—基于野火i.MX系列开发板
- 17.86 MB | 7次下载 | 免费
- 8Type-C VL160数据手册
- 0.92 MB | 7次下载 | 3 积分
总榜
- 1matlab软件下载入口
- 未知 | 935115次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420061次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233084次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191363次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183329次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81581次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73805次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65985次下载 | 10 积分
评论
查看更多