Maison >Opération et maintenance >exploitation et maintenance Linux >qu'est-ce qu'une interruption sous Linux

qu'est-ce qu'une interruption sous Linux

青灯夜游
青灯夜游original
2023-04-20 16:34:492539parcourir

Sous Linux, une interruption est un mécanisme par lequel le matériel envoie un signal au processeur en cas de besoin, et le processeur arrête temporairement le travail en cours pour gérer la demande matérielle. Lorsque le matériel est occupé, le CPU est susceptible d'effectuer beaucoup de travail inutile (chaque interrogation est donc ignorée et non traitée, afin d'améliorer les performances du travail collaboratif entre le CPU et le matériel périphérique (disque dur, clavier) ; , souris, etc.), introduisez le mécanisme d'interruption.

qu'est-ce qu'une interruption sous Linux

L'environnement d'exploitation de ce tutoriel : système linux7.3, ordinateur Dell G3.

1. Définition de l'interruption

L'interruption est un mécanisme dans lequel le matériel envoie un signal au CPU en cas de besoin, et le CPU arrête temporairement le travail en cours pour gérer la demande matérielle.

Plus précisément :
Une interruption signifie que pendant le fonctionnement normal du CPU, en raison d'événements internes ou externes ou d'événements pré-arrangés par le programme, le CPU arrête temporairement le programme en cours et passe au service de l'événement interne ou externe ou de l'événement pré-arrangé. programme, puis revenez pour continuer à exécuter le programme temporairement interrompu une fois le service terminé.

1.1 Contexte (pourquoi des interruptions sont nécessaires)

1 Sans interruption, la seule façon de travailler/communiquer entre le CPU et les périphériques est par interrogation : le CPU vérifie régulièrement l'état du matériel et le traite. si nécessaire Traiter, sinon ignorer.
2. La vitesse du processeur n'est pas du même ordre de grandeur que celle des périphériques matériels, donc un mécanisme est fourni pour que le matériel envoie des signaux au noyau en cas de besoin.

Inconvénients de l'interrogation/introduction d'un mécanisme d'interruption :
Lorsque le matériel est occupé, le CPU est susceptible de faire beaucoup de travail inutile (chaque interrogation est ignorée et non traitée).
Par conséquent, afin d'améliorer les performances du travail collaboratif entre le CPU et le matériel périphérique (disque dur, clavier, souris, etc.), un mécanisme d'interruption est introduit.

1.2 Interruptions et signaux

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

1.3 Processus de traitement des interruptions (voir les livres CSAPP)

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

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

La figure suivante décrit le traitement d'une interruption.
Figure 8.5
quest-ce quune interruption sous Linux

Les périphériques d'E/S, tels que les adaptateurs réseau, les contrôleurs de disque et les puces de minuterie, déclenchent des interruptions en signalant une broche sur la puce du processeur et en plaçant un numéro d'exception sur le bus système, ce numéro d'exception identifie le. périphérique qui a provoqué l’interruption.
Avant la fin de l'exécution de l'instruction en cours, le processeur remarque que la tension sur la broche d'interruption devient élevée, lit le numéro d'exception sur le bus système et appelle le gestionnaire d'interruption approprié. Lorsque le gestionnaire revient, il rend le contrôle à l'instruction suivante (c'est-à-dire l'instruction qui se trouverait après l'instruction actuelle dans le flux de contrôle si aucune interruption ne s'était produite). Le résultat est que l'exécution du programme continue comme si l'interruption ne s'était pas produite.

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

1.4 La nature des interruptions et le mécanisme/processus de traitement

La nature des interruptions est un signal électrique spécial

quest-ce quune interruption sous Linux

Processus de traitement :
Les interruptions sont générées par les périphériques matériels et envoyées directement au contrôleur d'interruption Parmi les broches d'entrée d'une simple puce électronique, le contrôleur d'interruption utilise la technologie de multiplexage pour communiquer avec le processeur via un seul pipeline connecté au processeur. Une fois que le processeur détecte ce signal, il interrompt son travail en cours et traite l'interruption. Lorsque les périphériques matériels génèrent des interruptions, ils ne prennent pas en compte la synchronisation avec l'horloge du processeur, c'est-à-dire que des interruptions peuvent être générées à tout moment, de sorte que le noyau peut être interrompu à tout moment par de nouvelles interruptions.

2. Types d'interruptions (catégories)

Linux est généralement divisé en interruptions externes (également appelées interruptions matérielles) et en interruptions internes (également appelées exceptions).

2.1 Interruption synchrone (exception/interruption interne)

Interruption synchrone (exception/interruption interne) : L'interruption synchrone est générée par le processeur lui-même, également appelée interruption interne ou exception

2.1 .1 Exemple d'interruption synchrone : interruption de page manquante

Lorsque le CPU exécute une instruction, s'il constate que la page à laquelle il veut accéder (la page de l'adresse virtuelle) n'est pas dans la mémoire physique, il arrêtera l'exécution de l'instruction et générer une page qui n'existe pas. Exception
Un fichier exécutable peut être très volumineux et placé sur le disque. Seule une partie de celui-ci est lue en mémoire à la fois (principe de localité cpu
). veut accéder au contenu restant, une interruption de défaut de page se produira à ce moment-là, elle sera lue à partir de l'échange sur le disque

2.2 Interruption asynchrone (interruption/interruption externe)

Interruption asynchrone. (interruption/interruption externe) : une interruption asynchrone est générée par un périphérique matériel externe, également appelé interruption externe ou interruption

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视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn