首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内核硬中断中断的原理实现

linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...(4)软中断指令 int是软中断指令。 中断向量表是中断中断处理函数地址的对应表。 int n -- 触发软中断n。相应的中断处理函数的地址为:中断向量表地址 + 4 * n。...(5)硬中断中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断中断是由中断控制器提供的,软中断中断由指令直接指出,无需使用中断控制器。...在ksoftirqd内核线程 c. 在那些显示检查执行待处理的软中断的代码,如网络子系统 而不管是用什么方法唤起,软中断都要在do_softirq()执行。

22.4K21

Linux中断机制:硬件处理,初始化中断处理

linux可以通过/proc/interrupts查看当前系统中所有中断的统计信息,在/proc/irq/xxx(中断)下面,可以看到该中断的详细信息。...对应I/O APIClocal APIC的组合,其连接方式见下图 ? 针对X86中断控制器硬件linux对这些硬件的初始化,在《interrupt in linux》中有很详细的描述。...初始化 相关概念关键数据结构 1、 irq:在当前系统全局唯一,对应内核数据结构struct irq_desc,每个外设的中断有一个irq(体系结构预留的中断,是没有对应的irq_desc结构...irq的),该irq在该中断的生命周期内都不会改变,且中断中断处理函数关联;内核使用一个bitmap allocated_irqs来标识当前系统已经分配的irq;irq的管理与底层中断设备配置无关...2、ISA irqs,对这些中断,在初始化过程已经完成了irq_desc、vector_irq、以及IDT对应entry的分配设置,同时可以发现ISA中断,在初始化的时候都被设置为运行在0CPU

