System Calls: cosa sono le chiamate di sistema e a cosa servono?
Specialmente al giorno d’oggi i sistemi operativi devono offrire agli utenti non solo il massimo comfort possibile ma anche la massima stabilità e sicurezza. Gli sviluppatori di sistemi come Linux o Windows si sforzano pertanto di mantenere il più basso possibile il rischio di potenziali complicazioni del sistema dovute a negligenza personale accidentale o attacchi esterni mirati. Una delle misure più importanti che sono state prese è la rigorosa separazione tra core del sistema operativo (kernel) e programmi applicativi o processi utente. Di conseguenza i programmi e i processi che non appartengono al sistema non hanno accesso diretto alla CPU e alla memoria ma ricorrono alle cosiddette System Calls (it. chiamate di sistema).
Cosa sono esattamente queste chiamate e che tipi di chiamate sono disponibili?
Cos’è una System Call (Syscall)?
Una System Call (in italiano “chiamata di sistema”), abbreviata in Syscall, è un metodo utilizzato dai programmi applicativi per comunicare con il core del sistema. Questo metodo viene utilizzato nei moderni sistemi operativi quando un’applicazione o un processo utente deve trasmettere informazioni all’hardware, ad altri processi o al kernel stesso o visionare informazioni da queste fonti. Questo tipo di chiamata è pertanto l’anello di congiunzione tra la modalità utente (user mode) e la modalità kernel (kernel mode), le due modalità di privilegio e di sicurezza decisive per l’elaborazione dei comandi della CPU nei sistemi informatici.
Fino a quando una System Call non è stata elaborata e i dati corrispondenti non sono stati trasmessi o ricevuti, il core del sistema prende il controllo del programma o processo. In questo lasso di tempo l’esecuzione è interrotta. Non appena l’azione richiesta dalla chiamata di sistema è stata eseguita, il kernel abbandona il controllo e il codice del programma continua dal punto in cui è stata avviata la Syscall.
La maggior parte dei moderni sistemi operativi mette a disposizione alcune System Calls sotto forma di funzioni di libreria, che possono essere eseguite tramite un’interfaccia di programmazione fornita. Ciò semplifica notevolmente il lavoro degli sviluppatori di software poiché successivamente non è necessaria una conoscenza precisa del funzionamento interno del rispettivo software di sistema.
A cosa servono le System Calls?
La necessità delle chiamate di sistema è strettamente legata al moderno modello di sistema operativo con modalità utente e modalità kernel, introdotto in risposta al crescente numero di processi simultanei nella memoria principale (memoria di lavoro) dei computer. Ciò significa che ogni singolo processo ha i propri dati con le proprie autorizzazioni di accesso e che la corretta esecuzione del sistema e dei programmi applicativi è possibile solo se le risorse sono distribuite equamente.
La modalità kernel più privilegiata è l’istanza di controllo decisiva, perché, come già indicato, non solo esegue tutti i servizi e i processi del sistema stesso, ma anche azioni critiche di sistema da parte di programmi applicativi bloccati in modalità utente. Il prerequisito è l’appropriata System Call da parte del rispettivo programma, nella maggior parte dei casi si tratta semplicemente di accedere alla potenza di calcolo (CPU) o alle strutture di memoria (memoria di lavoro e spazio su disco rigido). Se, ad esempio, un’applicazione richiede più potenza di elaborazione o spazio di archiviazione o se è richiesto un file non di applicazione (apertura, lettura, modifica ecc.) le System Calls sono indispensabili.
In termini semplici, la chiamata di sistema è necessaria ogni volta che un processo in esecuzione in modalità utente desidera eseguire una funzione che può essere eseguita solo in modalità kernel.
Quali tipi di System Calls sono disponibili?
In linea di principio, come già accennato, tutte le chiamate di sistema possono essere utilizzate come unità di controllo per la comunicazione tra i processi dell’applicazione e il sistema operativo o l’hardware. Inoltre le System Calls possono essere classificate in diverse categorie, al riguardo sono stati definiti in particolare i seguenti cinque tipi di classificazione:
- Controllo del processo: tutti i processi di un sistema informatico devono essere controllati, affinché possano essere interrotti in qualsiasi momento o essere pilotati da altri processi. A tal fine le System Calls di questa categoria controllano ad esempio l’avvio o l’esecuzione oppure lo stop o l’interruzione dei processi.
- Gestione dei file: i programmi applicativi richiedono chiamate di sistema di questo tipo per ottenere l’accesso alle tipiche operazioni sui file. Tra questi metodi di manipolazione dei file figurano tra l’altro “create” (creare), “delete” (eliminare), “open” (aprire), “close” (chiudere), “write” (scrivere) und “read” (leggere).
- Gestione dei dispositivi: la categoria “Gestione dei dispositivi” comprende tutte le System Calls che servono per richiedere o gestire le risorse hardware necessarie, come potenza di calcolo o spazio di archiviazione.
- Gestione delle informazioni: i processi sono collegati a molte informazioni, in cui la tempestività e l’integrità svolgono un ruolo importante. Per scambiarle o richiederle, i programmi applicativi utilizzano le System Calls di gestione e conservazione delle informazioni.
- Comunicazione tra processi: un’interazione regolare tra il sistema operativo e i vari programmi applicativi attivi è garantita solo se i singoli processi sono ben coordinati tra loro. A tal fine è essenziale la comunicazione tramite System Calls appropriate.
Windows e Linux: panoramica delle System Calls
La possibilità di realizzare o utilizzare i tipi di chiamate di sistema indicati dipende principalmente dall’hardware e dall‘architettura del sistema in uso, ma anche dal sistema operativo. In Linux, ad esempio, le System Calls sono memorizzate direttamente nel kernel Linux nella “System Call Table”. Ad ogni voce di questa tabella sono assegnati un numero univoco e una funzione specifica, da eseguire in modalità kernel. Per eseguire qualsiasi System Call Linux, il rispettivo numero viene caricato nella memoria della CPU e successivamente caricato tramite software interrupt 128 (chiamata di una sotto-funzione del sistema operativo, che interrompe l’esecuzione del programma in modalità utente).
La funzionalità è simile nei sistemi Windows, dove una System Call viene sempre convertita prima internamente: una funzione di libreria dell’API di Windows (in breve WinAPI) diventa automaticamente una chiamata di sistema che può essere letta dal sistema operativo, incluso un numero univoco, che fa riferimento alla funzione desiderata in modalità kernel.
Potete trovare alcuni esempi di System Calls specifiche per Windows e Linux nella seguente tabella:
Tipo di System Calls | Funzione | Linux | Windows |
---|---|---|---|
Controllo di processo | Creare un processo | fork() | CreateProcess() |
Controllo di processo | Terminare un processo | exit() | ExitProcess() |
Gestione dei file | Creare/aprire un file | open() | CreateFile() |
Gestione dei file | Leggere un file | read() | ReadFile() |
Gestione dei file | Scrivere un file | write() | WriteFile() |
Gestione dei file | Chiudere un file | close() | CloseHandle() |
Gestione dei dispositivi | Aprire un dispositivo | read() | ReadConsole() |
Gestione dei dispositivi | Chiudere un dispositivo | close() | CloseConsole() |
Gestione delle informazioni | Definizione di un intervallo di tempo specifico | alarm() | SetTimer() |
Gestione delle informazioni | Sospensione (ad es. di un processo) | sleep() | Sleep() |
Comunicazione | Creare pipe (buffer per il flusso di dati tra due processi) | pipe() | CreatePipe() |
Comunicazione | Creazione di una memoria condivisa (Shared Memory) | shmget() | CreateFileMapping() |
Siete alla ricerca di un hardware potente per elaborare i vostri processi applicativi? Le soluzioni VPS di IONOS vi offrono i server più moderni su base cloud ad un prezzo decisamente conveniente, opzionalmente con Windows o Linux come sistema operativo.