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

Linux 内核如何处理中断

此外,键盘并不是导致中断的唯一组件。一般来说,有三种类型的事件会导致 CPU 发生中断:硬件中断、软件中断和异常。在具体介绍不同类型的中断前,我需要先定义一些术语。...接下来会调用在内核启动时设备驱动注册的对应的中断服务程序(ISR)。 软件中断 当你在播放一个视频时,音频和视频是同步播放是相当重要的,这样音乐的速度才不会变化。...当系统需要实时性时(例如在工业应用中),软件中断会变得重要。你可以在 Linux 基金会的文章中找到更多相关信息:面向嵌入式开发者的实时 Linux 介绍。...中断描述表(interrupt descriptor table)(IDT)中记录了中断请求(IRQ)和中断服务程序(ISR)的对应关系。Linux 中定义了从 0 到 256 的 IRQ 向量。...其中一些在 Linux 内核源树中的Linux IRQ 向量布局中指定。 如果要实时获取该表,请运行如下命令: watch -n1 "cat /proc/interrupts"

2.3K40

linux内核缺页中断处理

缺页中断处理一般流程: 1.硬件陷入内核,在堆栈中保存程序计数器,大多数当前指令的各种状态信息保存在特殊的cpu寄存器中。 2.启动一个汇编例程保存通用寄存器和其他易丢失信息,以免被操作系统破坏。...linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。...下面看linux的基本处理流程: 内核处理缺页异常的主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器的值 * error_code,由硬件产生:...(DIE_PAGE_FAULT, "page fault", regs, error_code, 14, SIGSEGV) == NOTIFY_STOP) return; /* 如果中断关闭则开中断...,内核调用copy_from_user时发生缺页异常,内核会将regs->ip也就是中断返回地址设置 //为这个地址,退出中断后不会在执行1: mov"itype" %2,%"rtype"1\n",

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

Linux内核21-Linux内核中断处理过程

内核对于这类中断是不作处理的。但是内核如何检测这类中断呢?又是如何禁止这类中断呢?因为中断号是共享的,所以,内核不会一检测到非预期中断就禁止它,而是对于总的中断请求次数和未处理的中断次数进行计数。...为了统一处理这些硬件,Linux内核使用了面向对象的编程思想,构建了一个PIC对象,包含PIC名称和7个PIC标准方法。...startup和shutdown分别表示启动和关闭IRQ线,但是对于8259A来说,这两个函数与enable和disable两个函数相同。...但是不幸的是,有时候硬件在分配中断时会发生错误(比如,基于奔腾4的SMP主板就有这样的问题)。因此,Linux2.6内核使用一个特定的内核线程叫kirqd进行纠正IRQ的自动分配(如果有必要的话)。...总结 其实内核经过这么多年的发展,在实现方式上已经发生了很大变化。但是其基本思想没变。比如我们以Linux4.4.203内核对于中断的处理为例,与上面的处理过程进行比较,理解其主要变化。

2.2K20

Linux内核36-内核同步之禁止中断

今天,我们了解一下内核同步的最后一种方法,关闭中断。这是一种简单粗暴的方式,但行之有效。 1 禁止中断 作为嵌入式软件开发人员,对于禁止中断肯定不陌生。...如果太长,会影响整个系统任务的调度,也有可能导致中断信号的丢失。 同样,Linux也不会放弃禁止中断这么好的同步机制。它保证内核控制路径可以继续执行,其访问的数据结构不会被中断处理程序破坏。...所以,在多核系统中,内核数据结构的保护一般是禁止中断搭配自旋锁一起使用。...当内核代码进入临界代码段时,通过清除eflags寄存器中的IF标志实现禁止中断,从而保护临界代码段。但是,当内核离开临界代码段的时候,内核是否该恢复之前的IF标志呢?还是不做任何处理?...但是,事情不会那么简单,有时候,内核需要只禁止可延时函数,而不禁止中断。那怎么实现呢?

1.3K20

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

linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...__softirq_pending) 唤醒ksoftirqd内核线程处理软中断。...内核不会立即处理重新触发的软中断。...当大量软中断出现的时候,内核会唤醒一组内核线程来处理。这些线程的优先级最低(nice值为19),这能避免它们跟其它重要的任务抢夺资源。

21.3K21

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

然后通过APIC总线发送给目标APIC,该APIC就会给自己的CPU发送一个相应的中断。 CPU间的中断(简称IPI)是多核系统一个重要组成部分。Linux有效地利用它们,在CPU之间传递消息。...3 中断描述符表 现在,我们已经知道了中断信号是如何从设备发出,然后经过高级可编程中断控制器的分配,到达各个指定的CPU中。...那么,剩下的工作就是内核的了,内核使用一个中断描述符表(IDT),记录每个中断或者异常编号以及相应的处理函数。那么,收到中断信号后,将相应的处理函数的地址加载到eip寄存器中执行即可。...陷阱门 同中断门类似,只是不会修改IF标志。 4 中断和异常的硬件处理 现在,我们来探究一下CPU控制单元是如何处理中断和异常的。我们假设内核已经完成初始化,CPU工作在保护模式下。...其实对于Linux来说,只使用了supervisor和user两种特权等级。所以中断应该都是在supervisor特权等级下运行。

2K10

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

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

40520

Linux内核22-软中断和tasklet

这对于时间苛刻的应用来说,这是一个很重要的属性,尤其是那些要求中断请求必须在毫秒级别响应的应用。 Linux2.6内核使用两种手段满足这项挑战:软中断和tasklet,还有工作队列。...2 软中断 Linux2.6内核中,软中断的数量比较少。对于多数目的,这些tasklet足够了。因为不需要考虑重入,所以简单易用。...Linux中断处理程序总是从索引0开始执行。 2.1 软中断使用的数据结构 软中断的主要数据结构是softirq_vec数组,包含类型为softirq_action的32个元素。...这在Linux内核中是禁止的,因为其可延时函数的执行都是串行的。所以,在此需要禁止软中断。 清除正在执行的软中断对应掩码位。 执行local_irq_enable()使能中断。...接下来,我们看看tasklet是如何执行的。其实,跟其它软中断的执行过程类似。软中断被激活,do_softirq()就会执行对应的软中断函数。

1.3K30

Linux 内核组织将关闭 FTP 服务

Linux Kernel Organization(kernel.org) 是一家建立于 2002 年的加利福尼亚公共福利公司,其目的是公开地免费分发 Linux 内核和其它开源软件。...Linux 内核组织是 Linux 内核发布的官方场所,在其站点上可以找到 Linux 内核的各个版本,包括最早的 1.0 到最新的 4.x 内核。...最初,早在 1998 年的时候, Linux 内核组织就提供了以 FTP 服务为基础的内核代码获取方式,除了可以直接通过 FTP 进行下载以外,还可以通过 HTTP 协议封装来访问 FTP 资源,甚至,...Linux 内核组织所有的 FTP 服务都将在今年内关闭,为了减少影响,关闭分为两个阶段: ftp://ftp.kernel.org/ 服务将于 2017 年 3 月 1 日终止。...【转自Linux中国,原链接在这里】

4.1K30

内核中断体系概括

前言 本文对内核中断进行概括以及讲述中断的具体实现方法在内核是怎么做的,会结合内核源码中的一些 .s 文件和 .c 文件来具体分析一下内核中断中的实现方式。...学习中断的目的: 1、硬件的中断响应 --------> 内核驱动中的中断 2、系统调用的函数响应(sys_call)--------> 系统调用 3、自定义中断--------> 软件的软中断模式...跳转回正常工作的函数地址继续运行 2、Linux中断的工作流程 ①....,中断后的回复过程 中断的执行过程 硬件中断的处理过程 linux/kernel/asm.s traps.c 软件及系统调用的处理过程 linux/kernel/system_call.s fork.c.../asm.s trap.c 具体详细内容参考 Linux内核完全注释:基于0.11内核(修正版V3.0).pdf P55~P62 和 P256~P279 三、内核中断体系结构 1、trap_init

8410

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

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

1.7K30

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

讲解这部分之前,我们先阐述一个概念-内核控制路径:就是一段在内核态执行的代码,比如说,异常处理程序,中断处理程序,系统调用处理,内核线程等等在内核态执行的代码。...比如,I/O设备引发一个中断,相应的内核态程序,首先,应该是保存内核态堆栈中的CPU寄存器的内容;然后,执行中断处理程序;最后,再恢复这些寄存器的内容。...内核控制路径可以任意嵌套;如下图所示,用户态的程序被中断打断,进入内核态响应中断;而这时候又来了其它中断,就会响应最新的中断,以此类推;但是,执行完一个中断处理程序之后,会回到之前的状态执行。...中断处理程序绝对不能包含页错误的操作,因为这会诱发进程切换。 Linux嵌套执行中断或异常处理程序的两个主要原因是: 为了提高可编程中断控制器和设备控制器的吞吐量。...内核正在处理一个中断的时候,能够及时响应另一个中断。 实现没有中断优先级的模型。这可以简化内核代码并提高可移植性。 在多核系统中,几个中断或异常处理程序可能会并发执行。

2K20

内核中断子系统介绍

中断子系统中的中断指的是其中硬件的一方,后续中断均按此理解。 中断处理的参与对象和流程 中断处理中有着多个对象的参与,理解每个对象在其中是如何参与是很重要的。以下列举了中断处理的参与对象。...中断子系统 现在把之前的流程具有的部分对比内核中断子系统,可以发现还多出了一个通用中断处理层。...中断控制器如何得知中断事件被 cpu 响应? irq_ack 中断控制器在实现中会根据中断事件被 cpu 开始响应或完成响应来决定该中断事件类型是否会再度通知 cpu 处理。...中断控制器如何得知 cpu 完成处理中断事件? irq_eoi 中断控制器在实现中会根据中断事件被 cpu 开始响应或完成响应来决定该中断事件类型是否会再度通知 cpu 处理。...希望帮助大家得出诸如“arm 内核中断嵌套吗”“arm cpu eoi 是做什么”这类问题的答案。

1K20

如何编译 Linux 内核

曾经有一段时间,升级 Linux 内核让很多用户打心里有所畏惧。在那个时候,升级内核包含了很多步骤,也需要很多时间。现在,内核的安装可以轻易地通过像 apt 这样的包管理器来处理。...,而编译内核是你的任务 不管出于什么原因,懂得如何编译内核是非常有用的,而且可以被视作一个通行权。...解压源码 在新下载的内核所在的文件夹下,使用该命令来解压内核: tar xvzf linux-4.17-rc2.tar.gz 使用命令 cd linux-4.17-rc2 进入新生成的文件夹。...当命令执行完毕后,使用如下命令来更新 grub: sudo update-grub 现在你可以重启系统并且选择新安装的内核了。 恭喜! 你已经编译了一个 Linux 内核!...它是一项耗费时间的活动;但是,最终你的 Linux 发行版将拥有一个定制的内核,同时你也将拥有一项被许多 Linux 管理员所倾向忽视的重要技能。

6.8K30

如何定制Linux内核

上篇文章我们讲述了如何定制Linux外围文件系统,本文我们来讲讲如何定制Linux内核。...思路对照windows硬件设备管理器检视设备配置:CPU、硬盘控制器、网络控制器、USB控制器(HID、Mass storage);先将裁完的内核搭配原文件系统观察系统能否启动,能启动后再换成自制文件系统...Step1下载最新的稳定版Linux kernel src。...然后输入命令:make install生成编译完成的内核,拷贝到/boot目录下,并修改/boot/grub/grub.conf中小系统对应的内核,即可利用新编译的内核启动。真机效果1....系统支持通过ssh方式访问其他机器图片总结裁剪内核的过程中首先应该把完全能够确定要或不要的模块删掉或加进内核,再慢慢将不确定的模块少量甚至单独加进去,编译安装观察是否能够重启,否则一次性全部裁完发现kernel

2.1K80

Linux 内核Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )

包括 进程创建 , 销毁 , 线程组管理 , 内核线程管理 , 队列等待 ; 进程调度 位于 下图 Linux 内核整体架构图 中的 内核空间 ; 二、内存管理 ---- 内存管理 涉及到 物理内存管理...和 虚拟内存管理 , 是 Linux 内核中 最复杂的模块 ; 虚拟内存管理 包括 : 反向映射 , KSM , MMAP 映射 , 缺页中断 , 共享内存 , 进程虚拟地址空间管理 , 页面回收 ;...物理内存管理 包括 : 页面分配器 等 ; 内存管理 位于 下图 Linux 内核整体架构图 中的 内核空间 ; 三、中断管理 ---- 中断管理 包括 : 处理器异常处理 , 中断处理 ; 异常指的是...处理器执行时 , 检测 异常条件 , 处理器需要停止当前执行的栈 , 处理异常 ; 中断管理 位于 下图 Linux 内核整体架构图 中的 内核空间 ; 四、设备管理 ---- Linux 内核 支持的外设类型...内核可以很方便的集成各种文件系统 ; 文件系统 位于 下图 Linux 内核整体架构图 中的 内核空间 ;

1.8K30
领券