Spe­cial­men­te 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 svi­lup­pa­to­ri di sistemi come Linux o Windows si sforzano pertanto di mantenere il più basso possibile il rischio di po­ten­zia­li com­pli­ca­zio­ni del sistema dovute a ne­gli­gen­za personale ac­ci­den­ta­le o attacchi esterni mirati. Una delle misure più im­por­tan­ti che sono state prese è la rigorosa se­pa­ra­zio­ne tra core del sistema operativo (kernel) e programmi ap­pli­ca­ti­vi o processi utente. Di con­se­guen­za i programmi e i processi che non ap­par­ten­go­no al sistema non hanno accesso diretto alla CPU e alla memoria ma ricorrono alle co­sid­det­te System Calls (it. chiamate di sistema).

Cosa sono esat­ta­men­te queste chiamate e che tipi di chiamate sono di­spo­ni­bi­li?

Cos’è una System Call (Syscall)?

Una System Call (in italiano “chiamata di sistema”), ab­bre­via­ta in Syscall, è un metodo uti­liz­za­to dai programmi ap­pli­ca­ti­vi per co­mu­ni­ca­re con il core del sistema. Questo metodo viene uti­liz­za­to nei moderni sistemi operativi quando un’ap­pli­ca­zio­ne o un processo utente deve tra­smet­te­re in­for­ma­zio­ni all’hardware, ad altri processi o al kernel stesso o visionare in­for­ma­zio­ni da queste fonti. Questo tipo di chiamata è pertanto l’anello di con­giun­zio­ne tra la modalità utente (user mode) e la modalità kernel (kernel mode), le due modalità di pri­vi­le­gio e di sicurezza decisive per l’ela­bo­ra­zio­ne dei comandi della CPU nei sistemi in­for­ma­ti­ci.

Fino a quando una System Call non è stata elaborata e i dati cor­ri­spon­den­ti non sono stati trasmessi o ricevuti, il core del sistema prende il controllo del programma o processo. In questo lasso di tempo l’ese­cu­zio­ne è in­ter­rot­ta. 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.

N.B.

La maggior parte dei moderni sistemi operativi mette a di­spo­si­zio­ne alcune System Calls sotto forma di funzioni di libreria, che possono essere eseguite tramite un’in­ter­fac­cia di pro­gram­ma­zio­ne fornita. Ciò sem­pli­fi­ca no­te­vol­men­te il lavoro degli svi­lup­pa­to­ri di software poiché suc­ces­si­va­men­te non è ne­ces­sa­ria una co­no­scen­za precisa del fun­zio­na­men­to interno del ri­spet­ti­vo software di sistema.

A cosa servono le System Calls?

La necessità delle chiamate di sistema è stret­ta­men­te legata al moderno modello di sistema operativo con modalità utente e modalità kernel, in­tro­dot­to in risposta al crescente numero di processi si­mul­ta­nei nella memoria prin­ci­pa­le (memoria di lavoro) dei computer. Ciò significa che ogni singolo processo ha i propri dati con le proprie au­to­riz­za­zio­ni di accesso e che la corretta ese­cu­zio­ne del sistema e dei programmi ap­pli­ca­ti­vi è possibile solo se le risorse sono di­stri­bui­te equamente.

La modalità kernel più pri­vi­le­gia­ta è 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 ap­pli­ca­ti­vi bloccati in modalità utente. Il pre­re­qui­si­to è l’ap­pro­pria­ta System Call da parte del ri­spet­ti­vo programma, nella maggior parte dei casi si tratta sem­pli­ce­men­te di accedere alla potenza di calcolo (CPU) o alle strutture di memoria (memoria di lavoro e spazio su disco rigido). Se, ad esempio, un’ap­pli­ca­zio­ne richiede più potenza di ela­bo­ra­zio­ne o spazio di ar­chi­via­zio­ne o se è richiesto un file non di ap­pli­ca­zio­ne (apertura, lettura, modifica ecc.) le System Calls sono in­di­spen­sa­bi­li.

In sintesi

In termini semplici, la chiamata di sistema è ne­ces­sa­ria ogni volta che un processo in ese­cu­zio­ne in modalità utente desidera eseguire una funzione che può essere eseguita solo in modalità kernel.

Quali tipi di System Calls sono di­spo­ni­bi­li?