8K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    x86中断中断虚拟化

    ,也同时加深自己的理解,中断中断虚拟机实在太绕了,直接看代码那就是看天书,先掌握原理设计再看代码会好一点,争取后面再写写细节代码分析,一步一步来搞定它。...首先BIOS启动时发现中断控制器,把收集到的中断控制器的信息放在ACPI表,操作系统起来后就知道有那些中断控制器,中断控制器CPU/外设之间连接关系是怎么样的。...中断虚拟化有点复杂,guest也是可能mask/unmask中断的,guest也有不可mask的中断,guest的两个虚拟CPU之间也要发IPI中断,一个虚拟CPU发送中断时exit出来,把真正的中断写到目标虚拟...Virtual-Interrupt Delivery virtual-APIC page每个位置就代表着硬件LAPIC的寄存器,把中断写到virtual-APIC page中一个位置中断就自动投递给虚拟...硬件根据写的信息得进行中断逻辑处理,得出要投递的中断,写到virtual-APIC page,目标虚拟CPU在guest模式每个指令前都要检查一下outstanding notification,如果

    2.4K10

    Linux虚拟内存缺页中断

    Linux虚拟内存地址空间 为了防止不同进程同一时刻在物理内存运行而对物理内存的争夺践踏,采用了虚拟内存。 虚拟内存技术使得不同进程在运行过程,它所看到的是自己独自占有了当前系统的4G内存。...事实上,在每个进程创建加载时,内核只是为进程“创建”了虚拟内存的布局,具体就是初始化进程控制表内存相关的链表,实际上并不立即就把虚拟内存对应位置的程序数据代码(比如.text .data段)拷贝到物理内存...操作系统的缺页中断 malloc()mmap()等内存分配函数,在分配时只是建立了进程虚拟地址空间,并没有分配虚拟内存对应的物理内存。...缺页中断:在请求分页系统,可以通过查询页表的状态位来确定所要访问的页面是否存在于内存。...,由硬件所产生的一种特殊的中断,因此,与一般的中断存在区别: 1、在指令执行期间产生处理缺页中断信号 2、一条指令在执行期间,可能产生多次缺页中断 3、缺页中断返回是,执行产生中断的一条指令,而一般的中断返回是

    6.1K10

    Linux内核的软中断、tasklet工作队列具体解释

    引言 软中断、tasklet工作队列并非Linux内核中一直存在的机制,而是由更早版本号的内核的“下半部”(bottom half)演变而来。 下半部的机制实际上包含五种,但2.6版本号的内核。...将其放在中断处理程序运行。 假设一个任务硬件相关,将其放在中断处理程序运行。 假设一个任务要保证不被其它中断(特别是同样的中断)打断,将其放在中断处理程序运行。...软中断运行函数 do_softirq-->__do_softirq 运行软中断处理函数__do_softirq前首先要满足两个条件: (1)不在中断(硬中断、软中断NMI) 。...在工作队列中断/tasklet作出选择很easy。可使用以下规则: – 假设推后运行的任务须要睡眠,那么仅仅能选择工作队列。...详细流程图例如以下所看到的: ---- 是否处于中断Linux是通过preempt_count来判断的,详细例如以下: 在linux系统的进程数据结构里,有这么一个数据结构: #define

    2.1K30

    Linux内核22-软中断tasklet

    这对于时间苛刻的应用来说,这是一个很重要的属性,尤其是那些要求中断请求必须在毫秒级别响应的应用。 Linux2.6内核使用两种手段满足这项挑战:软中断tasklet,还有工作队列。...软中断tasklet这两个术语是息息相关的,因为tasklet是基于软中断实现的。事实上,出现在内核源代码的软中断概念有时候指的就是这两个术语的统称。...2 软中断 Linux2.6内核,软中断的数量比较少。对于多数目的,这些tasklet足够了。因为不需要考虑重入,所以简单易用。...事实上,只使用了6类软中断,如下表所示: 表4-9 Linux2.6使用的软中断中断 优先级 描述 HI_SOFTIRQ 0 处理高优先级的tasklet TIMER_SOFTIRQ 1 定时器中断...Tasklet高优先级的tasklet分别存储在 tasklet_vectasklet_hi_vec数组

    1.6K30

    Linux内核中断顶半部底半部的理解

    在大多数真实的系统,当中断到来时,要完成的工作往往并不会是短小的,它可能要进行较大量的耗时处理。   下图描述了Linux内核的中断处理机制。...为了在中断执行时间尽量短中断处理需完成的工作尽量大之间找到一个平衡点,Linux中断处理程序分解为两个半部:顶半部底半部。 ?   ...尽管顶半部、底半部的结合能够善系统的响应能力,但是,僵化地认为Linux设备驱动中断处理一定要分两个半部则是不对的。如果中断要处理的工作本身很少,则完全可以直接在顶半部全部完成。   ...其他操作系统中断的处理也采用了类似于 Linux的方法,真正的硬件中断服务程序都斥尽量短。...在Linux内核,用 softing_action结构体表征一个软中断,这个结构体包含软中断处理函数指针传递给该函数的参数。

    1.9K30

    Linux内核18-中断异常的嵌套处理

    比如,I/O设备引发一个中断,相应的内核态程序,首先,应该是保存内核态堆栈的CPU寄存器的内容;然后,执行中断处理程序;最后,再恢复这些寄存器的内容。...恢复执行嵌套内核控制路径的所有数据都存储在内核态堆栈,而该堆栈又和当前进程紧紧绑定在一起。通俗的说,中断处理程序相当于当前进程的资源,切换进程之前该中断资源必须释放掉。...异常相反,尽管内核代表当前进程处理这些中断,但是,I/O设备引发的中断当前进程没有直接数据引用的关系。事实上,给定一个中断,无法推断出是哪个进程在运行。...中断处理程序绝对不能包含页错误的操作,因为这会诱发进程切换。 Linux嵌套执行中断或异常处理程序的两个主要原因是: 为了提高可编程中断控制器设备控制器的吞吐量。...内核正在处理一个中断的时候,能够及时响应另一个中断。 实现没有中断优先级的模型。这可以简化内核代码并提高可移植性。 在多核系统,几个中断或异常处理程序可能会并发执行。

    2.1K20

    PCIeMSIMSI-X中断机制

    MSIMSI-X中断机制 在PCI总线,所有需要提交中断请求的设备,必须能够通过INTx引脚提交中断请求,而MSI机制是一个可选机制。...• Capability ID字段记载MSI Capability结构的ID,其值为0x05。在PCIe设备,每一个Capability结构都有唯一的ID。...在许多中断控制器,Message Data字段连续也意味着中断控制器需要为这个PCIe设备分配8个连续的中断向量。...有时在一个中断控制器,虽然具有8个以上的中断向量,但是很难保证这些中断向量是连续的。...在该结构,使用MSI-X Table存放该设备使用的所有Message AddressMessage Data字段,这个表格存放在该设备的BAR空间中,从而PCIe设备可以使用MSI-X机制时,中断向量可以并不连续

    2.1K30

    Linux内核17-硬件如何处理中断异常

    在上一篇文章,我们已经了解了中断异常的一些概念,对于中断异常也有了大概的理解。那么,系统硬件到底是如何处理中断异常的呢?本文我们就以常见的X86架构为例,看看中断异常的硬件工作原理。...当一个CPU想给另一个CPU发送中断时,它就会把目标CPU的私有APIC的标识符中断存储到自己APIC的中断命令寄存器(ICR)。...然后通过APIC总线发送给目标APIC,该APIC就会给自己的CPU发送一个相应的中断。 CPU间的中断(简称IPI)是多核系统一个重要组成部分。Linux有效地利用它们,在CPU之间传递消息。...下表是异常列表,列出了异常,名称,类型等等。更多信息请参考Intel技术手册。...其实对于Linux来说,只使用了supervisoruser两种特权等级。所以中断应该都是在supervisor特权等级下运行。

    2.1K10

    Linux 的各种栈:进程栈 线程栈 内核栈 中断

    介绍完栈的工作原理用途作用后,我们回归到 Linux 内核上来。...二、线程栈 从 Linux 内核的角度来说,其实它并没有线程的概念。Linux 把所有线程都当做进程来实现,它将线程进程不加区分的统一到了 task_struct 。...中断也是如此,当系统收到中断事件后,进行中断处理的时候,也需要中断栈来支持函数调用。由于系统中断的时候,系统当然是处于内核态的,所以中断栈是可以内核栈共享的。...X86 上中断栈就是独立于内核栈的;独立的中断栈所在内存空间的分配发生在 arch/x86/kernel/irq_32.c 的 irq_ctx_init() 函数 (如果是多处理器系统,那么每个处理器都会有一个独立的中断栈...而 ARM 上中断内核栈则是共享的;中断内核栈共享有一个负面因素,如果中断发生嵌套,可能会造成栈溢出,从而可能会破坏到内核栈的一些重要数据,所以栈空间有时候难免会捉襟见肘。

    2.9K50

    Linux 的各种栈:进程栈 线程栈 内核栈 中断

    介绍完栈的工作原理用途作用后,我们回归到 Linux 内核上来。...二、线程栈 从 Linux 内核的角度来说,其实它并没有线程的概念。Linux 把所有线程都当做进程来实现,它将线程进程不加区分的统一到了 task_struct 。...中断也是如此,当系统收到中断事件后,进行中断处理的时候,也需要中断栈来支持函数调用。由于系统中断的时候,系统当然是处于内核态的,所以中断栈是可以内核栈共享的。...X86 上中断栈就是独立于内核栈的;独立的中断栈所在内存空间的分配发生在 arch/x86/kernel/irq_32.c 的 irq_ctx_init() 函数 (如果是多处理器系统,那么每个处理器都会有一个独立的中断栈...而 ARM 上中断内核栈则是共享的;中断内核栈共享有一个负面因素,如果中断发生嵌套,可能会造成栈溢出,从而可能会破坏到内核栈的一些重要数据,所以栈空间有时候难免会捉襟见肘。

    3.4K20

    Linux驱动实践:中断处理的【工作队列】 workqueue 是什么鬼?

    大家好,我是道哥,今天我为大伙儿解说的技术知识点是:【中断处理的下半部分机制-工作队列】。...在刚开始介绍中断处理的时候,曾经贴出下面这张图: 图中描述了中断处理的下半部分都有哪些机制,以及如何根据实际的业务场景、限制条件来进行选择。...工作队列是什么 工作队列是Linux操作系统,进行中断下半部分处理的重要方式! 从名称上可以猜到:一个工作队列就好像业务层常用的消息队列一样,里面存放着很多的工作项等待着被处理。...创建驱动程序源文件 Makefile: $ cd tmp/linux-4.15/drivers $ mkdir my_driver_interrupt_wq $ touch my_driver_interrupt_wq.c...说明:驱动程序的初始化函数 myirq_init 被调用了,并且成功注册了 1 中断的处理程序。 此时,按一下键盘上的 ESC 键。

    1.9K40

    如何优雅地处理Java多线程中断异常

    前言 在Java多线程编程,正确处理线程中断异常对于确保程序的稳定性健壮性至关重要。本文将介绍一些关键的最佳实践,并提供示例代码来说明这些观点。 1....理解中断机制 Java中断机制允许一个线程通知另一个线程应该停止当前的操作。当一个线程被中断时,它的中断状态会被设置为true。...避免在finally块再次中断 不要在finally块调用Thread.currentThread().interrupt(),因为这会重新设置中断状态。...通过定期检查中断状态、清理资源、使用ExecutorServiceFuture等工具,我们可以提高程序的稳定性健壮性。记住,测试并发代码同样重要,以确保在多线程环境中程序能够正确运行。...希望这篇文章能帮助你更好地理解如何在Java优雅地处理线程中断异常。如果你有任何疑问或需要进一步的帮助,请随时留言。

    18210

    触摸与屏幕自动旋转调试

    图片在上一期的接线基础上,要接上触摸相关的几根线TP_RST为触摸复位脚,接GPIO2_C2,也就是tinkerboard2 40PIN排针的36脚TP_INT为触摸中断脚,接GPIO2_C3,也就是tinkerboard2...tp-size = ; //与源码中选择的配置相关 status = "okay"; };};通过配置GT911上电时中断脚复位脚电平时序...,可以切换其I2C地址为0x5d0x14的其中之一,这一设计是为了解决I2C冲突,这里可以任选一个touch-gpio是中断脚,reset-gpio是复位脚,配置硬件接线一致max-xmax-y分别是...在Linux下,鼠标,键盘,触摸这些都是INPUT设备,Android上层会监听所有的INPUT设备上报事件,如果有坐标上报事件,则会进行响应在Android,打开设置-系统-开发者选项 ( 如果找不到开发者选项...SENSOR_TYPE_ACCEL .type = SENSOR_TYPE_ACCEL, //这个值要在内核目录下include/linux/sensor-dev.h定义

    2.3K10
    领券