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

Linux中断处理

中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux中断处理过程。...链表中断处理函数。...如果在处理中断过程又发生了相同中断(irq_desc_t 结构 status 字段被设置了 IRQ_INPROGRESS 标志),那么就继续对中断进行处理。...一般中断 上半部 只会做一些最基础操作(比如从网卡复制数据到缓存),然后对要执行中断 下半部 进行标识,标识完调用 do_softirq() 函数进行处理。...softirq机制 中断下半部 由 softirq(软中断) 机制来实现,在Linux内核,有一个名为 softirq_vec 数组,如下: static struct softirq_action

6.5K20

Linux中断 - IDT

[toc] 如何设置IDT IDT 中断描述符表定义 中断描述符表简单来说说是定义了发生中断/异常时,CPU按这张表定义行为来处理对应中断/异常。...中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应中断描述符,再根据中断描述符记录信息来作权限判断,运行级别转换,最终调用相应中断处理程序; 这里涉及到Linux...IDT 中断描述符表本身存储 IDT 中断描述符表物理地址存储在IDTR寄存器,这个寄存器存储了IDT基地址和长度。...传统系统调用相关 IDT 设置 Linux系统启动过程内核压解后最终都调用到start_kernel, 在这里会调用trap_init, 然后又会调用idt_setup_traps: void...硬件中断相关IDT初始化也是在Linux启动时完成,在start_kernel通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int

6.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

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

linux为了实现这个特点,当中断发生时候,硬中断处理那些短时间就可以完成工作,而将那些处理事件比较长工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套,但是没有优先级概念,也就是说任何一个新中断都可以打断正在执行中断,但同种中断除外。软中断不能嵌套,但相同类型中断可以在不同CPU上并行执行。...__softirq_pending是等待处理中断位图,通过设置此变量即可告诉内核该执行哪些软中断。...在ksoftirqd内核线程 c. 在那些显示检查和执行待处理中断代码,如网络子系统 而不管是用什么方法唤起,软中断都要在do_softirq()执行。...如果有待处理中断,do_softirq()会循环遍历每一个,调用它们相应处理程序。 在中断处理程序触发软中断是最常见形式。

21.3K21

Linux中断可以嵌套吗?

问答 问:Linux中断可以嵌套吗? 答:以前是可以嵌套,现在不可以!...历史 早前Linux内核版本,中断分为两种: 快中断,申请时候带IRQF_DISABLED标记,在IRQ HANDLER里面不允许新中断进来; 慢中断,申请时候不带IRQF_DISABLED标记...老Linux内核,如果一个中断服务程序不想被别的中断打断,我们能看到这样代码: request_irq(FLOPPY_IRQ, floppy_interrupt,\ - IRQF_DISABLED..., "floppy", NULL) 现在 在2010年如下commit,IRQF_DISABLED被作废了: https://git.kernel.org/pub/scm/linux/kernel/...也就是说,从这个commit开始,实际Linux已经不再支持中断嵌套, 也没有快慢中断概念了,IRQF_DISABLED标记也作废了。

5.2K31

Linux系统中断硬件框架

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...它们都有自己寄存器,可以进行相关设置:使能中断中断状态、中断类型等等。 中断控制器 各种中断源发出中断信号,汇聚到中断控制器。 可以在中断控制器设置各个中断优先级。...用来选择某个外部中断EXTIx中断源,示例如下: 注意:从上图可知,EXTI0只能从PA0、……、PG0选择一个,这也意味着PA0、……、PG0只有一个引脚可以用于中断。...把中断发给CPU 3.2.3 NVIC 多个中断源汇聚到NVIC,NVIC职责就是从多个中断取出优先级最高中断,向CPU发出中断信号。...查看中断状态、清中断 3.3.3 GIC ARM体系结构定义了通用中断控制器(GIC),该控制器包括一组用于管理单核或多核系统中断硬件资源。

4.4K40

Linux 中断处理浅析

最近在研究异步消息处理, 突然想起linux内核中断处理, 里面由始至终都贯穿着”重要事马上做, 不重要事推后做”异步处理思想....将中断号压入栈; (不同中断中断对应不同中断服务程序入口) 2....中断处理这几个阶段不能调用可能导致睡眠函数(包括分配内存); 对于第一个问题, 较新linux内核增加了ksoftirqd内核线程, 如果持续处理softirq超过一定数量, 则结束中断处理过程...据说在montavista(一种嵌入式实时linux), 将内核中断机制做了修改. (某些中断)中断处理过程被赋予了task结构, 能够被内核调度. 解决了上述两个问题....(montavista目标是实时性, 这样做法牺牲了一定整体性能.) 工作队列 linux基线版本内核在解决上述问题上, 提供了workqueue机制.

