翻看笔记发现之前的面试不会题目,搜索一下很有学问。

中断跟函数栈很像,都需要保存现场,然后恢复现场,那区别在哪里呢?对中断的理解,之前在听一个中断培训的时候,想到这个有意思的问题。

中断跟函数栈区别在于中断是不可预料的,所以发生中断时要全部保存当前现场,中断处理完恢复现场。而函数栈是可预料的,什么时候调用,从哪里调用都是已知的,那只需要保存必要的信息即可。

中断的概念:一个"中断"仅仅是一个信号,当硬件需要获得处理器对它的关注时,就可以发送这个信号。内核维护了一个中断信号线的注册表,该注册表类似于I/O端口的注册表。
上半部的功能是响应中断。下半部的功能是处理比较复杂的过程。下半部和上半部最大的区别是可中断,而上半部却不可中断。
上半部只是将下半部排到了它们所负责的设备中断的处理队列中去,然后就不做其它的处理了。上半部之所以快,是因为它是完全屏蔽中断的,如果它没有执行完,其他中断就不能及时地处理,只能等到这个中断处理程序执行完毕以后。所以要尽可能多的对设备产生的中断进行服务和处理,中断响应程序就一定要快。

经典网卡来举例,在linux内核中,当网卡一旦接受到数据,网卡会通过中断告诉内核处理数据,内核会在网卡中断处理函数(上半部)执行一些网卡硬件的必要设置,因为这是在中断响应后急切要干的事情。接着,内核调用对应的下半部函数来处理网卡接收到的数据,因为数据处理没必要在中断处理函数里面马上执行,可以将中断让出来做更紧迫的事情。

可以有三种方法来实现下半部:软中断、tasklet和等待队列。

  1. 软中断
    软中断一般很少用于实现下半部,但tasklet是通过软中断实现的,所以先介绍软中断。字面理解,软中断就是软件实现的异步中断,它的优先级比硬中断低,但比普通进程优先级高,同时,它和硬中断一样不能休眠。
    软中断是在编译时候静态分配的,要用软中断必须修改内核代码。
  2. tasklet
    上面的介绍看到,软中断实现下半部的方法很麻烦,一般是不会使用的。一般,我们使用tasklet——利用软中断实现的下半部机制。
    在介绍软中断索引号的时候,有两个用于实现tasklet的软中断索引号:HI_SOFTIRQ和TASKLET_SOFTIRQ。两个tasklet唯一的区别就是优先级的大小,一般使用TAKSLET_SOFTIRQ。
    通过软中断(tasklet也是软中断的一种实现形式)机制来实现中断下半部。使用软中断实现的优缺点很明显:
    优点:运行在软中断上下文,优先级比普通进程高,调度速度快。
    缺点:由于处于中断上下文,所以不能睡眠。
    也许有人会问,那软中断和tasklet有什么区别?
    个人理解,tasklet是基于软中断实现的,基本上和软中断相同。但有一点不一样,如果在多处理器的情况下,内核不能保证软中断在哪个处理器上运行(听起来像废话),所以,软中断之间需要考虑共享资源的保护。而在tasklet,内核可以保证,两个同类型(TASKLET_SOFTIRQ和HI_SOFTIRQ)的tasklet不能同时执行,那就说明,同类型tasklet之间,可以不考虑同类型tasklet之间的并发情况。
    一般的,优先考虑使用tasklet。
  3. 工作队列完全不同,它是靠内核线程实现的。
    简单来说,软中断和tasklet优先级较高,性能较好,调度快,但不能睡眠。而工作队列是内核的进程调度,相对来说较慢,但能睡眠。所以,如果你的下半部需要睡眠,那只能选择动作队列。否则最好用tasklet。

网卡中断理解

参考:从中断说起

从kernel层面将,事件产生有可能不是由硬件中断触发的,在一定情况下kernel的确会轮询,因为响应硬件中断是一个成本比较高的操作。
以网卡为例,当数据量很少的时候,每来一个数据包网卡都回产生一个中断,kernel响应这个中断,从网卡缓冲区中读出数据放进协议栈处理,当满足一定条件时,kernel回调用户代码,这里的"回调"一般情况下是指从一个kernel syscall中返回(在此之前用户代码一直处于block状态)。
当数据量很大时,每个包都产生一个中断就划不来了,此时kernel可以启动interrupt coalescing机制,让网卡做中断合并,也就是说来足够多的数据包或者等待一个timeout才会产生一个中断,kernel在响应中断时会把所有数据一起读出来处理,这样可以有效的降低中断次数。
当数据量更大时,网卡缓冲区里几乎总是有未处理的数据,此时kernel干脆会禁掉网卡的中断,切换到轮询处理的模式,说白了就是跑一个忙循环不停地读网卡缓冲区里的数据,这样综合开销更低

转载于:https://www.cnblogs.com/quantumplan/p/9251455.html

