0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析硬中断和软中断的区别

Q4MP_gh_c472c21 来源:未知 作者:胡薇 2018-10-30 14:34 次阅读

从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器

如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事,

跳到中断处理程序的入口点,进行中断处理。

硬中断

由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。

硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。

处理中断的驱动是需要运行在CPU上的,因此,当中断产生的时候,CPU会中断当前正在运行的任务,来处理中断。在有多核心的系统上,一个中断通常只能中断一颗CPU(也有一种特殊的情况,就是在大型主机上是有硬件通道的,它可以在没有主CPU的支持下,可以同时处理多个中断。)。

硬中断可以直接中断CPU。它会引起内核中相关的代码被触发。对于那些需要花费一些时间去处理的进程,中断代码本身也可以被其他的硬中断中断。

对于时钟中断,内核调度代码会将当前正在运行的进程挂起,从而让其他的进程来运行。它的存在是为了让调度代码(或称为调度器)可以调度多任务。

软中断

为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。

软中断的处理非常像硬中断。然而,它们仅仅是由当前正在运行的进程所产生的。

通常,软中断是一些对I/O的请求。这些请求会调用内核中可以调度I/O发生的程序。对于某些设备,I/O请求需要被立即处理,而磁盘I/O请求通常可以排队并且可以稍后处理。根据I/O模型的不同,进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程去运行。I/O可以在进程之间产生并且调度过程通常和磁盘I/O的方式是相同。

软中断仅与内核相联系。而内核主要负责对需要运行的任何其他的进程进行调度。一些内核允许设备驱动的一些部分存在于用户空间,并且当需要的时候内核也会调度这个进程去运行。

软中断并不会直接中断CPU。也只有当前正在运行的代码(或进程)才会产生软中断。这种中断是一种需要内核为正在运行的进程去做一些事情(通常为I/O)的请求。有一个特殊的软中断是Yield调用,它的作用是请求内核调度器去查看是否有一些其他的进程可以运行。

中断嵌套

Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。

软中断指令

int是软中断指令。

中断向量表是中断号和中断处理函数地址的对应表。

int n - 触发软中断n。相应的中断处理函数的地址为:中断向量表地址 + 4 * n。

硬中断和软中断的区别

软中断是执行中断指令产生的,而硬中断是由外设引发的。

硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。

硬中断是可屏蔽的,软中断不可屏蔽。

硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。

软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。

开关

(1) 硬中断的开关

简单禁止和激活当前处理器上的本地中断:

local_irq_disable();

local_irq_enable();

保存本地中断系统状态下的禁止和激活:

unsigned long flags;

local_irq_save(flags);

local_irq_restore(flags);

(2) 软中断的开关

禁止下半部,如softirq、tasklet和workqueue等:

local_bh_disable();

local_bh_enable();

需要注意的是,禁止下半部时仍然可以被硬中断抢占。

(3) 判断中断状态

#define in_interrupt() (irq_count())// 是否处于中断状态(硬中断或软中断)

#define in_irq()(hardirq_count()) // 是否处于硬中断

#define in_softirq() (softirq_count()) // 是否处于软中断

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 总线
    +关注

    关注

    10

    文章

    2877

    浏览量

    88044
  • 中断控制器
    +关注

    关注

    0

    文章

    59

    浏览量

    9451

原文标题:硬中断与软中断是怎么回事?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    NXP的ARM7带ucos中中断中断响应详细分析

    NXP的ARM7带ucos中中断中断响应详细分析一.带UCOS系统的中断响应过程 11.
    发表于 12-02 17:32

    请问一下中断的问题如何解决

    我想让程序运行到某一行时产生一个中断,是不是用中断的方式及调用EXTI_GenerateSWInterrupt()这个函数,还有什么其他的方法没有。如果只用
    发表于 05-25 09:51

    什么是中断以及中断

    同步中断,是指CPU内部出现的中断,即在CPU执行特定指令时出现的非法情况,因此只有在一条指令执行后才会发出中断,不可能在指令执行期间发生异常。
    发表于 01-10 07:26

    面向嵌入式Linux系统的中断设计与实现

    本文在分析标准Linux 内核的中断机制的演化以及实现原理的基础上,提出并实现了一个面前嵌入式Linux 系统的中断技术。该技术为嵌入式系统开发提供一个统一的
    发表于 08-03 11:20 16次下载

    液晶屏和屏的区别

    液晶屏和屏的区别:现在的液晶电视市场中流传着 “屏”和“屏”的说法,通常来说,屏是指I
    发表于 07-16 11:48 6482次阅读
    液晶<b class='flag-5'>硬</b>屏和<b class='flag-5'>软</b>屏的<b class='flag-5'>区别</b>

    中断程序设计

    实 验 五  中断程序设计 一、实验目的    通过对中断程序的编写和调试,掌握IBM-PC系列机的
    发表于 09-28 23:26 2728次阅读
    <b class='flag-5'>软</b><b class='flag-5'>中断</b>程序设计

    压缩与压缩的区别

    压缩与压缩的区别 目前市面上流行的硬盘录象卡主要有压缩硬盘录象卡与压缩硬盘录象卡两大类。 1)
    发表于 12-29 14:00 2076次阅读

    Linux 2.4.x内核中断机制

    情况下,中断和信号有些类似,同时,中断又是和中断相对应的,
    发表于 11-02 11:01 0次下载

    探究中断中断的原理和区别

    从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。
    的头像 发表于 01-17 09:38 1.1w次阅读
    探究<b class='flag-5'>硬</b><b class='flag-5'>中断</b>和<b class='flag-5'>软</b><b class='flag-5'>中断</b>的原理和<b class='flag-5'>区别</b>

    你了解中断中断区别

    从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。
    发表于 05-05 11:48 1.8w次阅读

    微机原理——8086中断类型以及中断向量表、中断响应、中断返回

    这里写目录标题先验知识回顾控制寄存器回顾1、8086中断类型1、外部可屏蔽中断2、外部不可屏蔽中断3、除法错中断4、单步中断5、断点
    发表于 11-24 16:51 16次下载
    微机原理——8086<b class='flag-5'>中断</b>类型以及<b class='flag-5'>中断</b>向量表、<b class='flag-5'>中断</b>响应、<b class='flag-5'>中断</b>返回

    中断中断是怎么回事?

    立即停止自己正在做的事, 跳到中断处理程序的入口点,进行中断处理。 中断 由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数
    发表于 02-10 12:02 0次下载
    <b class='flag-5'>硬</b><b class='flag-5'>中断</b>与<b class='flag-5'>软</b><b class='flag-5'>中断</b>是怎么回事?

    中断中断介绍

    中断是由外部事件引起的因此具有随机性和突发性;中断是否可以嵌套的,是否有优先级(由硬件设计体系决定)。 •
    的头像 发表于 11-07 17:02 863次阅读

    什么是LInux 操作系统中断

    进程来持有CPU进行需要的操作! 有了中断之后,提升了操作系统的性能!可以异步并行处理很多任务! 中断(80中断) 由CPU产生的;CPU检查到程序代码段发生异常会切换到内核态;
    的头像 发表于 11-10 11:29 617次阅读
    什么是LInux 操作系统<b class='flag-5'>中断</b>

    LInux 操作系统中断介绍

    进程来持有CPU进行需要的操作! 有了中断之后,提升了操作系统的性能!可以异步并行处理很多任务! 中断(80中断) 由CPU产生的;CPU检查到程序代码段发生异常会切换到内核态;
    的头像 发表于 11-13 11:36 895次阅读
    LInux 操作系统<b class='flag-5'>中断</b>介绍