Linux中断知识汇总:

【深入理解Linux内核】【中断】内容汇总帖


目录

中断上下文和进程上下文

什么是中断上下文?

什么是进程上下文?

为什么要进行不同之间状态的切换?

什么情况下进行用户态到内核态的切换?

中断上下文代码中注意事项


中断上下文和进程上下文

进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事的两个概念。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。

处理器总处于以下三种状态之一:

  • 1、内核态,运行于进程上下文,内核代表进程运行于内核空间;
  • 2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;
  • 3、用户态,运行于用户空间。

LINUX完全注释中的一段话:

当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称 为该进程的上下文。当内核需要切换到另一个进程时,它需要保存当前进程的 所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去。在LINUX中,当前进程上下文均保存在进程的任务数据结 构中。在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。但同时会保留所有需要用到的资源,以便中继服务结束时能恢复被中断进程 的执行。


什么是中断上下文?

当执行一个中断处理函数时,内核处于中断上下文。

硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的 一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“ 中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。

中断上下文:

  • (1)中断上文:硬件通过中断触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。中断上文可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被中断的进程环境。
  • (2)中断下文:执行在内核空间的中断服务程序。

什么是进程上下文?

用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递 很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存 器值、变量等。所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。

进程上下文:

  • (1)进程上文:其是指进程由用户态切换到内核态是需要保存用户态时cpu寄存器中的值,进程状态以及堆栈上的内容,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。
  • (2)进程下文:其是指切换到内核态后执行的程序,即进程运行在内核空间的部分。

一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。

  • 用户级上下文: 正文、数据、用户堆栈以及共享存储区;
  • 寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);
  • 系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈。

模式切换和进程切换:

当发生进程调度时,进行进程切换就是上下文切换(context switch).操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。而系统调用进行的模式切换(mode switch)。模式切换与进程切换比较起来,容易很多,而且节省时间,因为模式切换最主要的任务只是切换进程寄存器上下文的切换。


为什么要进行不同之间状态的切换?

在现在操作系统中,内核功能模块运行在内核空间,而应用程序运行在用户空间。

现代的CPU都具有不同的操作模式,代表不同的级别,不同的级别具有不同的功能,其所拥有的资源也不同;在较低的级别中将禁止使用某些处理器的资源。

Linux系统设计时利用了这种硬件特性,使用了两个级别,最高级别和最低级别,内核运行在最高级别(内核态),这个级别几乎可以使用处理器的所有资源,而应用程序运行在较低级别(用户态),在这个级别的用户不能对硬件进行直接访问以及对内存的非授权访问。

内核态和用户态有自己的内存映射,即自己的地址空间。当工作在用户态的进程想访问某些内核才能访问的资源时,必须通过系统调用或者中断切换到内核态,由内核代替其执行。

进程上下文和中断上下文就是完成这两种状态切换所进行的操作总称。我将其理解为保存用户空间状态是上文,切换后在内核态执行的程序是下文。


什么情况下进行用户态到内核态的切换?

  • 1.进程上下文主要是异常处理程序和内核线程。内核之所以进入进程上下文是因为进程自身的一些工作需要在内核中做。例如,系统调用是为当前进程服务的,异常通常是处理进程导致的错误状态等。
  • 2.中断上下文是由于硬件发生中断时会触发中断信号请求,请求系统处理中断,执行中断服务子程序。

中断上下文代码中注意事项

运行于进程上下文的内核代码是可抢占的,但中断上下文则会一直运行至结束,不会被抢占。所以中断处理程序代码要受到一些限制,在中断代码中不能出现实现下面功能的代码:

  • (1)睡眠或者放弃CPU。 因为内核在进入中断之前会关闭进程调度,一旦睡眠或者放弃CPU,这时内核无法调度别的进程来执行,系统就会死掉。牢记:中断服务子程序一定不能睡眠(或者阻塞)。
  • (2)尝试获得信号量 如果获得不到信号量,代码就会睡眠,导致(1)中的结果。
  • (3)执行耗时的任务 中断处理应该尽可能快,因为如果一个处理程序是IRQF_DISABLED类型,他执行的时候会禁止所有本地中断线,而内核要响应大量服务和请求,中断上下文占用CPU时间太长会严重影响系统功能。中断处理程序的任务尽可能放在中断下半部执行。
  • (4)访问用户空间的虚拟地址。因为中断运行在内核空间。

