Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Was ist Interrupt unter Linux?

Was ist Interrupt unter Linux?

青灯夜游
青灯夜游Original
2023-04-20 16:34:492481Durchsuche

Unter Linux ist ein Interrupt ein Mechanismus, bei dem die Hardware bei Bedarf ein Signal an die CPU sendet und die CPU die laufende Arbeit vorübergehend stoppt, um die Hardwareanforderung zu bearbeiten. Wenn die Hardware ausgelastet ist, verrichtet die CPU wahrscheinlich eine Menge nutzloser Arbeit (jede Abfrage wird übersprungen und nicht verarbeitet), um die Leistung der Zusammenarbeit zwischen der CPU und der Peripheriehardware (Festplatte, Tastatur) zu verbessern , Maus usw.), Einführung in den Interrupt-Mechanismus.

Was ist Interrupt unter Linux?

Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer.

1. Interrupt-Definition

Interrupt ist ein Mechanismus, bei dem die Hardware bei Bedarf ein Signal an die CPU sendet und die CPU die laufende Arbeit vorübergehend stoppt, um die Hardware-Anfrage zu bearbeiten.

Im Einzelnen:
Ein Interrupt bedeutet, dass die CPU während des normalen Betriebs der CPU aufgrund interner oder externer Ereignisse oder durch das Programm vorab angeordneter Ereignisse das laufende Programm vorübergehend stoppt und auf die Bereitstellung des internen oder externen Ereignisses oder des vorab vereinbarten Ereignisses umschaltet. Starten Sie das Programm und kehren Sie dann zurück, um das vorübergehend unterbrochene Programm weiter auszuführen, nachdem der Dienst abgeschlossen ist.

1.1 Hintergrund (warum Interrupts benötigt werden)

1 Ohne Interrupts besteht die einzige Möglichkeit, zwischen der CPU und den Peripheriegeräten zu arbeiten/zu kommunizieren: Die CPU überprüft regelmäßig den Hardwarestatus und verarbeitet ihn Bei Bedarf verarbeiten, andernfalls überspringen.
2. Die Geschwindigkeit des Prozessors liegt nicht in der gleichen Größenordnung wie die der peripheren Hardwaregeräte, daher ist ein Mechanismus vorgesehen, mit dem die Hardware bei Bedarf Signale an den Kernel senden kann.

Nachteile der Abfrage/Einführung eines Interrupt-Mechanismus:
Wenn die Hardware ausgelastet ist, verrichtet die CPU wahrscheinlich viel nutzlose Arbeit (jede Abfrage wird übersprungen und nicht verarbeitet).
Um die Leistung der Zusammenarbeit zwischen CPU und Peripheriehardware (Festplatte, Tastatur, Maus usw.) zu verbessern, wird daher ein Interrupt-Mechanismus eingeführt.

1.2 Interrupts und Signale

中断: 硬件/进程发,内核收
信号:内核发,进程收,或者进程发进程收

1.3 Interrupt-Handhabungsprozess (siehe CSAPP-Bücher)

中断是异步发生的,是来自处理器外部的I/O设备的信号的结果

1. 硬件中断不是由任何一条专门的指令造成的,从这个意义上来说它是异步的
2. 硬件中断的异常处理程序常常被称为中断处理程序(interrupt handler)

Die folgende Abbildung zeigt die Verarbeitung eines Interrupts.
Abbildung 8.5
Was ist Interrupt unter Linux?

E/A-Geräte wie Netzwerkadapter, Festplattencontroller und Timer-Chips lösen Interrupts aus, indem sie einen Pin auf dem Prozessorchip signalisieren und eine Ausnahmenummer auf dem Systembus platzieren. Diese Ausnahmenummer identifiziert die Gerät, das den Interrupt verursacht hat.
Bevor die aktuelle Anweisung die Ausführung abschließt, bemerkt der Prozessor, dass die Spannung am Interrupt-Pin hoch wird, liest die Ausnahmenummer vom Systembus und ruft den entsprechenden Interrupt-Handler auf. Wenn der Handler zurückkehrt, gibt er die Kontrolle an die nächste Anweisung zurück (d. h. an die Anweisung, die nach der aktuellen Anweisung im Kontrollfluss stehen würde, wenn kein Interrupt aufgetreten wäre). Das Ergebnis ist, dass die Programmausführung so fortgesetzt wird, als ob die Unterbrechung nicht aufgetreten wäre.

剩下的异常类型(陷阱、故障和终止)是同步发生的,是执行当前指令的结果
我们把这类指令叫做故障指令(faulting instruction)

1.4 Die Natur von Interrupts und der Verarbeitungsmechanismus/Prozess

Die Natur von Interrupts ist ein spezielles elektrisches Signal

Was ist Interrupt unter Linux?

Verarbeitungsprozess:
Interrupts werden von Hardwaregeräten generiert und direkt an die gesendet Interrupt-Controller Unter den Eingangspins eines einfachen elektronischen Chips nutzt der Interrupt-Controller Multiplexing-Technologie, um mit dem Prozessor über nur eine mit dem Prozessor verbundene Pipeline zu kommunizieren. Sobald der Prozessor dieses Signal erkennt, unterbricht er seine aktuelle Arbeit und verarbeitet den Interrupt. Wenn Hardwaregeräte Interrupts generieren, berücksichtigen sie nicht die Synchronisation mit der Prozessoruhr, d. h. Interrupts können jederzeit generiert werden, sodass der Kernel jederzeit durch neue Interrupts unterbrochen werden kann.

