最近一次重大的中断是2016年8月AWS服务中断。虽然Amazon S3是为数据持久性而设计的,但并不等于中断之后具有快速可恢复性。...S3存储服务的设计可以抵御一个可用区域的网站中断,但是最近的中断事件显示,网络问题可能导致整个地区的广泛中断。 •数据仍然需要备份。行业专家对此进行了呼吁,甚至亚马逊公司也建议备份数据。...故障后恢复数据可能需要几个小时或几天的时间,尤其是超大规模应用程序和数据库。 •数据通常放在一个“篮子”中。如果备份数据与主数据存储在相同的云服务中,则在相同的可用区域中,无法在中断期间恢复数据。...企业需要设计一个数据备份,恢复和连续性策略来考虑云计算。为了确保数据中心可以快速恢复,需要注意以下事项: •将备份数据保存在另一个服务或区域中。像这样的中断通常会影响整个地区。...备份和恢复策略需要包括在其他区域,云服务,甚至私有云中恢复的能力。 •快速恢复过程。传统的备份解决方案和基于脚本的方法无法快速恢复数据,特别是应用程序需要恢复到不同的拓扑的时候。
,然而并不知道它使用的部分虚拟内存其实在磁盘上,因为内存和磁盘的读写速度上的巨大差异,这部分虚拟内存的读写非常缓慢,我们在 为什么 CPU 访问硬盘很慢 曾经介绍过: 在 SSD 中随机访问 4KB 数据所需要的时间是访问主存的...其他的文件不能存储在该区域上,我们可以使用 swapon -s 命令查看当前系统上的交换分区; Swap 文件是文件系统中的特殊文件,它与文件系统中的其他文件也没有太多的区别; Swap 分区的大小是需要系统管理员手动设定的...我们到现在已经对 Linux 上的 Swapping 有了一定的了解,接下来回到这篇文章想要讨论的问题 — 『为什么 Linux 需要 Swapping』,我们将从以下两个方面介绍 Swapping 解决的问题...WMARK_MIN 时会触发上一节提到的内存直接回收,而水位高于 WMARK_HIGH 则意味着空闲内存充足,不需要进行回收。...Linux 中的 Swapping 机制主要是为内存不足和内存闲置两种常见的情况存在的 Swapping 可以直接将进程中使用相对较少的页面换出内存:当系统需要的内存超过了可用的物理内存时,内核会将内存中不常使用的内存页交换到磁盘上为当前进程让出内存
中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...因为这种传统系统调用方式需要进入内核后作权限验证,还要切换内核栈后作大量压栈方式,调用结束后清理栈作恢复,两个字太慢,后来CPU从硬件上支持快速系统调用sysenter/sysexit, 再后来又发展到...syscall/sysret, 这两种都不需要通过中断方式进入内核态,而是直接转换到内核态,速度快了很多。...传统系统调用相关 IDT 的设置 Linux系统启动过程中内核压解后最终都调用到start_kernel, 在这里会调用trap_init, 然后又会调用idt_setup_traps: void...硬件中断相关IDT的初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int
中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux对中断的处理过程。...handler: 类型为 hw_interrupt_type 结构,表示IRQ线对应的硬件相关处理函数,比如 8259A中断控制器 接收到一个中断信号时,需要发送一个确认信号才会继续接收中断信号的,发送确认信号的函数就是...鉴于这个原因,Linux把中断处理分为两个部分,上半部 和 下半部,上半部 在前面已经介绍过,接下来就介绍一下 下半部 的执行。...怎么知道哪种softirq需要被执行呢?...Linux通过 __softirq_active 这个字段得知哪种softirq需要执行(只需要把对应位设置为1)。
为什么Synchronized不可中断?首先中断操作是Thread类调用interrupt方法实现的。...基本上所有人都说Synchronized后线程不可中断,百度后的大部分文章都是这样解释说道: 不可中断的意思是等待获取锁的时候不可中断,拿到锁之后可中断,没获取到锁的情况下,中断操作一直不会生效。...深入分析Synchronized 为什么Synchronized要设计成这样,ReentrantLock都允许马上中断呀,是Synchronized设计者有意为之还是另有苦衷?...感觉如果设计成这样有点蠢吧,为什么要拿到锁才去中断,毫无理由啊。肯定有阴谋!...对比ReentrantLock 那为什么ReentrantLock可中断呢(未获取到锁也可中断),但是必须使用ReentrantLock.lockInterruptibly()来获取锁,使用ReentrantLock.lock
了解更多BPF技术内幕,推荐阅读《BPF之巅:洞悉Linux系统和应用性能》一书。 ▼ BPF是近年来Linux 系统技术领域一个巨大的创新。...接下来我们来讨论一下,为什么性能工具需要 BPF 技术。 ▊ 为什么性能工具需要 BPF 技术 性能工具使用扩展版 BPF 来实现可编程性。BPF 程序可以执行自定义的延迟计算和统计摘要等功能。...使用 BPF 之前和之后生成直方图过程的对比 这里的关键变化是,直方图可以在内核上下文中生成,这大大减少了需要复制到用户空间的数据量。...如前面的程序输出截图所示,唯一需要复制到用户空间的数据是“count”列,其是一个数字数组。...如果使用内核模块,则需要先从内核中将其完全卸载,然后再次加载,这可能会导致相关服务中断。 使用内核模块的一个好处是 :在模块中可以使用其他内核函数和内核设施,而不仅限于 BPF 提供的辅助函数。
最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着”重要的事马上做, 不重要的事推后做”的异步处理思想....然而嵌套发生的中断处理过程也可能会触发软中断,所以第一层中断处理过程在第四阶段需要是一个循环的过程,需要循环处理嵌套发生的所有软中断。为什么要这样做呢?...比如: 时钟中断处理过程, 网络发送/接收处理过程. 结尾阶段 CPU接收到中断以后, 以历以上五个阶段, 中断处理完成. 最后需要恢复第一阶段中被保存在栈上的寄存器信息. 中断处理结束....据说在montavista(一种嵌入式实时linux)中, 将内核的中断机制做了修改. (某些中断的)中断处理过程被赋予了task结构, 能够被内核调度. 解决了上述两个问题....工作队列 linux基线版本的内核在解决上述问题上, 提供了workqueue机制.
我没有查到中断到底是何时引入的,但是从 Linux 问世以来就已经有了,而且 Linux 是基于 UNIX 开发的,可以认为 UNIX 就已经引入中断机制了,而且换个角度来说,UNIX 作为如此著名的操作系统...中断向量表 上面提到过中断向量表是 CPU 根据中断号执行中断处理程序前需要查询的"一张表",获取中断向量值后就可以对应中断服务程序的入口值。...80x86 机器支持 256 个中断,理论上每个中断都需要安排一个中断处理程序。...对于 Linux 内核来说,中断信号分为两类:硬件中断和软件中断,每个中断是由 0 - 255 之间的一个数字来标识。...这里需要说一下两个指令 cli 和 sti,为了避免竞争条件对临界代码的干扰,在 Linux 0.11 内核中很多地方都使用了 cli 和 sti 指令。
1、什么时候需要线程同步?...并非所有情况下都需要线程同步,只有在以下几种情况时才需要: 多个线程会修改共享资源:如果一个线程修改某个共享变量,其他线程可能也会修改或读取该变量,这时数据一致性问题就可能发生。...共享资源的写操作是非原子的:很多时候,修改共享资源的操作不是一个瞬时的、不可中断的过程,而是需要多个步骤完成的(如读-改-写的操作)。...2、什么时候不需要线程同步? 如果变量是局部变量(只在某个线程的作用域内),或全局变量但只有一个线程访问它,那么不需要担心数据一致性问题。...假设写操作需要两个时钟周期完成,但在写操作还没完成的过程中,线程B恰好读取了变量x,此时线程B会得到一个旧的值,而不是预期的正确值。 这种情况下,就会导致数据不一致。
一、背景 最近 ChatGPT 非常火爆,使用时经常会中断,需要输入“继续” 才可以继续输出。 作为一个技术人,不知道你是否想过为什么?...如果 ChatGPT 每次都生成很长的文本,可能会消耗更多的内存和CPU,并且需要更长的时间才能返回结果。 如果只生成一部分文本,并让用户决定是否要求更多内容,可能会更有效率和灵活。
MMU可以做虚拟地址到物理地址的转换,使用MMU我们就可以使用更多的内存空间,因为程序具有局部性原理,我们可以将暂时用不到的数据存放到磁盘,当访问到时会发生缺页中断,从磁盘中将所需要的数据加载到内存。...3.当操作系统发现缺页中断时,尝试发现需要哪个虚拟页面。通常一个硬件寄存器包含了这些信息,如果没有的话操作系统必须检索程序计数器,取出当前指令,分析当前指令正在做什么。...linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。...而vmalloc出现异常比较好处理,只需要页表同步就可以了(因为伴随着进程的切换可能用户进程的页表不是最新的,需要将内核的页表更新到用户进程的页表),2.内核引用用户空间地址发生的异常,比如用户态的地址非法...下面看linux的基本处理流程: 内核处理缺页异常的主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器的值 * error_code,由硬件产生:
图 1 - macOS 磁盘工具 我们在 前一篇文章 中曾经分析过为什么早期 Windows 操作系统每隔一段时间可能需要整理磁盘上的碎片[^1],该问题背后有两个原因,其一是 Windows 使用的...Linux 和 macOS 系统不需要碎片整理的原因与 Windows 需要碎片整理的原因正好相反: Linux 和 macOS 使用的文件系统或者降低了碎片发生的概率或者实现自动整理碎片的特性; 固态硬盘与机械硬盘具有不同的特性...如果磁盘上确实出现了碎片,那么 Linux 和 macOS 的文件系统也会尝试移动出现碎片的文件,不需要额外的碎片整理工具,这种设计带来的用户体验会比手动触发耗时较长的碎片整理好很多。...这里简单总结一下 Linux 和 macOS 不需要碎片整理的两个原因: 文件系统基于区块分配的设计使得磁盘上出现碎片的概率很低,延迟分配和自动的整理策略解放了操作系统的使用者,在多数情况下不需要考虑磁盘的碎片化...参考资料 [^1]: 为什么早期的 Windows 需要整理碎片 https://draveness.me/whys-the-design-windows-defragmentation/ [^2]:
linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...(4)软中断指令 int是软中断指令。 中断向量表是中断号和中断处理函数地址的对应表。 int n -- 触发软中断n。相应的中断处理函数的地址为:中断向量表地址 + 4 * n。...(5)硬中断和软中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。...等: local_bh_disable(); local_bh_enable(); 需要注意的是,禁止下半部时仍然可以被硬中断抢占。
为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。...图 1 - macOS 磁盘工具 我们在 前一篇文章 中曾经分析过为什么早期 Windows 操作系统每隔一段时间可能需要整理磁盘上的碎片[^1],该问题背后有两个原因,其一是 Windows 使用的...Linux 和 macOS 系统不需要碎片整理的原因与 Windows 需要碎片整理的原因正好相反: Linux 和 macOS 使用的文件系统或者降低了碎片发生的概率或者实现自动整理碎片的特性; 固态硬盘与机械硬盘具有不同的特性...如果磁盘上确实出现了碎片,那么 Linux 和 macOS 的文件系统也会尝试移动出现碎片的文件,不需要额外的碎片整理工具,这种设计带来的用户体验会比手动触发耗时较长的碎片整理好很多。...这里简单总结一下 Linux 和 macOS 不需要碎片整理的两个原因: 文件系统基于区块分配的设计使得磁盘上出现碎片的概率很低,延迟分配和自动的整理策略解放了操作系统的使用者,在多数情况下不需要考虑磁盘的碎片化
这篇文章以按键为例子讲解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中断实现: 这里例子采用等待队列的方式实现(也就是上述的第二种方法)。
软中断分析最近工作繁忙,没有时间总结内核相关的一些东西。上次更新博客到了linux内核中断子系统。这次总结一下软中断,也就是softirq。之后还会总结一些tasklet、工作队列机制。...1.为什么要软中断 编写驱动的时候,一个中断产生之后,内核在中断处理函数中可能需要完成很多工作。但是中断处理函数的处理是关闭了中断的。也就是说在响应中断时,系统不能再次响应外部的其它中断。...这样的后果会造成有可能丢失外部中断。于是,linux内核设计出了一种架构,中断函数需要处理的任务分为两部分,一部分在中断处理函数中执行,这时系统关闭中断。...软件中断的处理过程 之前我已经说到,软中断的一个很大的目的就是避免中断处理中,处理的操作过多而丢失中断。同时中断还需要考虑到一件事情就是中断处理过程过长就会影响系统响应时间。...Linux内核就中断方面就必须考虑平衡这三个方面的问题。而下面我要分析的__do_softirq函数就恰似在这三者之间打太极,游刃有余,面面俱到!
2 记录中断到IRR 中断处理需要一个过程,从外设发出请求,一直到ISR处理完成发出EOI。...而且可能中断来了并不能马上处理,或者之前已经累加了一些中断,大家需要排队依次请求CPU处理,等等,因此,需要一些寄存器来记录这些状态。...,当前之前需要滤掉被被屏蔽的中断。...第2部分是获取正在被CPU处理的中断的优先级的中断的优先级,通过这里,读者更能具体的理解了8259A为什么需要这些寄存器记录中断的状态。...在收到CPU发来的中断确认后,8259A需要更新自己的状态,包括,因为中断已经开始得到服务了,所以从IRR中清除等待服务请求。另外,需要设置ISR位,记录正在被服务的中断,但是这里稍微有一点点复杂。
作者简介 王柏生 资深技术专家,先后就职于中科院软件所、红旗Linux和百度,现任百度主任架构师。在操作系统、虚拟化技术、分布式系统、云计算、自动驾驶等相关领域耕耘多年,有着丰富的实践经验。...著有畅销书《深度探索Linux操作系统》(2013年出版)。 谢广军 计算机专业博士,毕业于南开大学计算机系。资深技术专家,多年的IT行业工作经验。...本文内容节选自《深度探索Linux虚拟化技术》,已获得机械工业出版社华章公司授权。...图3 基于APIC的虚拟中断过程 与单处理器情况相比,多处理器的虚拟中断主要有2点不同: 1)在多处理器系统下,不同CPU之间需要收发中断,因此,每个CPU分别需要关联一个独立的中断芯片,这个中断芯片称为...LAPIC不仅需要接收CPU之间核间中断IPI(Inter-Processor Interrupt),还需要接收来自外设的中断。
一、内核中断初始化 文件:kernel\init\main.c。...Linux内核中断初始化流程如下: start_kernel()-> init_IRQ()-> irqchip_init()-> of_irq_init(...__irqchip_of_table) ## 扫描和初始化设备树中的中断控制器("interrupt-controller") __irqchip_of_table在RK3399中断控制器GICv3初始化时赋值...二、中断控制器初始化 文件:drivers/irqchip/irq-gic-v3.c。...gic_of_init : gic_of_init } 2、gic_handle_irq() 功能:该函数通过读取ICC_IAR1_EL1寄存器获取INTID,根据INTID判断对应的中断,调用相关的中断处理函数
比如按键中断、串口中断等等,这些中断所有的 Core 都可以处理,不限定特定 Core。...中断源有很多,为了区分这些不同的中断源肯定要给他们分配一个唯一 ID,这些 ID 就是中断 ID。...分发器收集所有的中断源,可以控制每个中断的优先级,它总是将优先级最高的中断事件发送到 CPU 接口端。分发器端要做的主要 工作如下: ①、全局中断使能控制。 ②、控制每一个中断的使能或者关闭。...④、设置优先级掩码,通过掩码来设置哪些中断不需要上报给 CPU Core。 ⑤、定义抢占策略。 ⑥、当多个中断到来的时候,选择优先级最高的中断通知给 CPU Core。...有一点需要说明:不管 GIC 如何对中断进行分类,对 CPU core 来讲,只分为 IRQ、FIQ、VIRQ、VFIQ,一般所有的外部中断对CPU core来讲都属于IRQ: 即便在 GIC 内部分为了
领取专属 10元无门槛券
手把手带您无忧上云