In linea di principio, come già accennato, tutte le chiamate di sistema possono essere uti­liz­za­te come unità di controllo per la co­mu­ni­ca­zio­ne tra i processi dell’ap­pli­ca­zio­ne e il sistema operativo o l’hardware. Inoltre le System Calls possono essere clas­si­fi­ca­te in diverse categorie, al riguardo sono stati definiti in par­ti­co­la­re i seguenti cinque tipi di clas­si­fi­ca­zio­ne:

  • Controllo del processo: tutti i processi di un sistema in­for­ma­ti­co devono essere con­trol­la­ti, affinché possano essere in­ter­rot­ti in qualsiasi momento o essere pilotati da altri processi. A tal fine le System Calls di questa categoria con­trol­la­no ad esempio l’avvio o l’ese­cu­zio­ne oppure lo stop o l’in­ter­ru­zio­ne dei processi.
  • Gestione dei file: i programmi ap­pli­ca­ti­vi ri­chie­do­no chiamate di sistema di questo tipo per ottenere l’accesso alle tipiche ope­ra­zio­ni sui file. Tra questi metodi di ma­ni­po­la­zio­ne dei file figurano tra l’altro “create” (creare), “delete” (eliminare), “open” (aprire), “close” (chiudere), “write” (scrivere) und “read” (leggere).
  • Gestione dei di­spo­si­ti­vi: la categoria “Gestione dei di­spo­si­ti­vi” comprende tutte le System Calls che servono per ri­chie­de­re o gestire le risorse hardware ne­ces­sa­rie, come potenza di calcolo o spazio di ar­chi­via­zio­ne.
  • Gestione delle in­for­ma­zio­ni: i processi sono collegati a molte in­for­ma­zio­ni, in cui la tem­pe­sti­vi­tà e l’integrità svolgono un ruolo im­por­tan­te. Per scam­biar­le o ri­chie­der­le, i programmi ap­pli­ca­ti­vi uti­liz­za­no le System Calls di gestione e con­ser­va­zio­ne delle in­for­ma­zio­ni.
  • Co­mu­ni­ca­zio­ne tra processi: un’in­te­ra­zio­ne regolare tra il sistema operativo e i vari programmi ap­pli­ca­ti­vi attivi è garantita solo se i singoli processi sono ben coor­di­na­ti tra loro. A tal fine è es­sen­zia­le la co­mu­ni­ca­zio­ne tramite System Calls ap­pro­pria­te.

Windows e Linux: pa­no­ra­mi­ca delle System Calls

La pos­si­bi­li­tà di rea­liz­za­re o uti­liz­za­re i tipi di chiamate di sistema indicati dipende prin­ci­pal­men­te dall’hardware e dall‘ar­chi­tet­tu­ra del sistema in uso, ma anche dal sistema operativo. In Linux, ad esempio, le System Calls sono me­mo­riz­za­te di­ret­ta­men­te 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 ri­spet­ti­vo numero viene caricato nella memoria della CPU e suc­ces­si­va­men­te caricato tramite software interrupt 128 (chiamata di una sotto-funzione del sistema operativo, che in­ter­rom­pe l’ese­cu­zio­ne del programma in modalità utente).

La fun­zio­na­li­tà è simile nei sistemi Windows, dove una System Call viene sempre con­ver­ti­ta prima in­ter­na­men­te: una funzione di libreria dell’API di Windows (in breve WinAPI) diventa au­to­ma­ti­ca­men­te una chiamata di sistema che può essere letta dal sistema operativo, incluso un numero univoco, che fa ri­fe­ri­men­to alla funzione de­si­de­ra­ta in modalità kernel.

Potete trovare alcuni esempi di System Calls spe­ci­fi­che per Windows e Linux nella seguente tabella:

Tipo di System Calls Funzione Linux Windows
Controllo di processo Creare un processo fork() Crea­te­Pro­cess()
Controllo di processo Terminare un processo exit() Exit­Pro­cess()
Gestione dei file Creare/aprire un file open() Crea­te­Fi­le()
Gestione dei file Leggere un file read() ReadFile()
Gestione dei file Scrivere un file write() WriteFile()
Gestione dei file Chiudere un file close() Clo­se­Hand­le()
Gestione dei di­spo­si­ti­vi Aprire un di­spo­si­ti­vo read() Rea­d­Con­so­le()
Gestione dei di­spo­si­ti­vi Chiudere un di­spo­si­ti­vo close() Clo­se­Con­so­le()
Gestione delle in­for­ma­zio­ni De­fi­ni­zio­ne di un in­ter­val­lo di tempo specifico alarm() SetTimer()
Gestione delle in­for­ma­zio­ni So­spen­sio­ne (ad es. di un processo) sleep() Sleep()
Co­mu­ni­ca­zio­ne Creare pipe (buffer per il flusso di dati tra due processi) pipe() Crea­te­Pi­pe()
Co­mu­ni­ca­zio­ne Creazione di una memoria condivisa (Shared Memory) shmget() Crea­te­Fi­le­Map­ping()
Consiglio

Siete alla ricerca di un hardware potente per elaborare i vostri processi ap­pli­ca­ti­vi? Le soluzioni VPS di IONOS vi offrono i server più moderni su base cloud ad un prezzo de­ci­sa­men­te con­ve­nien­te, op­zio­nal­men­te con Windows o Linux come sistema operativo.

Vai al menu prin­ci­pa­le