Chiamata di sistema e chiamata di funzione
Un tipico processore esegue le istruzioni una per una. Ma ci possono essere occasioni in cui il processore deve interrompere l'istruzione corrente ed eseguire qualche altro programma o segmento di codice (che risiede in un altro luogo). Dopo aver fatto ciò, il processore torna all'esecuzione normale e continua da dove era stato interrotto. Una chiamata di sistema e una chiamata di funzione sono tali occasioni. Una chiamata di sistema è una chiamata a una subroutine incorporata nel sistema. Una chiamata di funzione è una chiamata a una subroutine all'interno del programma stesso.
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 di farlo da solo) 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 utilizza le chiamate di sistema.
Cos'è una chiamata di funzione?
Una chiamata di funzione è anche chiamata chiamata di subroutine. Una subroutine (nota anche come procedura, funzione, metodo o routine) fa parte di un programma più ampio che è responsabile dell'esecuzione di un'attività specifica. Il programma più grande può eseguire un carico di lavoro pesante e la subroutine può eseguire solo un'attività semplice, che è anche indipendente dalla codifica del programma rimanente. Una funzione è codificata in modo tale da poter essere chiamata più volte e da luoghi diversi (anche dall'interno di altre funzioni). Quando viene chiamata una funzione, il processore può andare dove risiede il codice per la funzione ed eseguire le istruzioni della funzione una per una. Dopo aver completato le funzioni, il processore tornerà esattamente da dove era stato interrotto e continuerà l'esecuzione a partire dall'istruzione successiva. Le funzioni sono un ottimo strumento per il riutilizzo del codice. Molti linguaggi di programmazione moderni supportano le funzioni. Una raccolta di funzioni è chiamata libreria. Le biblioteche sono spesso utilizzate come mezzo di condivisione e scambio di software. In alcuni casi, l'intero programma potrebbe essere una sequenza di subroutine (es. compilazione di codice threaded).
Qual è la differenza tra Chiamata di sistema e Chiamata di funzione?
La chiamata di sistema è una chiamata a una subroutine incorporata nel sistema, mentre una chiamata di funzione è una chiamata a una subroutine all'interno del programma. A differenza delle chiamate di funzione, le chiamate di sistema vengono utilizzate quando un programma deve eseguire alcune attività per le quali non dispone dei privilegi. Le chiamate di sistema sono punti di ingresso nel kernel del sistema operativo e non sono collegate al programma (come le chiamate di funzione). A differenza delle chiamate di sistema, le chiamate di funzione sono portatili. L'overhead di tempo di una chiamata di sistema è maggiore dell'overhead di una chiamata di funzione perché deve avvenire una transizione tra la modalità utente e la modalità kernel. Le chiamate di sistema vengono eseguite nello spazio degli indirizzi del kernel, mentre le chiamate di funzione vengono eseguite nello spazio degli indirizzi dell'utente.