Linux では、割り込みは、必要に応じてハードウェアが CPU に信号を送信するメカニズムであり、CPU はハードウェア要求を処理するために進行中の作業を一時的に停止します。ハードウェアがビジー状態の場合、CPU は多くの無駄な作業 (各ポーリングがスキップされ、処理されない) を実行する可能性が高いため、CPU と周辺ハードウェア (ハードディスク、キーボード) 間の共同作業のパフォーマンスを向上させるために、 、マウスなど)、割り込みメカニズムを紹介します。
#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。
割り込みとは、必要に応じてハードウェアが CPU に信号を送信し、CPU が進行中の作業を一時的に停止することです。ハードウェア要求のメカニズム。
具体的には:
割り込みとは、CPU の通常動作中に内部または外部のイベント、またはプログラムによって事前に準備されたイベントにより、CPU が実行中のプログラムを一時的に停止し、内部または外部のイベントに切り替えることを指します。または、事前に用意されたイベント サービスのプログラムに移動し、サービスが完了した後に戻って、一時的に中断されたプログラムの実行を続行します。
2. プロセッサの速度は周辺ハードウェア デバイスの速度とは桁違いなので、必要に応じてハードウェアがカーネルに信号を送信するメカニズムが提供されます。
ハードウェアがビジー状態の場合、CPU は多くの無駄な作業を行う可能性があります (各ポーリングはスキップされ、処理されません)。
したがって、CPU と周辺ハードウェア (ハードディスク、キーボード、マウスなど) の間の共同作業のパフォーマンスを向上させるために、割り込みメカニズムが導入されます。
#1.2 割り込みとシグナル中断: 硬件/进程发,内核收
信号:内核发,进程收,或者进程发进程收
##1.3 割り込み処理プロセス(CSAPP の書籍を参照してください) 中断是异步发生的,是来自处理器外部的I/O设备的信号的结果
1. 硬件中断不是由任何一条专门的指令造成的,从这个意义上来说它是异步的
2. 硬件中断的异常处理程序常常被称为中断处理程序(interrupt handler)
次の図は、割り込みの処理の概要を示しています。 図 8.5
ネットワーク アダプター、ディスク コントローラー、タイマー チップなどの I/O デバイスは、プロセッサ チップ上のピンに例外を通知します。例外番号が配置されます。この例外番号は、割り込みを引き起こしたデバイスを識別します。 現在の命令の実行が完了する前に、プロセッサは割り込みピンの電圧が高くなったことに気づき、システム バスから例外番号を読み取り、適切な割り込みハンドラーを呼び出します。ハンドラーが戻ると、制御は次の命令 (つまり、割り込みが発生しなかった場合、制御フロー内の現在の命令の後の命令) に戻ります。その結果、プログラムの実行は中断がなかったかのように続行されます。
剩下的异常类型(陷阱、故障和终止)是同步发生的,是执行当前指令的结果 我们把这类指令叫做故障指令(faulting instruction)
1.4 割り込みの本質と処理機構/プロセス割り込みの本質は特殊な電気信号です
処理プロセス: 割り込みはハードウェア デバイスによって生成され、割り込みコントローラー (単純な電子チップ) の入力ピンに直接送信されます。割り込みコントローラーは多重化を使用します。このテクノロジーでは、複数の割り込みパイプラインを使用して、プロセッサーに接続された 1 つのパイプラインのみを介してプロセッサーと通信します。プロセッサがこの信号を検出すると、現在の作業を中断し、割り込みを処理します。ハードウェア デバイスが割り込みを生成するとき、プロセッサのクロックとの同期は考慮されません。つまり、割り込みはいつでも生成できるため、カーネルはいつでも新しい割り込みによって中断される可能性があります。
2.1 同期割り込み(例外/内部割り込み) 同期割り込み(例外/内部割り込み): 同期割り込みCPU 自体によって生成され、内部割り込みまたは例外とも呼ばれます
2.2 非同期割り込み(割り込み/外部割り込み) 非同期割り込み (割り込み/外部割り込み): 非同期割り込みは外部ハードウェア デバイスによって生成され、外部割り込みまたは割り込みとも呼ばれます
当网卡接受到数据包时,通知内核,触发中断,所谓的上半部就是,及时读取数据包到内存,防止因为延迟导致丢失,这是很急迫的工作。
读到内存后,对这些数据的处理不再紧迫,此时内核可以去执行中断前运行的程序,而对网络数据包的处理则交给下半部处理。
异常与中断不同,中断是由硬件引起的;
异常则发生在编程失误而导致错误指令,或者在执行期间出现特殊情况必须要靠内核来处理的时候(比如缺页)。它在产生时必须考虑与处理器时钟同步,因此异常也称同步中断。
中断处理程序运行需要快速执行(因为不可阻塞),同时要能完成尽可能多的工作,这里存在矛盾。
因此把中断处理切分为两个部分,上半部分(top half)接收到一个中断后立即执行,但是只做有严格时限的工作,例如对接收到的中断进行应答或复位硬件。能够被允许稍后完成的工作会推迟到下半部分(bottom half)去,此后在合适的时机下半部分会被中断执行,Linux提供了实现下半部分的各种机制。
优点:这种设计可以使系统处于中断屏蔽状态的时间尽可能的短,以此来提高系统的响应能力。
中断处理程序是上半部——接受中断,他就立即开始执行,但只有做严格时限的工作。
上半部简单快速,执行时禁止一些或者全部中断。
工作内容:处理紧急功能,取寄存器状态。
能够被允许稍后完成的工作会推迟到下半部去,此后,在合适的时机,下半部执行
工作内容:完成中断事件绝大多数任务。
下半部稍后执行,而且执行期间可以响应所有的中断。
下半部的实现有软中断实现, tasklet 实现和工作队列实现。
1) 如果一个任务对时间非常敏感,将其放在中断处理程序中执行; 2) 如果一个任务和硬件有关,将其放在中断处理程序中执行; 3) 如果一个任务要保证不被其他中断打断,将其放在中断处理程序中执行; 4) 其他所有任务,考虑放置在下半部执行
当网卡接受到数据包时,通知内核,触发中断,所谓的上半部就是,及时读取数据包到内存,防止因为延迟导致丢失,这是很急迫的工作。
读到内存后,对这些数据的处理不再紧迫,此时内核可以去执行中断前运行的程序,而对网络数据包的处理则交给下半部处理。
中断对应着一个中断号,内核通过这个中断号查找相应的中断服务程序。
每个中断都通过一个唯一的数字标志,这样操作系统才能够给不同的中断提供对应的中断处理程序。
这些中断值即中断请求线,例如IRQ 0是时钟中断、IRQ 1是键盘中断。对于连接在PCI总线上的设备而言,中断请求线是动态分配的。
中断服务程序不在进程上下文中执行,而是在一个与所有进程都无关的、专门的中断上下文中运行,以此保证中断服务程序能够在第一时间响应和处理中断请求,然后快速地退出。
处理器在任何指定时间点上的活动必然属于以下三种情况之一:
运行于用户空间,执行用户进程; 运行于内核空间,处于进程上下文,代表某个特定的进程执行; (CPU空闲时,内核执行空进程) 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断;
相关推荐:《Linux视频教程》
以上がLinuxの割り込みとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。