精华内容
下载资源
问答
  • 中断请求中断请求级 中断是异步过程调用,简而言之就是打断当前CPU正在执行的任务转而去执行另一个任务 windows在初始化时,为每种中断安装了一个中断处理例程---ISR(intterupt service routine),它们储存在...
    中断请求与中断请求级
    
    中断是异步过程调用,简而言之就是打断当前CPU正在执行的任务转而去执行另一个任务
    windows在初始化时,为每种中断安装了一个中断处理例程---ISR(intterupt service routine),它们储存在IDT(intterupt dispatch table中断分发表)中,每次发生中断,处理都将询问中断控制器,中断控制器会将当前发生中断映射成一个中断号,用这个中断号作为索引在IDT中查询,然后CPU将转到对应的ISR去执行(当然,此时我们还没有考虑中断请求级的问题),顺便说明,如果是多CPU,那么每个CPU都会有自己的IDT
    中断分硬件中断和软件中断,硬件中断一般是由可中断的外部设备造成的,比如说鼠标呀,键盘呀,网卡呀,等等……
    软件中断一般是什么APC(Asynchronous procedure call)调用啊,DPC(Dispatch/deferred procedure call)调用啊……貌似也就这些哦,嘿嘿

    至于中断请求级,系统为每种硬件中断定义了一个请求级,与其说定义,不如说是一种算法。比如在单CPU的X86系统上,会简单的用27减去中断号,得到中断请求级(IRQL),
    我们常见的x86系统上,请求级只有0-31个级别,数字越大,级别越高
    软件中断只有两种中断请求级,APC_LEVEL,DISPATCH_LEVEL,对应我前面说的两种软软件中断
    至于最后一种,PASSIVE_LEVEL,听名字你就知道,它是最低的,是被动的,所有用户模式代码和大部分驱动设备都运行在这个级别上

    中断请求级有什么用?
    中断请求级是控制当前处理器任务的关键,此时你必须明白,每个处理器都会有自己当前的中断请求级,这是处理器的一个状态,记住,是状态,可变的
    中断级其实是作为一个屏蔽界限在使用,为什么这么说?很简单,如果此时处理器正运行在IRQL为A上,此时所有硬件和软件产生的中断的IRQL为B,如果B<=A,B被屏蔽,如果B>A,然后处理器保存当前运行的线程环境,转到处理中断B。在B<A的情况下,处理器可能将B交给其他处理器去处理(多核情况下),也可能保留这个中断,直到某个时刻,处理器的中断请求级降下来了,满足B抢断CPU任务条件了,那么B中断就会被处理了

    看某些书时,总是会有这么醒目的一行字,运行在DISPATCH_LEVEL上的代码,绝对不能等待一个内核对象,也绝对不能出现页故障
    为什么?简单解释下
    如果运行在DISPATCH_LEVEL级别的代码,等待一个内核对象,那么此时CPU是闲置的,线程调度器将强制切换到另一个需要执行的线程,但是线程调度和我们此时运行的代码是同一个中断级啊,按照前面的规则,是不能打断我们的代码执行的,那么将不会有任何线程切换,CPU将一直因为我们的代码等待内核对象而空闲,这叫啥,占着茅坑不XX……嘿嘿。至于不能发生也故障,其实也一样,因为我们的代码如果访问一个处于分页池中的内存的地址,那么将触发页故障,内存管理器将产生I/0异常,CPU此时就得等待文件系统将磁盘数据读入内存,这样一来,又是等待了,和前面等待内核对象一样,线程调度器必须调度,却调度不了,然后当前线程继续执行,访问错误的内存,继续BSOD!

    再来聊聊DPC例程:分发(或者叫调度)或延迟调用例程
    DPC例程,望文生义下下,运行在DISPATH_LEVEL上 = =
    A:分发例程调用(dispatch procedure call)
    1:系统的线程调度运行在DISPATCH_LEVEL上,每当一个线程时间片用完,而此时线程未完成其任务,系统将插入一个DISPATCH_LEVEL的中断请求调用线程调度器,但是它将等到当前线程完成某些任务直到其中断级降至DISPATCH_LEVEL以下,调度器才会运行。如果线程是主动结束或者等待,那么调度器将直接运行并切换线程
    2:对内核共享数据的访问,应该将当前线程提升至DISPATCH_LEVEL,此时任何软中断,包括线程时间片用完时系统插入的DISPATCH_LEVEL级别的线程调度中断,都将被屏蔽,直到对数据操作完,降低IRQL,其他软中断才会得以处理……这样就保证了数据在可以完整的被读写
    B:延迟例程调用(deferred procedure call)
    1:延迟例程是完成某一项不是特别紧要的任务的函数
    2:延迟例程以对象表示
    3:每个CPU都有一个延迟例程队列
    4:系统将在DISPATCH_LEVEL上处理延迟例程,即是,当前线程所在的CPU中断级即将从DISPATCH_LEVEL降下来,系统将保持此时的CPU中断级为DISPATCH_LEVEL,然后一个个调用DPC对象,直到DPC列为空时。另外,当满足任一一种抽空条件时,系统会执行抽空动作,若此时CPU中断级小于DISPATCH_LEVEL,系统将直接处理DPC队列并提升至DISPATCH_LEVEL……当抽空动作完成后,系统恢复原有的中断级,继续原有的任务(注意:因为DPC是在DISPATCH_LEVEL上被处理,所以延迟例程中,不能调用)

    未完待续…………

    展开全文
  • 中断请求 实施中断请求的是连接外围设备的I/O控制器,负责实施中断处理的是CPU,外围设备的中断请求会使用不同于I/O端口的其他编号,该编号称为中断编号。在控制面板中查看软盘驱动器的属性时,IRQ处现实的数值是06...

    中断请求
    在这里插入图片描述
    实施中断请求的是连接外围设备的I/O控制器,负责实施中断处理的是CPU,外围设备的中断请求会使用不同于I/O端口的其他编号,该编号称为中断编号。在控制面板中查看软盘驱动器的属性时,IRQ处现实的数值是06,表示的就是用06号来识别软盘驱动器发出的请求。还有就是操作系统以及BIOS则会提供响应中断编号的中断处理程序。
    在这里插入图片描述
    假如有多个外围设备进行中断请求的话,CPU 需要做出选择进行处理,为此,我们可以在I/O控制器和CPU中间加入名为中断控制器的IC来进行缓冲。中断控制器会把从多个外围设备发出的中断请求有序的传递给CPU。中断控制器的功能相当于就是缓冲。

    中断控制器的功能
    在这里插入图片描述
    CPU在接受到中断请求后,会把当前正在运行的任务中断,并切换到中断处理程序。中断处理程序的第一步处理,就是把CPU所有寄存器的数值保存到内存的栈中。在中断处理程序中完成外围设备的输入和输出后,把栈中保存的数值还原到CPU寄存器中,然后再继续进行对主程序的处理。

    假如CPU寄存器数值还没有还原的话,就会影响到主程序的运行,甚至还有可能会使程序意外停止或发生运行时异常。这是因为主程序在运行过程中,会用到CPU寄存器进行处理,这时候如果突然插入其他程序的运行结果,此时CPU必然会受到影响。所以,在处理完中断请求后,各个寄存器的值必须要还原。只要寄存器的值保持不变,主程序就可以像没有发生过任何事情一样继续处理。

    展开全文
  • 本文主要对单片机中断请求源进行了简要分析,希望对你的学习有所帮助。
  • 中断请求

    2016-02-17 14:51:50
    中断请求级 在设计windows的时候,设计者3将中断请求划分为软件中断和硬件中断,并将这些中断都映射成不同级别的中断请求级(IRQL)。同步处理机制很大程度上依赖于中断请求级。 1.中断请求(IRQ)与可编程中断控制...

    中断请求级
    	在设计windows的时候,设计者3将中断请求划分为软件中断和硬件中断,并将这些中断都映射成不同级别的中断请求级(IRQL)。同步处理机制很大程度上依赖于中断请求级。
    	
    1.中断请求(IRQ)与可编程中断控制器(PIC)
    	中断请求(IRQ)一般有两种,一种是外部中断,也就是硬件产生的中断,另一种由软件指令int n产生的中断。
    	PIC的中断向量
    	
    	IRQ编号						设备名称					用途
    	IQR0							Time						计算机系统计时器
    	IRQ1							KeyBoard				键盘
    	IRQ2							RedirectIRQ9		与IRQ9相接,MPU-401 MDI使用该IRQ
    	IRQ3							COM2						串口设备
    	IRQ4							COM1						串口设备
    	IRQ5							LPT2						建议声卡使用该IRQ
    	IRQ6							FDD							软驱传输控制用
    	IRQ7							LPT1						打印机传输控制用
    	IRQ8							CMOS Alert			即时时钟
    	IRQ9							RedirectIRQ2		与IRQ2相接。可设定给其他硬件使用
    	IRQ10							Reversed				建议保留给网卡使用该IRQ
    	IRQ11							Reversed				建议保留给AGP显卡使用
    	IRQ12							PS/2Mouse				接PS/2鼠标,若无也可设定给其他硬件使用
    	IRQ13							FPU							协处理器用,例如FPU(浮点运算器)
    	IRQ14							PrimaryIDE			主硬盘传输控制用
    	IRQ15							SccondaryIde		从硬盘传输控制用
    	
    2.高级可编程控制器(APIC)
    	传统PC一般使用2片Intel8259A中断控制器。然后在X86计算机基本都是用高级可编程控制器,即Advanced Programmable Interrupt Controller(APIC)。
    	(见末尾图片处)
    	
    3.中断请求级(IRQP)
    	在APIC中,IRQ的数量被增加到了24个,每个IRP有各自的优先级别,正在运行的线程随时可以被中断打断,进入到中断处理程序。当优先级搞的中断来临时,处在优先级低的中断处理程序,也会被打断,
    进入到更高级别的中断处理函数。
    	Windows将中断的概念进行了扩展,提出了一个中断请求级(IRQL)的概念。其中规定了32个中断,分别是0-2级别为软件中断,3-31级别为硬件中断(这里包括APIC中的24个中断),其中数字从0-31,
    优先级别啄次递增。
    	windows将24个IRQ映射到了从DISPATCH_LEVEL到PROFILE_LEVEL之间,不同硬件的中断处理程序运行在不同的IRQL级别中。硬件的IRQL称为设备中断请求级,或者简称DIRQL。Windows大部分时间运行在软件中断级别中。
    当设备中断来临时,操作系统提升IRQL至DIRQL级别,并且运行中断处理函数。当中断处理函数结束后,操作系统把IRQL降到原来的级别。
    	HIGH_LEVE    	31
    	POWER_LEVEL 	30
    	IPI_LEVEL			29
    	CLOCK2_LEVEL	28
    	CLOCK1_LEVEL	28
    	PROFILE_LEVEL	27
    	......
    	DISPATCH_LEVEL 2
    	APC_LEVEL			 1
    	PASSIVE_LEVEL	 0		
    	
    	用户模式的代码运行在最低优先级的PASSIVE_LEVEL级别。驱动程序的DriverEntry函数、派遣函数、AddDevice等函数一般都运行在PASSIVE_LEVEL级别,它们在必要时可以申请进入DISPATCH_LEVEL级别。
    	Windows负责线程调度的组件是运行在DISPATCH_LEVEL级别,当前的线程运行完时间片后,系统自动从PASSIVE_LEVEL级别提升到DISPATCH_LEVEL级别。当线程切换完毕后,操作系统又从DISPATCH_LEVEL级别降到PASSIVEL级别。
    
    4.线程调度与线程优先级
    	在应用程序的编程中,经常会听到线程优先级的概念。线程优先级和IRQL是两个容易混淆的概念。所有应用程序都运行在PASSIVE_LEVEL级别上,它的优先级别最低,可以被其他IRQL级别的程序打断。
    线程优先级只针对应用程序而言,只有程序运行在PASSIVE_LEVEL级别才有意义。
    	线程优先级是指某线程是否有更多的几号运行在CPU上,线程优先级高的线程有更多的机会被内核调度。负责调度线程的内核组建运行在DISPATCH_LEVEL级的IRQL上,这时候所有应用程序的线程都停止,等待被调度。
    	ReadFile内部创建IRP_MJ_READ,然后这个IRP被传递到驱动程序的派遣函数中。这时候派遣函数运行于ReadFile所在的线程中,或者说ReadFile和派遣函数位于同一个线程上下文中。
    
    5.IRQL的变化
    	为了更好地理解IRQL概念,笔者在下面详细描述了一个线程的运行过长。这个线程在运行中,被一个中断打断,并且在中断服务执行时,被更高级别的中断打断,线程的运行分为以下几个阶段。
    	阶段1:一个普通线程A正在运行。
    	阶段2:这个时刻有一个中断发送,它的IRQL为0xD。CPU中断当前运行的线程A,将IRQL提升至0xD级别。
    	阶段3:这个时候有一个更高优先级的中断发送,它的IRQL是0x1A。这时候CPU将IRQL提升至0x1A级别。
    	阶段4:这时候又有一个中断发送,但它的IRQL为0x18,低于上一个中断优先级。CPU不会理睬这个中断。
    	阶段5:这时候IRQL为0x1A的中断结束,于是进入IRQL为0x18的中断服务。
    	阶段6:这时候IRQL为0x18中断结束,于是进入IRQL为0xD的中断服务。
    	阶段7:最后IRQL为0xD的中断结束,操作系统恢复线程A。
    	线程运行在PASSIVE_LEVEL级别,这个时候操作系统随时可能将当前线程切换到别的线程。但是如果提升IRQL到DISPATCH_LEVEL级别,这时候不会出现线程的切换。这是一种很常用的通比处理机制,但这种方法只能使用于单CPU的系统。
    对于多CPU的系统,需要采用别的同步处理机制。
    
    
    6.IRQL与内存分页
    	在使用分页内存时,可能会导致页故障。因为分页内存随时可能从物理内存交换到磁盘文件。读取不再物理内存中的分页内存时,会引发一个页故障,从而执行这个异常的处理函数。
    异常处理函数会重新将磁盘文件的内容交换到物理内存中。
    	页故障允许出现在PASSIVE_LEVEL级别的程序中,但如果在DISPATCH_LEVEL或者更高级别IRQL的程序中会带来系统崩溃。
    	对于等于或者高于DISPATCH_LEVEL级别的程序不能使用分页内存,必须使用非分页内存。驱动程序的StartIo例程、DPC例程、中断服务例程都运行在DISPATCH_LEVEL或者更高的IRQL。
    因此,在这些例程中不能使用分页内存,否则会导致系统崩溃。
    
    7.控制IRQL提升与降低
    	有时候,驱动程序中需要提升IRQL级别。在运行一段时间后,再降回原来的IRQL级别。这样做的目的一般是基于同步处理的需要。
    	首先驱动程序需要知道当前状态是什么IRQL级别,可以通过KeGetCurrentIrql内核函数获取当前IRQL级别。
    	然后驱动程序使用内核函数KeRaiseIrql将IRQL提高。KeRaiseIrql需要两个参数,第一个参数是提升后的IRQL级别,第二个参数保存提升前的IRQL级别。
    	最后,驱动程序在某个时刻需要将IRQL恢复到以前的IRQL级别,驱动程序可以调用KeLowerIrql内核函数。
    	
    	VOID RasieIRQL_Test(void)
    	{
    		KIRQL oldirql;
    		//确保当前IRQL等于或小于DISPATCH_LEVEL
    		ASSERT(KeGetCurrnetIrql()<=DISPATCH_LEVEL);
    		//提升IRQL至DISPATCH_LEVEL,并将先前的IRQL保存
    		KeRaiseIrql(DISPATCH_LEVEL,&oldirql);
    		
    		//.........
    		//恢复到先前的IRQL
    		KeLowerIrql(oldirql);
    	
    	}					
    	
    		
    


     

    展开全文
  • CPU中断请求理解

    2019-10-26 14:52:13
    CPU软中断 1、什么是中断 中断表示我们请求操作事件准备就绪了,例如从磁盘...首先会在驱动程序中嵌入中断程序,一旦磁盘准备就绪就会通过驱动程序发生一个中断请求操作,CPU立马停下手里的活来执行中断程序,该中断...

    CPU软中断

    1、什么是中断

    中断表示我们请求操作事件准备就绪了,例如从磁盘读取数据,我们知道CPU执行速度比磁盘执行速度快几个数量级,因此如果CPU每次check磁盘是否准备就绪了,那么系统的并发能力和性能会大大下降,但是采用中断方式,异步事件驱动方式来提升系统效率,首先会在驱动程序中嵌入中断程序,一旦磁盘准备就绪就会通过驱动程序发生一个中断请求操作,CPU立马停下手里的活来执行中断程序,该中断程序会从磁盘中读取数据到内存中。

    2、如何避免丢失其他中断请求

    一定要保证中断程序快速能处理,因为当CPU在处理中断时,是不能响应其他中断请求的,那么就会导致其他中断请求丢失

    举个取外卖的例子:我们在app上点外卖,但是这个外卖不知道什么时候到,因为送外卖小哥一旦到了目的地就会放下外卖就走,这个时候你就会一次又一次的check外卖是否到了,然而你什么时候也干不了,仅仅在来来回回看外卖是否到了,导致浪费你的时间。

    改进方式:如果换一种方式,你和外卖小哥约定一个通知方式,例如当外卖到了家门口小哥就打电话通知我,我就出去取外卖。 打电话就是一次中断请求,你就安心的干其他事情,静静等电话。 如果你点了两份外卖,当第一份外卖到了,小哥电话通知你,但是你在电话中沟通发票问题,这个时候第二份外卖到了另外一个小哥给你打电话发现占线,几次尝试后还是失败,这个时候外卖小哥就走了,导致丢失了这次外卖。

    **解决:**在电话中只回答好,然后沟通发票问题当面说,这个时候就可以接到另外小哥的电话。 所以系统的中断请求分为两个阶段:

    第一阶段(上半部请求):接受硬件中断请求(从硬件中取完数据后发送一次软断请求,复杂逻辑交给下半部分请求,),称为硬中断,特点是处理速度快

    第二阶段(下半部请求): 内核线程接受到上半部分软中断请求,就会异步的继续执行上半部未完成的请求, 称为软中断,特点延迟执行

    举个网络接受数据例子:

    当网卡接收到数据时,首先会发送一个硬中断请求,这个时候CPU就会执行中断处理程序,快速将网卡中数据读取到内存中,完成后会发送一个软中断请求,下半部被软中断信号唤醒后就会按照网络协议栈将内存数据进行解析处理,最终递给应用程序。(处理期间还是可以响应其他硬中断请求的)

    中断中的异步事件机制提高并发能力思想应用到了现在流行的网络通讯框架Netty中,提高系统吞吐量,详细了解Netty实现原理Reactor模式

    3、查看硬中断和软中断运行情况

    可以查看 /proc/interrupts 和 /proc/softirq 文件

    从 /proc/softirq文件中可以看到软中断类型
    TIMER(定时中断)、NET_RX(网络接收)、SCHED(内核调度)、RCU(RCU 锁)

    总结

    一般如果软中断占用CPU多时,大多都是系统读取网卡数据太频繁了(要么数据包太小、可能受到了SYNC FLOOD攻击 (交换机或防火墙屏蔽此ip,防止将数据进入系统中))

    展开全文
  • 中断请求级别

    千次阅读 2015-11-03 15:09:59
    Windows有两种中断请求(IRQ, INTERRUPT REQUEST),一种是外部中断,也就是硬件中断,另外一种是软件中断,比如常用的INT 3下个断点。 现在的x86计算机基本都是用高级可编程控制器(Advanced Programmable ...
  • 快速中断请求(Fast Interrupt Request,FIQ) 在ARM中,FIQ模式是特权模式中的一种,同时也属于异常模式一类。用于高速数据传输或通道处理,在触发快速中断请求(FIQ)时进入。 FIQ和IRQ(外部中断模式)之间有很大...
  • 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序)。 #include<...
  • 标签:如何解决irq冲突it如何解决IRQ冲突轻松分配板卡资源...什么是IRQ那么,什么是IRQ(中断请求)呢?中断请求是由某个设备发出并同时请求CPU产生中断的一个请求响应信号。通常情况下,计算机是根据中断请求的优先...
  • ZYNQ PL中断请求

    2018-09-10 09:03:03
    S02_CH07_ ZYNQ PL中断请求 7.1 ZYNQ 中断介绍 7.1.1 ZYNQ中断框图 可以看到本例子中PL到PS部分的中断经过ICD控制器分发器后同时进入CPU1 和CPU0。从下面的表格中可以看到中断向量的具体值。PL到PS部分一共有...
  • 程序中断方式是指:CPU在执行程序的过程中,如果因出现某种随机事件而收到中断请求,则暂时停止现行程序的执行,转去执行一段中断服务程序,以处理该事件,并在处理完毕后自动恢复程序的执行。 中断请求串行优先电路...
  • ZYNQ 7000 PL中断请求

    千次阅读 2018-09-04 14:12:44
    S02_CH07_ ZYNQ PL中断请求 S02_CH07_ ZYNQ PL中断请求 7.1 ZYNQ 中断介绍 7.1.1 ZYNQ中断框图 可以看到本例子中PL到PS部分的中断经过ICD控制器分发器后同时进入CPU1 和CPU0。从下面的表格中可以看到中断...
  • 下面小编就为大家分享一篇vue axios 在页面切换时中断请求方法 ajax,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • IRQL 中断请求级别

    2017-05-26 13:52:55
    IRQL是Interrupt ReQuestLevel,中断请求级别。处理器在一个IRQL上执行线程代码。IRQL是帮助决定线程如何被中断的。在同一处理器上,线程只能被更高级别IRQL的线程能中断。每个处理器都有自己的中断IRQL。 我们经常...
  • 2021计算机考研暑期复习知识点:CPU中断CPU中断什么是中断允许触发器?它有何作用?...解:CPU响应I/O中断请求的条件和时间是:当中断允许状态为1(EINT=1),且至少有一个中断请求被查到,则在一条指令执行完...
  • python中的requests如何中断请求呢? 我是多线程并发去get,但是没找到停止请求操作,只能wait线程结束,我以前用过socket套接字,里面写个状态停止read那种就可以。 requests没找到类似的方法。import requestsfrom...
  • 总结Zynq-7000的PL发送给PS一个中断请求,为FreeRTOS中断做准备。  UG585的P225显示了系统的中断框图,如下图所示。 图:ZYNQ器件的中断框图  UG585的P227画出来中断控制器的框图,如下图所示。PL 到 PS 部分...
  • Windows有两种中断请求(IRQ, INTERRUPT REQUEST),一种是外部中断,也就是硬件中断,另外一种是软件中断,比如常用的INT 3下个断点。 现在的x86计算机基本都是用高级可编程控制器(Advanced Programmable ...
  • linux下查看中断请求记录 IRQ

    万次阅读 2015-08-03 14:43:07
    linux下查看中断请求记录。通过cpu的中断请求的响应,可以看出cpu都在为哪些设备干活,干的活有多少量等信息。 [~]$ cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 0: 1383283707 0 0 0 IO-A
  • 关于中断请求标志位

    千次阅读 2013-07-19 09:22:47
    今天才发现我用了这么长时间的中断服务函数,竟然不知道中断请求标志位到底具体是什么意思~~~悲哀!!!   一般就用了定时器中断服务函数,没关心中断请求标志位,今天才发现,原来定时器中断请求标志位就是...
  • ajax 中断请求

    2020-11-18 11:23:50
    如果该请求已被发出,XMLHttpRequest.abort()方法将终止该请求 当一个请求被终止,它的 readyState将被置为XMLHttpRequest.UNSENT(0),并且请求的status置为 0 (二)原生js代码 <template> <div> ...
  • 这让大家很疑惑,因为当中断请求发生时,也是往这些未决寄存器中置1。那么怎么来区分是中断请求还是清中断呢??  查看了下s3c2440数据手册,上面只是说:“A。如果你从中断服务程序返回却没有清除该位,中断 ...
  • 本文通过按键发起中断请求尝试学习PL请求中断的处理机制。 板子用的是zc702。 ZYNQ是中断类系统框图: 由上图可知,zynq的中断分为三种: 1.软件中断(SGI,Software generatedinterrupts,中断号0-15)...
  • “中断”是一个非常重要的概念,在 80x86 的设备上,Windows 引入了“中断请求级”(IRQL)这一个概念,(在 x86 平台)其中0-2为软件中断,3-31为硬件中断。其中,软件中断从低到高(0,1,2)分别为: IRQL PASSIVE_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,641
精华内容 3,056
关键字:

中断请求