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

【深入理解Linux内核】| 中断屏蔽

Linux内核】二、中断屏蔽 1、中断屏蔽思想 中断屏蔽,正如其名,屏蔽掉CPU中断响应功能,解决并发引起竞态问题。 在进入临界区前屏蔽中断,这么做有什么好处,以及有什么弊端?...弊端在于: Linux内核中,除了系统进程调度依赖中断,还有一些异步I/O等众多操作都依赖中断,因此长时间屏蔽中断是很危险,会对系统造成严重影响,因此也要求临界区代码要简短。...关闭中断能够解决进程调度、中断引发竞态,但是这些都是单CPU内部,对于SMP对称多处理器,仍然不可避免会收到其他CPU中断。...因此,并不能解决SMP多CPU引发竞态 因此,单独使用中断屏蔽通常不是一种值得推荐避免竞态方法 2、Linux内核中断屏蔽实现 2.1 Linux内核提供API接口 关于中断屏蔽,Linux内核所提供接口如下...3、总结 该篇文章,主要了解以下几点: 中断屏蔽思想 中断屏蔽好处与不足 Linux内核提供中断屏蔽接口 中断屏蔽基本汇编实现

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

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上并行执行。...(4)软中断指令 int是软中断指令。 中断向量表是中断号和中断处理函数地址对应表。 int n -- 触发软中断n。相应中断处理函数地址为:中断向量表地址 + 4 * n。...(5)硬中断和软中断区别 软中断是执行中断指令产生,而硬中断是由外设引发。 硬中断中断号是由中断控制器提供,软中断中断号由指令直接指出,无需使用中断控制器。

21.6K21

Linux中断可以嵌套吗?

