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

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

来源: CSDN | phenix_lord专栏 硬件处理 最近解决一个关于Linux中断问题,把相关机制整理了一遍,记录在此。...不同外部设备、不同体系结构、不同OS其中断实现机制都有差别,本文对应OS为linux3.4版本,外部设备为PCI设备、系统为X86。...对应I/O APIC和local APIC组合,其连接方式见下图 ? 针对X86中断控制器硬件和linux对这些硬件初始化,在《interrupt in linux》中有很详细描述。...内核关键数据结构和相关初始化 对X86 CPU,Linux内核使用全局idt_table来表达当前IDT,该变量定义在traps.c gate_desc idt_table[NR_VECTORS]...》 除了中断路由表,其它两种机制初始化(包括相关中断路由信息初始化)在《interrupt in linux》中有很详细描述。

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

Linux中断一网打尽(1) —— 中断及其初始化

[toc] Linux中断一网打尽 —— 中断及其初始化 前情提要 通过本文您可以了解到如下内容: Linux 中断是什么,如何分类,能干什么? Linux 中断在计算机启动各阶段是如何初始化?...ioapic.jpg 中断初始化 Linux 启动流程 中断初始化是穿插在Linux本身启动和初始化过程中,因此我们在这里简要说一下Linux本身初始化。...中断第一次初始化 实模式下初始化 上面那张Linux启动流程图如果你仔细看的话会发现在BIOS程序加载运行时,在实模式下也有一个BIOS中断向量表,这个中断向量表提供了一些类似于BIOS系统调用一样方法...比如Linux初始化时需要获取物理内存详情,就 是调用了BIOS相应中断来获取。见下图: ?...选区_035.png 中断第二次初始化 在进入到保护模式后,会全新初始化一个空中断描述符表 IDT, 供 kernel 使用; Linux Kernel提供256个大小中断描述符表 #define

1.5K21

Linux内核19-中断描述符表IDT初始化

至此,我们已经理解了X86架构如何在硬件层面如何处理中断和异常,那么接下来,我们看看Linux内核管理这些中断和异常。 同所有的设备一样,我们在使能硬件之前,必须先初始化其相关数据结构。...而Linux使用中断描述符表IDT记录管理所有的中断和异常。那么,首先,Linux内核应该把IDT起始地址写入idtr寄存器,然后初始化所有的表项。这一步在初始化系统时完成。...Linux分类有些不同,它们如下所示: 中断门 和Intel中断门相同。所有的用户进程不能访问(该门DPL设为0)。所有Linux中断处理程序都是通过中断门激活,也就是说只能在内核态访问。...一旦Linux启动,IDT会被搬运到RAM受保护区域并被第二次初始化,因为Linux不会使用任何BIOS程序。 IDT结构被存储在idt_table表中,包含256项。...完成这次IDT表初始化之后,内核还会进行第二次初始化,用真正trap或中断处理函数代替刚才null函数。一旦这两步初始化都完成,IDT表就包含具体中断、陷阱和系统门,用以控制每个中断请求。

85310

Linux中断 - IDT