7.3K80

Java中断机制

在Java,用于终止一个正在运行线程,并非调用stop方法,而是自行设置一个标志位,在安全点检测标志位,决定是否退出,但也可能会因为线程被挂起,无法走到标志位。...因此,Java线程提供了中断机制,Thread类提供了中断线程执行调用方法:interrupt,用于中断因线程挂起等待,调用interrupt方法后,线程会被唤醒,待下次cpu调度就会继续执行中断代码...xxl-job提供取消任务操作,而任何运行线程,都只能利用中断机制去结束线程任务,所以我们想要任务支持被取消,那么在写定时任务时,一定要考虑清楚,是不是应该捕获InterruptedException...任务依然在运行...... 因此,在实际开发,如果我们开发Job也是如此,将会导致Job无法被中断取消,直至Job执行完成或者重启。在开发Job时,应当合理考虑是否要捕获中断异常。...“如果被中断线程,当前是调用Object#wait、Thread#join、Thread#sleep方法,将收到InterruptedException,并且会清除中断标志”,案例代码正好符合这点

96430

扒开 Linux 中断底裤之 workqueue

把 work 添加到一个链表 worklist ,然后由一个内核线程 worker 遍历链表,串行地执行挂入 worklist 所有 work。...如果 worklist 没有 work,那么内核线程 worker 就会变成 IDLE 状态;如果有 work,则执行 work 回调函数。...workqueue 和 work 是一对多关系。内核工作队列分为两种: bound:绑定处理器工作队列,每个 worker 创建内核线程绑定到特定 CPU 上运行。...list:用于将工作队列添加到全局链表 workqueues maydays:rescue状态下 pool_workqueue 添加到本链表 rescuer:rescuer 内核线程,用于处理内存紧张时创建工作线程失败情况...:用于添加到 workqueue 链表 worker_pool: 工人集合。

1.9K51

linux 中断机制《Rice linux 学习笔记》

这篇文章以按键为例子讲解linux中断原理,中断架构,中断实现。 在我们开发,检测按键是否触发,无非就两种方法—轮询和中断。作者认为两种方法最大区别就是CPU利用率。...Linux中断原理: 中断:处理器异常一种,它是一种特殊电信号,用硬件发给处理器,处理器接收到中断后,会马上向操作系统反映此信号到来,然后就由操作系统负责处理这些新到来数据。...Linux中断相关函数: 1、注册中断函数: 中断处理函数结构: typedef irqreturn_t (*irq_handler_t)(int, void*); 注册中断函数:int request_irq...dev:与request_irq参数dev必须一致,将request_irq指定dev传递给这个参数; Linux中断处理分析: 第一种方式:应用层读,不管什么情况下,都会返回。...第二种方式:应用层读,只有按键按下时候,才会返回。 Linux中断实现: 这里例子采用等待队列方式实现(也就是上述第二种方法)。

4.7K10

linux内核缺页中断处理

缺页中断处理一般流程: 1.硬件陷入内核,在堆栈中保存程序计数器,大多数当前指令各种状态信息保存在特殊cpu寄存器。 2.启动一个汇编例程保存通用寄存器和其他易丢失信息,以免被操作系统破坏。...7.当磁盘中断发生时,表明该页已经被装入,页表已经更新可以反映他位置,页框也标记位正常状态。 8.恢复发生缺页中断指令以前状态,程序计数器重新指向这条指令。...9.调度引发缺页中断进程,操作系统返回调用他汇编例程 10.该例程恢复寄存器和其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过。...linux内核对缺页异常处理流程很复杂,但是基本思想和上述流程差不多。...下面看linux基本处理流程: 内核处理缺页异常主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器值 * error_code,由硬件产生:

10.6K21

Linux中断下半部机制对比

Linux有以下几种下半部机制: 软中断 tasklet workqueue threaded irq  中断服务程序一般都是在中断请求关闭条件下执行,以避免嵌套而使中断控制复杂化。...因此,Linux内核目标就是尽可能快处理完中断请求,尽其所能把更多处理向后推迟。...例如,假设一个数据块已经达到了网线,当中断控制器接受到这个中断请求信号时,Linux内核只是简单地标志数据到来了,然后让处理器恢复到它以前运行状态,其余处理稍后再进行(如把数据移入一个缓冲区,接受数据进程就可以在缓冲区找到数据...工作用定义work_struct结构表示: struct work_struct{ unsigned long pending; /* 这个工作正在等待处理吗?...中断线程(threaded_irq) 前面讲中断,它是外设中断处理必不可少一部分。

10610

Linux中断虚拟化(一)

著有畅销书《深度探索Linux操作系统》(2013年出版)。 谢广军 计算机专业博士,毕业于南开大学计算机系。资深技术专家,多年IT行业工作经验。...本文内容节选自《深度探索Linux虚拟化技术》,已获得机械工业出版社华章公司授权。...因此,在本章,我们简单介绍硬件中断基本原理,然后结合中断基本原理讨论如何虚拟化中断芯片。...中断芯片可以在用户空间中模拟,也可以在内核空间模拟,但是因为中断芯片需要密集地和Guest以及内核KVM模块交互,显然在内核空间模拟更合理,所以KVM在内核实现中断芯片模拟。...CPU将执行Guest系统IDT对应中断处理服务,图3-2为单核系统使用PIC中断芯片下虚拟中断过程。

6.2K30

Linux中断虚拟化(二)

当然是CPU操作系统。因此这一步,8259A将会检查收到中断请求是否被屏蔽。 4)在某一个时刻,可能有多个中断请求,或者是之前存在IRR中断并没有被处理,8259A积累了一些中断。...7)8259A收到CPU发来INTA信号后,将置位最高优先级中断在ISR(In-Service Register)对应位,并清空IRR对应位。...9)如果8259A设置为AEOI(Automatic End Of Interrupt)模式,那么8259A复位ISR对应bit,否则ISR对应bit一直保持到收到系统中断服务程序发来EOI...我们知道,中断服务程序保存在一个数组,数组每一项对应一个中断服务程序。...这个32、33就是所谓中断向量(vector)。换句话说,中断向量就是中断服务程序在IVT/IDT索引。

5.7K10

Linux中断机制分析

中断分析最近工作繁忙,没有时间总结内核相关一些东西。上次更新博客到了linux内核中断子系统。这次总结一下软中断,也就是softirq。之后还会总结一些tasklet、工作队列机制。...这样后果会造成有可能丢失外部中断。于是,linux内核设计出了一种架构,中断函数需要处理任务分为两部分,一部分在中断处理函数执行,这时系统关闭中断。...对于ARM架构CPU不存在中断嵌套调用软件中断问题,因为ARM架构CPU在处理硬件中断过程是关闭掉中断。...Linux内核就中断方面就必须考虑平衡这三个方面的问题。而下面我要分析__do_softirq函数就恰似在这三者之间打太极,游刃有余,面面俱到!...系统将唤醒一个软件中断处理内核进程,在内核进程处理pending软件中断。这里要注意,之前我们分析触发软件中断位置其实是中断上下文中,而在软中断内核线程实际已经是进程上下文。

8.6K91

Linux 中断子系统(二):GIC 中断控制器

GIC 是 ARM 公司给 Cortex-A/R 内核提供一个中断控制器,类似 Cortex-M 内核(STM32) NVIC。...我们重点要看肯定是中间 GIC 部分,GIC 将众多中断源分为 分为三类: ①、SPI(Shared Peripheral Interrupt),共享外设中断,该中断来自于外设,所有 Core 共享中断...GIC-v2每一个 CPU 最多支持 1020 个中断 ID,中断 ID 号为 ID0~ID1019。这 1020 个 ID 包 含了 PPI、SPI 和 SGI。...分发器收集所有的中断源,可以控制每个中断优先级,它总是将优先级最高中断事件发送到 CPU 接口端。分发器端要做主要 工作如下: ①、全局中断使能控制。 ②、控制每一个中断使能或者关闭。...③、设置每个中断优先级。 ④、设置每个中断目标处理器列表。 ⑤、设置每个外部中断触发模式:电平触发或边沿触发。 ⑥、设置每个中断属于组 0 还是组 1。

5.5K20

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

各种栈内存位置? 介绍完栈工作原理和用途作用后,我们回归到 Linux 内核上来。...,那我们看下 Linux 内核是怎么体现上面内存布局。...二、线程栈 从 Linux 内核角度来说,其实它并没有线程概念。Linux 把所有线程都当做进程来实现,它将线程和进程不加区分统一到了 task_struct 。...中断也是如此,当系统收到中断事件后,进行中断处理时候,也需要中断栈来支持函数调用。由于系统中断时候,系统当然是处于内核态,所以中断栈是可以和内核栈共享。...X86 上中断栈就是独立于内核栈;独立中断栈所在内存空间分配发生在 arch/x86/kernel/irq_32.c irq_ctx_init() 函数 (如果是多处理器系统,那么每个处理器都会有一个独立中断

2.8K50
领券