2. Interrupt-Typen (Kategorien)

Linux wird normalerweise in externe Interrupts (auch Hardware-Interrupts genannt) und interne Interrupts (auch Ausnahmen genannt) unterteilt.

2.1 Synchroner Interrupt (Ausnahme/interner Interrupt)

Synchroner Interrupt (Ausnahme/interner Interrupt): Synchroner Interrupt wird von der CPU selbst generiert, auch bekannt als interner Interrupt oder Ausnahme

2.1 .1 Beispiel für einen synchronen Interrupt: Interrupt wegen fehlender Seite

Wenn die CPU einen Befehl ausführt und feststellt, dass sich die Seite, auf die sie zugreifen möchte (die Seite der virtuellen Adresse), nicht im physischen Speicher befindet, stoppt sie die Ausführung der Anweisung und generieren Sie eine Seite, die nicht vorhanden ist.
Eine ausführbare Datei kann sehr groß sein und jeweils nur einen Teil davon in den Speicher einlesen (Prinzip der CPU-Lokalität). Wenn Sie auf den verbleibenden Inhalt zugreifen möchten, tritt ein Seitenfehler-Interrupt auf. Zu diesem Zeitpunkt wird er von der Festplatte eingelesen (Interrupt/externer Interrupt): Ein asynchroner Interrupt wird von einem externen Hardwaregerät generiert, auch externer Interrupt oder Interrupt genannt

2.2.1 异步中断举例:网卡的工作原理

当网卡接受到数据包时,通知内核,触发中断,所谓的上半部就是,及时读取数据包到内存,防止因为延迟导致丢失,这是很急迫的工作。
读到内存后,对这些数据的处理不再紧迫,此时内核可以去执行中断前运行的程序,而对网络数据包的处理则交给下半部处理。

2.3 中断与异常的区别

异常与中断不同,中断是由硬件引起的;
异常则发生在编程失误而导致错误指令,或者在执行期间出现特殊情况必须要靠内核来处理的时候(比如缺页)。它在产生时必须考虑与处理器时钟同步,因此异常也称同步中断。

3、中断请求实现:上下半部机制

3.1 背景

中断处理程序运行需要快速执行(因为不可阻塞),同时要能完成尽可能多的工作,这里存在矛盾。

因此把中断处理切分为两个部分,上半部分(top half)接收到一个中断后立即执行,但是只做有严格时限的工作,例如对接收到的中断进行应答或复位硬件。能够被允许稍后完成的工作会推迟到下半部分(bottom half)去,此后在合适的时机下半部分会被中断执行,Linux提供了实现下半部分的各种机制。

优点:这种设计可以使系统处于中断屏蔽状态的时间尽可能的短,以此来提高系统的响应能力。

3.2 上半部:

中断处理程序是上半部——接受中断,他就立即开始执行,但只有做严格时限的工作。
上半部简单快速,执行时禁止一些或者全部中断。
工作内容:处理紧急功能,取寄存器状态。

3.3 下半部:

能够被允许稍后完成的工作会推迟到下半部去,此后,在合适的时机,下半部执行
工作内容:完成中断事件绝大多数任务。
下半部稍后执行,而且执行期间可以响应所有的中断。
下半部的实现有软中断实现, tasklet 实现和工作队列实现。

3.4 上下半部划分原则

1) 如果一个任务对时间非常敏感,将其放在中断处理程序中执行;
2) 如果一个任务和硬件有关,将其放在中断处理程序中执行;
3) 如果一个任务要保证不被其他中断打断,将其放在中断处理程序中执行;
4) 其他所有任务,考虑放置在下半部执行

3.5 举例子: 用网卡来解释一下这两半。

当网卡接受到数据包时,通知内核,触发中断,所谓的上半部就是,及时读取数据包到内存,防止因为延迟导致丢失,这是很急迫的工作。
读到内存后,对这些数据的处理不再紧迫,此时内核可以去执行中断前运行的程序,而对网络数据包的处理则交给下半部处理。

4、中断号

中断对应着一个中断号,内核通过这个中断号查找相应的中断服务程序。

每个中断都通过一个唯一的数字标志,这样操作系统才能够给不同的中断提供对应的中断处理程序。
这些中断值即中断请求线,例如IRQ 0是时钟中断、IRQ 1是键盘中断。对于连接在PCI总线上的设备而言,中断请求线是动态分配的。

5、中断上下文

中断服务程序不在进程上下文中执行,而是在一个与所有进程都无关的、专门的中断上下文中运行,以此保证中断服务程序能够在第一时间响应和处理中断请求,然后快速地退出。

处理器在任何指定时间点上的活动必然属于以下三种情况之一:

运行于用户空间,执行用户进程;
运行于内核空间,处于进程上下文,代表某个特定的进程执行;
			 (CPU空闲时,内核执行空进程)
运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断;

相关推荐:《Linux视频教程

Das obige ist der detaillierte Inhalt vonWas ist Interrupt unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn