2015-11-11 37 views
5

In un sistema operativo, qual è la differenza tra una chiamata di sistema e un'interruzione? Sono tutte le interruzioni delle chiamate di sistema? Sono tutte le chiamate di sistema degli interrupt?In un sistema operativo, qual è la differenza tra una chiamata di sistema e un interrupt?

+0

Esempio di interrupt minimo e il modo in cui Linux lo utilizza per le chiamate di sistema: http://stackoverflow.com/questions/1817577/what-does-int-0x80-mean-in-assembly-code/31836988#31836988 –

risposta

13

Risposta breve: Sono cose diverse.

  • Una chiamata di sistema è una chiamata dal software in esecuzione sul sistema operativo ai servizi forniti dal sistema operativo.
  • Un interrupt è di solito componente hardware esterno che notifica la CPU/microprocessore su un evento che deve essere gestito nel software (di solito un driver).

dico solito esterno, perché alcune interruzioni possono essere sollevati dal software (soft interrupt)

Sono tutti chiamate di sistema gli interrupt? Depends

Sono tutte le chiamate di sistema degli interrupt? No

Risposta lunga: Il sistema operativo gestisce il tempo di CPU e altri componenti hardware collegato alla CPU (Memory (RAM), HDD, tastiera, per citarne alcuni). Espone servizi che consentono ai programmi utente di accedere all'hardware sottostante e sono chiamate di sistema. Solitamente si tratta di allocare memoria, leggere/scrivere file, stampare un documento e così via.

Quando il sistema operativo interagisce con altro hardware, di solito lo fa attraverso un livello driver che imposta l'attività per l'hardware da eseguire e interrompere una volta eseguito il lavoro, in modo che la stampante possa interrompere una volta stampato il documento o esaurisce le pagine È quindi spesso il caso che una chiamata di sistema porti alla generazione di interrupt.

Sono tutte le interruzioni delle chiamate di sistema, a seconda che possano essere implementate come soft interrupt. Pertanto, quando un programma utente effettua una chiamata di sistema, provoca un interrupt morbido che determina l'interruzione del processo di chiamata da parte del sistema operativo e gestisce la richiesta stessa, quindi riprende il processo. Ma, cito da Wikipedia,

"Per molti processori RISC questo (interrupt) è l'unica tecnica disponibile, ma architetture CISC come supporto x86 tecniche aggiuntive. Un esempio è SYSCALL/SYSRET, SYSENTER/SYSEXIT (i due meccanismi erano creati autonomamente rispettivamente da AMD e Intel, ma in sostanza lo fa la stessa cosa) Queste sono istruzioni di trasferimento controllo "rapido" progettate per trasferire rapidamente il controllo al sistema operativo per una chiamata di sistema senza il sovraccarico di un'interruzione "

+0

Grazie per la tua risposta rapida. Quindi gli interrupt sono hardware, ma possono essere causati dalle chiamate di sistema nel software? È corretto? –

+0

"ma può essere causato da chiamate di sistema nel software" sì, il software è una fonte di interruzioni, ma in genere tutte le periferiche generano eventi. Il segno di spunta dell'orologio è un interrupt generato dall'orologio di sistema che non richiede alcun intervento da parte dell'utente o del software. – Ali

+0

Solo per ulteriore confusione, in molte classi di sistemi operativi, tutte le sysc che entrano nel kernel sono descritte come "interrupt", anche se il meccanismo non implica un classico "interrupt software" che simula un interrupt hardware "reale". La parola "interrupt" è anche sovraccaricata ulteriormente in alcune lingue come Java. Sono contento che sia perfettamente chiaro ... :) –

1

La risposta alla tua domanda dipende dall'hardware sottostante (e talvolta dall'implementazione del sistema operativo). Ci ritorno tra un po '.

Lo scopo di un gestore di interrupt e una chiamata di sistema (e un gestore di errori) è in gran parte lo stesso: per passare il processore in modalità kernel fornendo protezione dall'accesso involontario o malevolo alle strutture del kernel.

Un interrupt viene attivato da un evento esterno asincrono. Una chiamata di sistema (o errore o trap) viene attivata in modo sincrono eseguendo il codice.

Questa è quindi la risposta alla prima domanda.

La risposta alla domanda della sezione è che le chiamate di sistema non sono interrotte perché non vengono attivate in modo asincrono dall'hardware. Un processo continua ad eseguire il proprio flusso di codice in una chiamata di sistema, ma non in un interrupt.

Detto questo, la documentazione di Intel spesso confonde interrupt, chiamate di sistema, trap e guasti, come "interrupt".

Alcuni processori trattano trap di chiamate di sistema, guasti e interruzioni in gran parte allo stesso modo. Altri (in particolare Intel) forniscono diversi metodi per implementare le chiamate di sistema.

Nei processori che gestiscono tutto quanto sopra nello stesso modo, ogni tipo di interrupt, trap e fault ha un numero univoco. Il processore si aspetta che il sistema operativo imposti un vettore (array) di puntatori ai gestori. Inoltre, sono disponibili uno o più gestori per un sistema operativo per implementare le chiamate di sistema

A seconda del numero di gestori disponibili, il sistema operativo può disporre di un gestore separato per ogni chiamata di sistema o utilizzare un valore di registro per determinare quale specifico funzione di sistema da eseguire.

In tale sistema, è possibile eseguire un gestore di interrupt in modo sincrono nello stesso modo in cui si invoca una chiamata di sistema.

Per esempio, sul VAX il

CHMK # 4

istruzioni, richiama il gestore modalità kernel 4 °. Nel terreno intel loro è un'istruzione

INT

che fa più o meno lo stesso.

I processori Intel supportano il meccanismo SYSCALL che fornisce un modo diverso di implementare le chiamate di sistema.