back
Interfaccia del kernel, le system calls

Abbiamo analizzato una struttura generica nonchè minimizzata di un kernel, l'ultima questione che rimane da approfondire è l'interfaccia con cui usufruire dei servizi offerti da quest'ultimo. Ricordiamo infatti che, secondo il principio di astrazione, il kernel deve apparire agli strati superiori come un pacchetto chiuso, con il quale sarà possibile interagire attraverso un insieme di direttive semplici ma complete.

L'interfaccia di un kernel costituisce parte dei comandi più vicini alla macchina fra quelli messi a disposizione, essi ovviamente faranno riferimento all'insieme degli strumenti proposti dal kernel stesso, perciò il loro numero e tipologia varia di progetto in progetto.
L'informatica rappresenta un insieme di procedure tramite funzioni; generalmente le funzioni utili alla comunicazione con un kernel sono definite funzioni primitive, invocare una funzione significa inizializzare e avviare le istruzioni per il calcolatore in essa contenute; si parla perciò di chiamate a funzioni primitive di sistema, più brevemente, chiamate a sistema (in inglese: system call, spesso abbreviato in syscall). Le syscall sono l'unico modo che il programmatore ha a disposizione per interagire con il kernel.

Vediamo in conclusione un paio di esempi di system call messe a disposizione da Unix.

fork() e exec()

La funzione in C fork() è l'unico metodo disponibile per generare un nuovo processo, essa duplica gli spazi di memoria relativi al programma in esecuzione; al termine della chiamata ci troveremo due processi, uno il duplicato dell'altro e con un legame di parentela, perciò sono definiti nel linguaggio comune processo "padre" e processo "figlio".
La exec() permette di sostituire il codice residente nel processo (sovrascrive il contenuto relativo al codice eseguibile all'interno del PCB) con altro codice arbitrario; in questo modo si può lanciare un programma all'interno del proprio processo cambiandone radicalmente il contenuto.

Vediamo un esempio classico sull'utilizzo di queste funzioni.
All'apertura di un terminale ci si ritrova con una linea di comando in attesa di una vostra disposizione, nella maggior parte dei casi tale comando risulta in realtà essere un programma da lanciare con i relativi parametri da associare.

back