中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应中断描述符,再根据中断描述符记录信息来作权限判断,运行级别转换,最终调用相应中断处理程序; 这里涉及到Linux...看,就是这么简单~~~ gate_desc多种初始化方法 因为gate_desc是通过ida_dat填充,所以这里关键是idt_data初始化,我们详细看一下: /* Interrupt...idt3.jpg 硬件中断实现 硬件中断IDT初始化和调用流程 这里我们不讲解具体代码细节,只关注流程 。...硬件中断相关IDT初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int...用来初始化硬件相关调用门,其对应中断门处理函数在irq_entries_start中定义,它位于arch/x86/entry/entry_64.S中: .align 8 ENTRY(irq_entries_start

6.5K10

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

如果中断线是激活中断控制器就把电信号发送给处理器某个特定引脚。处理器于是立即停止自己正在做事,跳到中断处理程序入口点,进行中断处理。...linux为了实现这个特点,当中断发生时候,硬中断处理那些短时间就可以完成工作,而将那些处理事件比较长工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套,但是没有优先级概念,也就是说任何一个新中断都可以打断正在执行中断,但同种中断除外。软中断不能嵌套,但相同类型中断可以在不同CPU上并行执行。...(4)软中断指令 int是软中断指令。 中断向量表是中断号和中断处理函数地址对应表。 int n -- 触发软中断n。相应中断处理函数地址为:中断向量表地址 + 4 * n。...(5)硬中断和软中断区别 软中断是执行中断指令产生,而硬中断是由外设引发。 硬中断中断号是由中断控制器提供,软中断中断号由指令直接指出,无需使用中断控制器。

21.4K21

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.4K40

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.2K31

Linux 中断处理浅析

最近在研究异步消息处理, 突然想起linux内核中断处理, 里面由始至终都贯穿着”重要事马上做, 不重要事推后做”异步处理思想....后面的工作由HI_SOFTIRQ/TASKLET_SOFTIRQ对应中断处理程序去处理被标记tasklet(每个tasklet在其初始化时都设置了处理函数)....比如: 时钟中断处理过程, 网络发送/接收处理过程. 结尾阶段 CPU接收到中断以后, 以历以上五个阶段, 中断处理完成. 最后需要恢复第一阶段中被保存在栈上寄存器信息. 中断处理结束....中断处理这几个阶段中不能调用可能导致睡眠函数(包括分配内存); 对于第一个问题, 较新linux内核增加了ksoftirqd内核线程, 如果持续处理softirq超过一定数量, 则结束中断处理过程...据说在montavista(一种嵌入式实时linux)中, 将内核中断机制做了修改. (某些中断)中断处理过程被赋予了task结构, 能够被内核调度. 解决了上述两个问题.

7.3K80

Linux NTP时钟同步

一、为什么要了解时钟同步? 时钟同步在大数据方向,用到地方很多。举个例子来说吧,像Zookeeper、RegionServer服务都是需要实时和各节点进行通信。...所以时钟同步在大数据里被广泛应用且必不可少一步。 二、了解时间 在Linux系统中,时间分为两部分:系统时间和硬件时间。默认情况下,系统时间和硬件时间会以异步方式进行,互不干扰。...NTP基于UDP报文进行传输,使用UDP端口号为123。 使用NTP目的是对网络内所有具有时钟设备进行时钟同步,使网络内所有设备时钟保持一致,从而使设备能够提供基于统一时间多种应用。...对于运行NTP本地系统,既可以接收来自其他时钟同步,又可以作为时钟源同步其他时钟,并且可以和其他设备互相同步。...五、NTP时间同步方案选择 NTP同步方式在linux下一般两种:使用ntpdate命令直接同步和使用NTPD服务平滑同步。有什么区别呢,简单说下,免得时间长了,概念又模糊。

19.4K30

Linux 时钟子系统

一文搞懂 | Linux 时钟子系统 Clock 时钟就是 SoC 中脉搏,由它来控制各个部件按各自节奏跳动。比如,CPU主频设置,串口波特率设置,I2S采样率设置,I2C速率设置等等。...这些不同clock设置,都需要从某个或某几个时钟源头而来,最终开枝散叶,形成一颗时钟树。可通过 cat /sys/kernel/debug/clk/clk_summary 查看这棵时钟树。...中间节点有很多种,包括 PLL(锁相环,用于提升频率),Divider(分频器,用于降频),Mux(从多个clock path中选择一个),Gate(用来控制ON/OFF)。...叶节点是使用 clock 做为输入、有具体功能 HW block。...provider driver初始化数据,数据被用来初始化clk_hw对应clk_core数据结构。

3.9K30

扒开 Linux 中断底裤之 workqueue

初始化一个 work 并添加到工作队列后,将会将其传递到合适内核线程来进行处理,它是用于调度最小单位。...node:添加到 worker_pool->workers 链表中 可以用下图来总结: workqueue 初始化 内核在启动时候会对 workqueue 做初始化,workqueue 初始化包含两个阶段...workqueue_init_early 分配 worker_pool,并且对该结构中字段进行初始化操作 分配 workqueue_struct,并且对该结构中字段进行初始化操作 alloc_and_link_pwqs...经过上面两个阶段初始化,workqueue 子系统基本就已经将数据结构关联建立好了,当有 work 来进行调度时候,就可以进行处理了。...要使用系统默认 workqueue,首先需要初始化 work,内核提供了相应宏 INIT_WORK。

1.9K51

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

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

4.7K10

linux内核缺页中断处理

MMU可以做虚拟地址到物理地址转换,使用MMU我们就可以使用更多内存空间,因为程序具有局部性原理,我们可以将暂时用不到数据存放到磁盘,当访问到时会发生缺页中断,从磁盘中将所需要数据加载到内存。...7.当磁盘中断发生时,表明该页已经被装入,页表已经更新可以反映他位置,页框也标记位正常状态。 8.恢复发生缺页中断指令以前状态,程序计数器重新指向这条指令。...9.调度引发缺页中断进程,操作系统返回调用他汇编例程 10.该例程恢复寄存器和其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过。...linux内核对缺页异常处理流程很复杂,但是基本思想和上述流程差不多。...下面看linux基本处理流程: 内核处理缺页异常主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器值 * error_code,由硬件产生:

10.6K21

Linux中断下半部机制对比

Linux有以下几种下半部机制: 软中断 tasklet workqueue threaded irq  中断服务程序一般都是在中断请求关闭条件下执行,以避免嵌套而使中断控制复杂化。...因此,Linux内核目标就是尽可能快处理完中断请求,尽其所能把更多处理向后推迟。...例如,假设一个数据块已经达到了网线,当中断控制器接受到这个中断请求信号时,Linux内核只是简单地标志数据到来了,然后让处理器恢复到它以前运行状态,其余处理稍后再进行(如把数据移入一个缓冲区,接受数据进程就可以在缓冲区找到数据...在这种情况下,可以调度它在指定时间执行: schedule_delayed_work(&work, delay);   这时,&work指向work_struct直到delay指定时钟节拍用完以后才会执行...在这种情况下,可以调度它在指定时间执行:   schedule_delayed_work(&work,delay);   这时,&work指向work_struct直到delay指定时钟节拍用完以后才会执行

11810

Linux中断虚拟化(一)

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

6.2K30
领券