Chiamata di sistema vs interruzione
Un tipico processore esegue le istruzioni una per una. Ma ci possono essere occasioni in cui il processore deve fermarsi temporaneamente e mantenere l'istruzione corrente ed eseguire qualche altro programma o segmento di codice (che risiede in un altro posto). Dopo aver fatto ciò, il processore torna all'esecuzione normale e continua da dove era stato interrotto. Una chiamata di sistema e un'interruzione sono tali occasioni. Una chiamata di sistema è una chiamata a una subroutine incorporata nel sistema. Un interrupt è un'interruzione del controllo del programma causata da eventi hardware esterni.
Cos'è una chiamata di sistema?
Le chiamate di sistema forniscono ai programmi in esecuzione sul computer un'interfaccia per comunicare con il sistema operativo. Quando un programma ha bisogno di chiedere un servizio (per il quale non ha il permesso stesso) dal kernel del sistema operativo, usa una chiamata di sistema. I processi a livello utente non hanno le stesse autorizzazioni dei processi che interagiscono direttamente con il sistema operativo. Ad esempio, per comunicare con un dispositivo I/O esterno o per interagire con qualsiasi altro processo, un programma deve utilizzare le chiamate di sistema.
Cos'è un'interruzione?
Durante la normale esecuzione di un programma per computer, potrebbero verificarsi eventi che possono causare l'arresto temporaneo della CPU. Eventi come questo sono chiamati interrupt. Gli interrupt possono essere causati da errori software o hardware. Gli interrupt hardware sono chiamati (semplicemente) Interrupt, mentre gli interrupt software sono chiamati Eccezioni o Trap. Una volta che un interrupt (software o hardware) viene generato, il controllo viene trasferito a una speciale subroutine denominata ISR (Interrupt Service Routine) in grado di gestire le condizioni che vengono generate dall'interrupt.
Come accennato in precedenza, il termine Interrupt è solitamente riservato agli interrupt hardware. Sono interruzioni del controllo del programma causate da eventi hardware esterni. Qui esterno significa esterno alla CPU. Gli interrupt hardware di solito provengono da molte fonti diverse come chip timer, dispositivi periferici (tastiere, mouse, ecc.), porte I/O (seriale, parallela, ecc.), unità disco, clock CMOS, schede di espansione (scheda audio, video carta, ecc.). Ciò significa che gli interrupt hardware non si verificano quasi mai a causa di qualche evento correlato al programma in esecuzione. Ad esempio, un evento come la pressione di un tasto sulla tastiera da parte dell'utente o un timeout del timer hardware interno può generare questo tipo di interruzione e può informare la CPU che un determinato dispositivo necessita di attenzione. In una situazione del genere la CPU interromperà qualsiasi cosa stesse facendo (cioè sospende il programma corrente), fornisce il servizio richiesto dal dispositivo e tornerà al programma normale.
Qual è la differenza tra Chiamata di sistema e Interruzione?
La chiamata di sistema è una chiamata a una subroutine incorporata nel sistema, mentre Interrupt è un evento che fa sì che il processore sospenda temporaneamente l'esecuzione corrente. Tuttavia, una delle principali differenze è che le chiamate di sistema sono sincrone, mentre gli interrupt non lo sono. Ciò significa che le chiamate di sistema si verificano a un'ora fissa (solitamente determinata dal programmatore), ma possono verificarsi interruzioni in qualsiasi momento a causa di un evento imprevisto come la pressione di un tasto sulla tastiera da parte dell'utente. Pertanto, ogni volta che si verifica una chiamata di sistema, il processore deve solo ricordare dove tornare, ma in caso di interruzione, il processore deve ricordare sia il luogo in cui tornare sia lo stato del sistema. A differenza di una chiamata di sistema, un'interruzione di solito non ha nulla a che fare con il programma corrente.