问答 问:Linux中断可以嵌套吗? 答:以前是可以嵌套,现在不可以!...历史 早前Linux内核版本,中断分为两种: 快中断,申请时候带IRQF_DISABLED标记,在IRQ HANDLER里面不允许新中断进来; 慢中断,申请时候不带IRQF_DISABLED标记...老Linux内核中,如果一个中断服务程序不想被别的中断打断,我们能看到这样代码: request_irq(FLOPPY_IRQ, floppy_interrupt,\ - IRQF_DISABLED...也就是说,从这个commit开始,实际Linux已经不再支持中断嵌套, 也没有快慢中断概念了,IRQF_DISABLED标记也作废了。...Linux内核会在如下2个时候重新开启CPSR对IRQ响应: 从IRQ HANDLER返回中断底半部SOFTIRQ 从IRQ HANDLER返回一个线程上下文 从1大家可以看出,SOFTIRQ里面是可以响应中断

5.3K31

Linux系统中断硬件框架

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...它们都有自己寄存器,可以进行相关设置:使能中断中断状态、中断类型等等。 中断控制器 各种中断源发出中断信号,汇聚到中断控制器。 可以在中断控制器中设置各个中断优先级。...中断控制器会向CPU发出中断信号,CPU可以读取中断控制器寄存器,判断当前处理是哪个中断。...CPU也有自己寄存器,可以设置它来使能/禁止中断,这是中断处理总开关。...把中断发给CPU 3.2.3 NVIC 多个中断源汇聚到NVIC,NVIC职责就是从多个中断源中取出优先级最高中断,向CPU发出中断信号。

4.5K40

Linux 中断处理浅析

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

7.4K80

currentHashMap公平,可中断响应,限制等待实例

Hashtable源码里都上了synchronized,导致效率低。 这时候这篇文章主角currentHashmap就出现了。...说到synchronized和Reentrantlock,就可以来聊一下他们两个区别? 他们都是io阻塞,线程运行时候,如果被另一个线程加锁,需要等另一个线程运行完,才能运行。...Reentrantlock是可以公平,可以中断响应,限制等待时间。 1、Lock()会一直等待获取到,可以设置公平。 公平指当可用时,会让等待时间最长线程获取。...非公平指随便分配线程获取。 2、LockInterruptibly()可以也会等待获取,但可以自行中断。...,为了更好地获取信息,让线程休息1s,可以看到公平几乎都是轮流获取: 非公平,线程则会重复获取: 场景二: /** * 中断响应实例 */ public static

36820

扒开 Linux 中断底裤之 workqueue

workqueue 是除了 softirq 和 tasklet 以外最常用下半部机制之一。workqueue 本质是把 work 交给一个内核线程,在进程上下文调度时候执行。...或者 pool_workqueue 指针 entry:用于添加到其他队列上 func:工作任务处理函数,在内核线程中回调 workqueue_struct : 工作集合。...workqueue 和 work 是一对多关系。内核中工作队列分为两种: bound:绑定处理器工作队列,每个 worker 创建内核线程绑定到特定 CPU 上运行。...数量 idle_list:处于 IDLE 状态 worker 添加到本链表 busy_hash:工作状态 worker 添加到本哈希表中 workers:worker_pool 管理 worker...经过上面两个阶段初始化,workqueue 子系统基本就已经将数据结构关联建立好了,当有 work 来进行调度时候,就可以进行处理了。

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

面试系列之-可中断不可中断公平非公平自旋(JAVA基础)

中断与不可中断 在Java中有两种,一种是内置synchronized,一种是显示Lock,其中Lock 是可中断,而 synchronized 则为不可中断。...所谓中断指的是锁在执行时可被中断,也就是在执行时可以接收interrupt通知,从而中断执行,不可中断问题是,当出现“异常”时,只能一直阻塞等待,别无其他办法,中断出现,就可以打破这一僵局...,它可以在等待一定时间之后,主动中断线程,以解决线程阻塞等待问题; 可中断是指抢占过程可以被中断,JUC显式(如ReentrantLock)是一个可中断。...不可中断是指抢占过程不可以被中断,如Javasynchronized内置就是一个不可中断中断抢占: 在JUC显式Lock接口中,有以下两个方法可以用于可中断抢占: (1)lockInterruptibly...异常; 公平与非公平 非公平是指多个线程获取顺序并不一定是其申请顺序,有可能后申请线程比先申请线程优先获取,抢成功次序不一定体现为FIFO(先进先出)顺序。

25820

Linux中断下半部机制对比

Linux有以下几种下半部机制: 软中断 tasklet workqueue threaded irq  中断服务程序一般都是在中断请求关闭条件下执行,以避免嵌套而使中断控制复杂化。...因此,Linux内核目标就是尽可能快处理完中断请求,尽其所能把更多处理向后推迟。...例如,假设一个数据块已经达到了网线,当中断控制器接受到这个中断请求信号时,Linux内核只是简单地标志数据到来了,然后让处理器恢复到它以前运行状态,其余处理稍后再进行(如把数据移入一个缓冲区,接受数据进程就可以在缓冲区找到数据...默认情况下,允许响应中断,并且不持有任何。如果需要,函数可以睡眠。需要注意是,尽管该函数运行在进程上下文中,但它不能访问用户空间,因为内核线程在用户空间没有相关内存映射。...linux中断线程化(threaded irq)和工作队列(work queue)异同 两者差异: 1、调度优先级不同: threaded irq handler所在进程(内核线程),调度类别是SCHED_FIFO

16810

linux内核缺页中断处理

7.当磁盘中断发生时,表明该页已经被装入,页表已经更新可以反映他位置,页框也标记位正常状态。 8.恢复发生缺页中断指令以前状态,程序计数器重新指向这条指令。...9.调度引发缺页中断进程,操作系统返回调用他汇编例程 10.该例程恢复寄存器和其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过。...linux内核对缺页异常处理流程很复杂,但是基本思想和上述流程差不多。...anon_vma成员是一 *个指向与各链表关联管理结构指针,该管理结构由一个表头和相关组成。...下面看linux基本处理流程: 内核处理缺页异常主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器值 * error_code,由硬件产生:

10.7K21

Linux中断虚拟化(一)

作者简介 王柏生 资深技术专家,先后就职于中科院软件所、红旗Linux和百度,现任百度主任架构师。在操作系统、虚拟化技术、分布式系统、云计算、自动驾驶等相关领域耕耘多年,有着丰富实践经验。...著有畅销《深度探索Linux操作系统》(2013年出版)。 谢广军 计算机专业博士,毕业于南开大学计算机系。资深技术专家,多年IT行业工作经验。...本文内容节选自《深度探索Linux虚拟化技术》,已获得机械工业出版社华章公司授权。...因此,在本章中,我们简单介绍硬件中断基本原理,然后结合中断基本原理讨论如何虚拟化中断芯片。...虚拟中断 在探讨Guest模式CPU处理中断前,我们首先回顾一下物理CPU是如何响应中断

6.3K30

Linux中断虚拟化(二)

作者简介 王柏生 资深技术专家,先后就职于中科院软件所、红旗Linux和百度,现任百度主任架构师。在操作系统、虚拟化技术、分布式系统、云计算、自动驾驶等相关领域耕耘多年,有着丰富实践经验。...著有畅销《深度探索Linux操作系统》(2013年出版)。 谢广军 计算机专业博士,毕业于南开大学计算机系。资深技术专家,多年IT行业工作经验。...本文内容节选自《深度探索Linux虚拟化技术》,已获得机械工业出版社华章公司授权。...,如果有中断请求,则运行对应中断服务程序,然后返回被中断计算任务继续执行。...第2部分是获取正在被CPU处理中断优先级中断优先级,通过这里,读者更能具体理解了8259A为什么需要这些寄存器记录中断状态。

5.8K10

Linux中断机制分析

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

8.6K91

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

我们重点要看肯定是中间 GIC 部分,GIC 将众多中断源分为 分为三类: ①、SPI(Shared Peripheral Interrupt),共享外设中断,该中断来自于外设,所有 Core 共享中断...中断源有很多,为了区分这些不同中断源肯定要给他们分配一个唯一 ID,这些 ID 就是中断 ID。...分发器收集所有的中断源,可以控制每个中断优先级,它总是将优先级最高中断事件发送到 CPU 接口端。分发器端要做主要 工作如下: ①、全局中断使能控制。 ②、控制每一个中断使能或者关闭。...③、设置每个中断优先级。 ④、设置每个中断目标处理器列表。 ⑤、设置每个外部中断触发模式:电平触发或边沿触发。 ⑥、设置每个中断属于组 0 还是组 1。...寄存器分布,不同东西寄存器开头不一样: GIC-v 3中断号规定如下,来源于ARM官方文档。 最主要区别就是增加了 LPI 这个中断类型,是基于消息中断

5.6K20

Linux BSP实战课(中断篇):中断控制器硬件实现

中断在系统中作用 中断机制在处理器中扮演着一个至关重要角色,它是处理器异步响应外围设备请求核心方式。...从技术深层次来看,中断是处理器在正常运行过程中,因外部或内部事件(如外围设备输入/输出请求、异常错误等)而暂时中断当前执行程序,转而执行特定中断服务程序(Interrupt Service Routine...系统调度是操作系统根据一定策略选择下一个要执行进程或线程过程。当中断发生时,处理器可能会根据中断类型和优先级来决定是否切换当前执行上下文,从而实现任务快速切换和调度。...SPI (Shared Peripheral Interrupt):公用外部设备中断,也定义为共享中断中断产生后,可以分发到某一个CPU上。比如按键触发一个中断,手机触摸屏触发中断。...LPI 始终是基于消息中断,它们配置保存在表中而不是寄存器。比如 PCIe MSI/MSI-x 中断

21810

LWN:把软中断放到更底层去!

然而 BKL 终结并不意味着内核没有其他有问题。...近来,已经有一些关注转向了软中断(software-interrupt lock)或“下半部”(bottom half lock),因为它可能会在实时系统上导致延迟。...Frederic Weisbecker 正在采取最新行动来减小这个影响范围,该方法就是基于移除 BKL 时所采取方法。...最初,Linux 内核是在单处理器系统上开发 —— 当然可以理解,因为那时我们手头只有这种系统 —— 因此,代码在很大程度上基于这样假设:它在 CPU 上运行,完全不存在其他 CPU。...于是 BKL 最终需要被引入,才能让 Linux 能够运行在那些产业分析师向我们保证未来将会大行其道多处理器机器上。

18920
领券