【面试】上中断和下中断相关推荐

  1. 中断方式下进行串口通讯的正确方法

    转载:http://bbs.ednchina.com/BLOG_ARTICLE_277752.HTM 中断方式下进行串口通讯的正确方法 一般普遍的把串口通讯分为查询方式和中断方式.查询方式比较容易理解 ...

  2. linux的ftp停不下来了,FTP上传时经常中断,怎么办? 在Linux终端中使用ftp时总是出现connection refuse......

    导航:网站首页 > FTP上传时经常中断,怎么办? 在Linux终端中使用ftp时总是出现connection refuse... FTP上传时经常中断,怎么办? 在Linux终端中使用ftp时 ...

  3. 串口中断和定时器中断_启士 | 蓝桥杯单片机教程12 中断与定时器 (上)

    这是 北航士谔书院 的第 949 篇推送 本文介绍中断(interrupt)的基本概念,并演示定时器中断.外部中断的使用方法.如果同学们对文章内容有疑问,或发现文中有任何不妥之处,请点击"阅 ...

  4. [原创]ACPI.sys,从Windows到Bios的桥梁(2):Windows应用程序响应主板上GPIO(SCI)设备中断 软件篇

    引言 在上一篇<ACPI.sys,从Windows到Bios的桥梁(2):Windows应用程序响应主板上GPIO(SCI)设备中断 硬件篇>只完成了2件事: 1.Bios接收GPIO S ...

  5. ASM:《X86汇编语言-从实模式到保护模式》第17章:保护模式下中断和异常的处理与抢占式多任务...

    ★PART1:中断和异常概述 1. 中断(Interrupt) 中断包括硬件中断和软中断.硬件中断是由外围设备发出的中断信号引发的,以请求处理器提供服务.当I/O接口发出中断请求的时候,会被像8259 ...

  6. R语言ggplot2可视化:自定义设置X轴上的时间间隔(中断、以年为单位),使用scale_x_date()自定义设置坐标轴间隔和标签、添加标题、副标题、题注信息

    R语言ggplot2可视化:自定义设置X轴上的时间间隔(中断.以年为单位),使用scale_x_date()自定义设置坐标轴间隔和标签(Time Series Plot For a Yearly Ti ...

  7. 保护模式下中断或异常示意图

    保护模式下中断或异常示意图 转载于:https://www.cnblogs.com/LoveFishC/archive/2012/08/24/3845741.html

  8. STM32那点事(3)_中断(下)

    上节主要讲述了STM32 的中断基础知识以及一般配置过程.外部中断与其他模块中断相对要复杂一点.外部中断一般都是由GPIO触发,是在整个系统中需要经常用到. 介绍 STM32F4 有多达23个中断,每 ...

  9. php - 基于 webuploader 视频大文件分片分段上传,支持断点续传(刷新、关闭页面、重新上传、网络中断等情况)带进度条,前端后端都有示例源码详细教程

    效果图 文件上传前先检测该文件是否已上传,如果已上传提示 "文件已存在",如果未上传则直接上传. 基于 php+webuploader的大文件分片上传,带进度条,支持断点续传(刷新 ...

最新文章

  1. 六 Lync Server 2013 部署指南-OWA服务器部署
  2. java 删除文件失败_java 文件删除失败(被进程占用)
  3. 什么是计算机网络中的主机?
  4. 一个记录最近搜索历史的LRU实现
  5. 五轮面试,阿里offer到手!!
  6. 电容屏和电阻屏的区别
  7. Xvid 进行视频编码
  8. Camera 图像处理原理分析- 色彩篇 二
  9. Pandas的read_excel()函数读取excel时遇到身份证含空值(pandas识别nan为float类型)自动变成科学计数法的解决办法
  10. android 阻尼动画,Android阻尼效果 | 自定义进阶之实现MIUI的拖动视差效果
  11. excel中NORM.DIST 的python实现
  12. [论]【DSTGCN】Dynamic SpatiotemporalGraph Convolutional Neural Networks for Traffic Data Imputation
  13. 《人性的弱点》(四)上
  14. feishu-飞书api
  15. android html字体大小,android Html.fromHtml font 标签支持设置字体大小和颜色
  16. win10.10 激活
  17. 工业自动化新引擎:工业机器人引领制造业转型升级
  18. 火了一年的元宇宙消停了?展望 2022年 元宇宙的十大发展趋势
  19. 程序员的周末可以这样过
  20. [随笔]_csdn博客解封,谢谢客服

热门文章

  1. Python:高级主题之(属性取值和赋值过程、属性描述符、装饰器)
  2. 操作系统编写之引导扇区
  3. 《LeetCode力扣练习》剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java
  4. 校招c语言面试题目及答案,C/C++学习之路(一)校招后端面试题及答案(作者回忆版)...
  5. redis 管理工具_Redis的跨平台GUI 桌面管理工具
  6. linux系统文件保存后恢复,linux系统文件误删恢复
  7. 我的理想计算机应用作文,我的理想当编程师作文400字
  8. php内存缓存设计,求选择哪个缓存设计好一些?
  9. linux 定位 踩内存_运维必备的问题定位工具及案例分析
  10. dnf跨一服务器修复,DNF跨区服务器炸裂:一阶段史诗回档,官方补偿何在