【中断】中断上下文、进程上下文相关推荐

  1. 进程上下文与中断上下文

    最近学习驱动程序中总是发现在某些资料或书籍中提到进程上下文和中断上下文,但是又都没有讲解什么是上下文:因此笔者查阅资料补充了一下所谓的Linux上下文知识.(注:以下知识度娘而来) 上下文(conte ...

  2. 进程上下文、中断上下文及原子上下文

    谈论进程上下文 .中断上下文 . 原子上下文之前,有必要讨论下两个概念: a -- 上下文 上下文是从英文context翻译过来,指的是一种环境.相对于进程而言,就是进程执行时的环境: 具体来说就是各 ...

  3. 嵌入式之linux用户空间与内核空间,进程上下文与中断上下文

    文章目录 前言 用户空间与内核空间 内核态与用户态 进程上下文和中断上下文 上下文 原子 进程上下文 中断上下文 进程上下文VS中断上下文 原子上下文 前言 之前在学习嵌入式linux系统的时候,一直 ...

  4. Linux中断与进程切换,结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程...

    @ 实验环境 OS Linux cj-virtual-machine 5.3.0-51-generic 虚拟机 QEMU 内核版本 5.3.4 调式方法 GDB PS:调试环境安装请看上一篇博客汇编级 ...

  5. 请问进程上下文是什么意思?

    请问进程上下文是什么意思? 回答者的答案集合: 1. 进程上下文一般在进程切换中提到,也就是当进程要切换时关于当前进程的寄存器内容以及内存页表的详细信息等等内容,一句话概括也就是关于描述进程的信息. ...

  6. 用户空间与内核空间,进程上下文与中断上下文[总结]

    用户空间与内核空间,进程上下文与中断上下文[总结] 最近有研究到zabbix监控,就得清楚cpu各个指标的含义, 1,简单回顾下cpu及计算机组成: 计算机五大部件: 运算器 控制器 存储器 输入/输 ...

  7. linux进程被中断打断,linux – 当中断处理程序被另一个中断中断时,中断上下文如何“恢复”?...

    我读了一些相关的帖子: You cannot sleep in an interrupt handler because interrupts do not have a backing proces ...

  8. CPU上下文切换(系统调用、进程上下文、线程上下文、中断上下文)

    CPU寄存器,与程序计数器(存储CPU正在执行的指令位置,或者即将执行的下一条指令的位置)共同组成CPU上下文. CPU上下文切换指的是:把前一个任务的CPU上下文保存起来,然后加载新任务的上下文到这 ...

  9. 进程上下文与中断上下文的理解

    一.什么是内核态和用户态 内核态:在内核空间执行,通常是驱动程序,中断相关程序,内核调度程序,内存管理及其操作程序. 用户态:用户程序运行空间. 二.什么是进程上下文与中断上下文 1.进程上下文: ( ...

最新文章

  1. mysql删除表中的唯一索引吗_Mysql 使用sql删除同表中重复数据并加唯一索引
  2. mysql auto_increment建表_在mysql表中创建一个ID auto_increment(在事实之后)
  3. 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
  4. java中的工厂模式
  5. 使用SeekBar组件调节屏幕亮度
  6. 浅析php中的stdClass
  7. 数据链路层介质访问控制——信道划分、随机访问和轮询访问
  8. Python sqrt() 函数
  9. js 树形json转以叶子结点为基准的扁平结构
  10. LeetCode 1131. 绝对值表达式的最大值(数学 绝对值展开)
  11. Android异常总结---E/AndroidRuntime(23439): Caused by: java.lang.IllegalArgumentException: column '_id' d
  12. python中map和filter区别_Python中map、filter和reduce的使用总结
  13. 【软考】(五)网络互联设备
  14. 433.最小基因变化
  15. 安卓24:Android关于日期和时间的几个相关控件DatePicker、TimePicker等
  16. 掌握一门计算机语言需要多长时间,学习一门语言需要多长时间?科学告诉你
  17. 二进制数与十六进制数之间如何互相转换
  18. 开课吧T31项目第6天
  19. LINUX QT移植到ARM (zynq平台 qt5.4.1)
  20. 黑暗堵神传服务器维护是什么意思,重要公告 | 6月24日5点-12点停服维护

热门文章

  1. intellij IDEA ---转载
  2. 微信网页分享获取token
  3. 计算机英语阅卷图片,标准『曝光』!英语阅卷组是这样给分的!
  4. python爬取豆瓣《狂暴巨兽》评分影评,matplotlib和wordcloud制作评分图和词云图
  5. 天天乐学计算机试题,天天乐学选择题(共1919小题)-有答案及解释.docx
  6. cv.putText()函数几种字体试验
  7. Word 中设置图、表、公式、代码要与正文之间行间距
  8. Android实现公共公钥加密私钥解密(可分段加密分段解密)
  9. mac iphone照片_如何在iPhone,iPad和Mac上禁用自动播放视频和实时照片
  10. 公司职工网络舆情管理办法