GNU/Linux >> Linux Esercitazione >  >> Linux

Come il kernel Linux gestisce gli interrupt

Gli interrupt sono una parte essenziale del funzionamento delle moderne CPU. Ad esempio, ogni volta che si preme un tasto sulla tastiera, la CPU viene interrotta in modo che il PC possa leggere l'input dell'utente dalla tastiera. Ciò accade così rapidamente che non noti alcun cambiamento o compromissione dell'esperienza utente.

Inoltre, la tastiera non è l'unico componente che può causare interruzioni. In generale, esistono tre tipi di eventi che possono causare l'interruzione della CPU:Interrupt hardware , interrupt software e eccezioni . Prima di entrare nei diversi tipi di interrupt, definirò alcuni termini.

Definizioni

Una richiesta di interruzione (IRQ ) è richiesto dal controller di interrupt programmabile (PIC ) con l'obiettivo di interrompere la CPU ed eseguire la routine del servizio di interruzione (ISR ). L'ISR è un piccolo programma che elabora determinati dati a seconda della causa dell'IRQ. La normale elaborazione viene interrotta fino al termine dell'ISR.

In passato, gli IRQ erano gestiti da un microchip separato, il PIC, e i dispositivi I/O erano collegati direttamente al PIC. Il PIC gestiva i vari IRQ hardware e poteva parlare direttamente con la CPU. Quando si verificava un IRQ, il PIC scriveva i dati nella CPU e sollevava la richiesta di interruzione (INTR ) pin.

Al giorno d'oggi, gli IRQ sono gestiti da un controller di interrupt programmabile avanzato (APIC ), che fa parte della CPU. Ogni core ha il suo APIC.

Tipi di interrupt

Come accennato, gli interrupt possono essere separati in tre tipi a seconda della loro origine:

Interrupt hardware

Quando un dispositivo hardware vuole dire alla CPU che determinati dati sono pronti per l'elaborazione (ad esempio, una voce da tastiera o quando un pacchetto arriva all'interfaccia di rete), invia un IRQ per segnalare alla CPU che i dati sono disponibili. Questo richiama un ISR specifico che è stato registrato dal driver del dispositivo durante l'avvio del kernel.

Interrupt software

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Durante la riproduzione di un video, è essenziale sincronizzare la riproduzione di musica e video in modo che la velocità della musica non vari. Ciò si ottiene attraverso un interrupt software che viene attivato ripetutamente da un preciso sistema di timer (noto come jiffies). Questo timer consente al tuo lettore musicale di sincronizzarsi. Un interrupt software può anche essere invocato da un'istruzione speciale per leggere o scrivere dati su un dispositivo hardware.

Gli interrupt software sono fondamentali anche quando è richiesta capacità in tempo reale (come nelle applicazioni industriali). Puoi trovare ulteriori informazioni al riguardo nell'articolo della Linux Foundation Introduzione a Linux in tempo reale per sviluppatori embedded .

Eccezioni

Le eccezioni sono il tipo di interruzione di cui probabilmente conosci. Quando la CPU esegue un comando che comporterebbe una divisione per zero o un errore di pagina, qualsiasi ulteriore esecuzione viene interrotta. In tal caso, verrai informato da una finestra pop-up o dalla visualizzazione di errore di segmentazione (core dumped) nell'output della console. Ma non tutte le eccezioni sono causate da un'istruzione errata.

Le eccezioni possono essere ulteriormente suddivise in Difetti , Trappole e Interruzioni .

  • Difetti: I guasti sono un'eccezione che il sistema può correggere, ad esempio quando un processo tenta di accedere ai dati da una pagina di memoria che è stata scambiata sul disco rigido. L'indirizzo richiesto è all'interno dello spazio degli indirizzi del processo e i diritti di accesso sono corretti. Se la pagina non è presente nella RAM, viene generato un IRQ e viene avviato il gestore delle eccezioni degli errori di pagina per caricare la pagina di memoria desiderata nella RAM. Se l'operazione ha esito positivo, l'esecuzione continuerà.
  • Trappole: Le trap vengono utilizzate principalmente per il debug. Se si imposta un punto di interruzione in un programma, si inserisce un'istruzione speciale che provoca l'attivazione di un trap. Una trap può attivare un cambio di contesto che consente al debugger di leggere e visualizzare i valori delle variabili locali. L'esecuzione può continuare in seguito. Le trap sono anche il modo predefinito per eseguire le chiamate di sistema (come uccidere un processo).
  • Interruzioni: Le interruzioni sono causate da guasti hardware o valori incoerenti nelle tabelle di sistema. Un'interruzione non segnala la posizione dell'istruzione che causa l'eccezione. Questi sono gli interrupt più critici. Un'interruzione richiama il gestore delle eccezioni di interruzione del sistema , che interrompe il processo che l'ha causato.

Mettiti in pratica

Gli IRQ sono ordinati per priorità in un vettore sull'APIC (0=priorità massima). I primi 32 interrupt (0–31) hanno una sequenza fissa specificata dalla CPU. Puoi trovarne una panoramica sulla pagina Eccezioni di OsDev. Gli IRQ successivi possono essere assegnati in modo diverso. La tabella del descrittore di interrupt (IDT ) contiene l'assegnazione tra IRQ e ISR. Linux definisce un vettore IRQ da 0 a 256 per l'assegnazione.

Per stampare un elenco di interrupt registrati sul tuo sistema, apri una console e digita:

cat /proc/interrupts

Dovresti vedere qualcosa del genere:

Da sinistra a destra, le colonne sono:vettore IRQ, conteggio degli interrupt per CPU (0 .. n ), la sorgente hardware, le informazioni sul canale della sorgente hardware e il nome del dispositivo che ha causato l'IRQ.

Nella parte inferiore della tabella sono presenti alcuni interrupt non numerici. Sono gli interrupt specifici dell'architettura, come l'interrupt del timer locale (LOC ) su IRQ 236. Alcuni di essi sono specificati nel layout vettoriale IRQ di Linux nell'albero dei sorgenti del kernel Linux.

Per ottenere una visualizzazione live di questa tabella, eseguire:

watch -n1 "cat /proc/interrupts"

Conclusione

La corretta gestione degli IRQ è essenziale per la corretta interazione di hardware, driver e software. Fortunatamente, il kernel Linux fa davvero un buon lavoro e un normale utente di PC non noterà quasi nulla dell'intera gestione degli interrupt del kernel.

Questo può diventare molto complicato e questo articolo fornisce solo una breve panoramica dell'argomento. Buone fonti di informazioni per approfondire l'argomento sono Linux Inside eBook (CC BY-NC-SA 4.0) e il repository Linux Kernel Teaching.


Linux
  1. Come aggiornare il kernel su desktop Linux

  2. Linux:come abilitare gli spazi dei nomi utente nel kernel? (per "annulla condivisione" senza privilegi.)?

  3. Linux:come trovare le implementazioni delle chiamate di sistema del kernel Linux?

  4. Linux:come determinare quale modulo contamina il kernel?

  5. Come pulire le cache utilizzate dal kernel Linux

Come compilare un kernel Linux nel 21° secolo

Come controllare la versione del kernel in Linux

Come aggiornare il kernel Linux su CentOS 7

Come installare l'ultimo kernel Linux su CentOS 7

In che modo Linux carica l'immagine "initrd"?

In che modo Linux mantiene il controllo della CPU su una macchina single-core?