it-swarm.it

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

Non sono sicuro di aver compreso il concetto di interrupt hardware e software.

Se ho capito bene, lo scopo di un interrupt di processo è di 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?
45
Tim

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 il supporto della 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 potrebbe 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 eseguito 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 al 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.

57
BillThor