Cosa sono gli interrupt software e hardware e come vengono elaborati?


43

Non sono sicuro di comprendere il concetto di interrupt hardware e software.

Se ho capito bene, lo scopo di un interrupt di processo è attirare l'attenzione della CPU, parte dell'implementazione del multitasking della CPU.

  1. Quindi cosa genera un interrupt di processo? È il processo del driver hardware?
  2. Se sì, dove è in esecuzione il processo del driver hardware? Se è in esecuzione sulla CPU, non dovrà attirare l'attenzione della CPU con l'interruzione hardware, giusto? Quindi corre altrove?
  3. Un interrupt di processo interrompe direttamente la CPU o contatta prima il processo del kernel e il processo del kernel quindi contatta / interrompe la CPU?

D'altra parte, penso che lo scopo di un interrupt software sia che un processo attualmente in esecuzione su una CPU richieda alcune risorse.

  1. Quali sono le risorse? Sono tutti sotto forma di processi in esecuzione? Ad esempio, i processi del driver della CPU e quelli del driver della memoria rappresentano le risorse della CPU e della memoria? Il processo del driver dei dispositivi I / O rappresenta le risorse I / O? Altri processi in esecuzione che il processo vorrebbe comunicare anche con risorse?
  2. Se sì, un software interrompe i processi (che rappresentano le risorse) indirettamente tramite il processo del kernel? È giusto che a differenza di un interrupt di processo, un interrupt di software non interrompa mai direttamente la CPU, ma invece interrompe / contatta il processo del kernel?

Risposte:


55

Un interrupt di processo non fa realmente parte del multitasking della CPU, ma può guidarlo.

  1. Gli interrupt di processo vengono emessi da dispositivi hardware come disco, schede di rete, tastiere, orologi, ecc. Ogni dispositivo o set di dispositivi avrà la propria linea IRQ (Interrupt ReQuest). Sulla base dell'IRQ, la CPU invierà la richiesta al driver hardware appropriato. (I driver hardware sono generalmente subroutine all'interno del kernel piuttosto che un processo separato.)

  2. Il driver che gestisce l'interrupt viene eseguito sulla CPU. La CPU viene interrotta da ciò che stava facendo per gestire l'interruzione, quindi non è necessario altro per attirare l'attenzione della CPU. Nei sistemi multiprocessore, un interruzione di solito interrompe solo una delle CPU. (Come casi speciali, i mainframe hanno canali hardware che possono gestire più interrupt senza supporto dalla CPU principale.)

  3. L'interruzione hardware interrompe direttamente la CPU. Ciò provocherà l'attivazione del codice rilevante nel processo del kernel. Per i processi che richiedono del tempo per l'elaborazione, il codice di interruzione può consentire a se stesso di essere interrotto da altri interrupt di processo.

    In caso di interruzione del timer, il codice dello scheduler del kernel può sospendere il processo in esecuzione e consentire l'esecuzione di un altro processo. È la presenza del codice dello scheduler che abilita il multitasking.

Gli interrupt software vengono elaborati in modo molto simile agli interrupt hardware. Tuttavia, possono essere generati solo da processi attualmente in esecuzione.

  1. In genere gli interrupt software sono richieste di I / O (input o output). Questi chiameranno routine del kernel che pianificheranno l'I / O. Per alcuni dispositivi l'I / O verrà eseguito immediatamente, ma l'I / O del disco viene solitamente messo in coda e fatto in un secondo momento. A seconda dell'I / O in corso, il processo può essere sospeso fino al completamento dell'I / O, facendo sì che lo scheduler del kernel selezioni un altro processo da eseguire. L'I / O può verificarsi tra i processi e l'elaborazione è normalmente pianificata allo stesso modo dell'I / O del disco.

  2. L'interrupt software parla solo al kernel. È responsabilità del kernel pianificare tutti gli altri processi che devono essere eseguiti. Questo potrebbe essere un altro processo alla fine di un tubo. Alcuni kernel consentono ad alcune parti di un driver di dispositivo di esistere nello spazio utente e il kernel pianificherà l'esecuzione di questo processo quando necessario.

    È corretto che un interrupt software non interrompa direttamente la CPU. Solo il codice attualmente in esecuzione può generare un interrupt software. L'interrupt è una richiesta per il kernel di fare qualcosa (di solito I / O) per eseguire il processo. Un interrupt software speciale è una chiamata Yield, che richiede allo scheduler del kernel di verificare se è possibile eseguire qualche altro processo.

Risposta al commento:

  1. Per le richieste I / O, il kernel delega il lavoro al driver del kernel appropriato. La routine può mettere in coda l'I / O per l'elaborazione successiva (comune per l'I / O del disco) o eseguirla immediatamente se possibile. La coda è gestita dal driver, spesso quando risponde a interruzioni hardware. Al termine di un I / O, l'elemento successivo nella coda viene inviato al dispositivo.

  2. Sì, gli interrupt software evitano la fase di segnalazione hardware. Il processo che genera la richiesta software deve essere un processo attualmente in esecuzione, quindi non interrompere la CPU. Tuttavia, interrompono il flusso del codice chiamante.

    Se l'hardware deve fare in modo che la CPU faccia qualcosa, la CPU interrompe la sua attenzione sul codice in esecuzione. La CPU spingerà il suo stato attuale su uno stack in modo che possa successivamente tornare a quello che stava facendo. L'interruzione potrebbe interrompersi: un programma in esecuzione; il codice del kernel gestisce un altro interrupt; o il processo inattivo.


Grazie! (1) Nell'interruzione del software, le operazioni di I / O vengono eseguite dalla routine del driver del dispositivo I / O all'interno del processo del kernel? (2) è giusto che il percorso che attraversa l'interrupt software sia un passo più breve del percorso per l'interrupt hardware? In altre parole, per l'interruzione del software: programma software -> routine del driver del dispositivo all'interno del processo del kernel; per interrupt di processo: hardware -> CPU -> routine del driver di dispositivo all'interno del processo del kernel?
Tim

Grazie! È giusto che l'interruzione hardware induca la CPU a trasferire il suo stato corrente su uno stack in modo che il driver hardware possa funzionare sulla CPU e successivamente ripristinare il processo interrotto sulla CPU? L'interruzione del software provoca anche l'inserimento del processo in esecuzione nella CPU in modo che il servizio richiesto possa essere eseguito sulla CPU?
Tim

Entrambi gli interrupt faranno sì che lo stato venga inserito nello stack. Ciò consente al sistema di ricaricare lo stato al termine dell'interrupt.
BillThor,

Grazie! se il servizio richiesto non verrà eseguito sulla CPU come operazioni IO eseguite su IO Device anziché CPU e il processo di richiesta può continuare a funzionare senza attendere il completamento del servizio richiesto, il processo di richiesta verrà comunque inserito in uno stack ?
Tim

Normalmente, la lettura dell'I / O viene chiamata in modo sincrono e il processo non verrà eseguito fino al completamento dell'I / O. Per leggere lo desideri quasi sempre. Le scritture di solito si verificano in modo asincrono consentendo al processo di continuare l'esecuzione.
BillThor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.