Funzionamento del sistema

7 / 100

All’accensione del computer viene eseguito il programma del BIOS; questo dopo aver fatto i suoi controlli interni esegue la procedura di avvio del sistema.

Nei PC tutto ciò viene effettuato caricando dal dispositivo indicato nelle impostazioni del BIOS un apposito programma, il bootloader, che a sua volta recupera (in genere dal disco) una immagine del kernel che viene caricata in memoria ed eseguita.

Una volta che il controllo e passato al kernel, questo, terminata la fase di inizializzazione in cui ad esempio si esegue una scansione delle periferiche disponibili, e si leggono le tabelle delle partizioni dei vari dischi si incaricherà di montare il filesystem su cui e situata la directory radice e far partire il primo processo. Tradizionalmente questo processo si chiama init, ed è il programma di inizializzazione che a sua volta si cura di far partire tutti gli altri processi che permettono di usare il sistema. Fra questi processi ci saranno ad esempio quelli che forniscono i vari servizi di rete, quelli che eseguono vari compiti di amministrazione, cosi come quelli che si occupano di chiedere nome e password dell’utente che si vuole collegare. Tutti i programmi funzionano allo stesso modo: vengono eseguiti dal kernel come processi ed eseguono le loro operazioni attraverso le opportune system call che esso mette a disposizione.

Tutte le operazioni di normale amministrazione di un sistema GNU/Linux sono sempre realizzate tramite degli opportuni programmi. Tutto ciò ci dice anche che,il kernel, benchè esso costituisca il cuore del sistema, da solo sarebbe assolutamente inutile, cosi come sarebbe inutile da solo il motore di una automobile, senza avere le ruote, lo sterzo, la carrozzeria, e tutto il resto.Per avere un sistema funzionante dal punto di vista di un utente normale infatti occorre avere, oltre al kernel, anche tutti i programmi che gli permettano di eseguire le varie operazioni con i dischi, i file, le periferiche.

Si tenga presente infine che anche se il kernel tratta tutti i programmi allo stesso modo, non tutti hanno la stessa importanza.

Nella precedente descrizione dell’avvio del sistema abbiamo accennato ad un programma particolare, init, che ha un ruolo privilegiato in quanto e quello che si occupa dell’inizializzazione del sistema.

La sua peculiarità e quella di essere lanciato per primo direttamente dal kernel e dover gestire il lancio di tutti gli altri programmi, per cui non puo essere mai terminato. Ma anche init alla fine non è che un programma che usa le system call e viene eseguito dal kernel, come un qualunque altro programma, ed infatti esistono alternative rispetto alla implementazione classica, come systemd o upstart.

Un’altra caratteristica fondamentale dell’architettura dei sistemi unix-like è quella per cui qualunque processo puo’ a sua volta lanciarne di nuovi, per cui si dice che il primo processo e il padre degli altri, che a loro volta sono chiamati figli.

Benchè Linux stia diventando il piu di uso, esistono parecchi altri kernel unix-like, sia liberi che proprietari, nati nella tumultuosa e complessa evoluzione che dallo Unix originario della AT/T ha portato alla nascita di una miriade di sistemi derivati che si innestano tutti in due rami principali, quelli derivati dal sistema sviluppato dalla AT/T, detto SysV (da System V, l’ultima versione ufficiale) e quelli derivati dal codice sviluppato all’università di Berkeley, detto BSD (da Berkeley Software Distribution).

La prima caratteristica distintiva di Linux è che esso e stato riscritto da zero, per cui non è classificabile in nessuno di questi due rami e prende invece, a seconda dei casi, quelle che sono state ritenute le migliori caratteristiche di ciascuno di essi. Un’altra delle caratteristiche peculiari di Linux rispetto agli altri kernel unix-like è quella di essere modulare; Linux cioè può essere esteso inserendo a sistema attivo degli ulteriori “pezzi”, i moduli, che permettono di ampliare le capacità del sistema (ad esempio fargli riconoscere una nuova periferica). In realtà e sempre possibile costruire un kernel Linux comprensivo di tutti i moduli che servono, ottenendo quello che viene chiamato un kernel monolitico (come sono i kernel tradizionale degli altri Unix) Questo permette di evitare il ritardo nel caricamento dei moduli al momento della richiesta, ma comporta un maggiore consumo di memoria, dovendo tenere dentro il kernel anche codice non utilizzato

Per contro in certi casi l’uso dei moduli puo’ degradare leggermente le prestazioni, quasi sempre in maniera non avvertibile, e puo dar luogo a conflitti inaspettati che con un kernel monolitico avrebbero bloccato il sistema all’avvio, ma questi problemi oggi sono sempre piu rari. In ogni caso non e possibile utilizzare i moduli nel caso in cui le funzionalità da essi fornite siano necessarie ad avviare il sistema.

Una terza peculiarità di Linux e quella del Virtual File System (o VFS). Un concetto generale presente in tutti i sistemi Unix (e non solo) è che lo spazio su disco su cui vengono tenuti i file di dati e organizzato in quello che viene chiamato un filesystem.

Lo spazio disco grezzo è normalmente suddiviso in settori contigui di dimensione fissa, ma all’interno del sistema questo viene organizzato in maniera tale da permettere il rapido reperimento delle informazioni memorizzate su questi settori, anche quando queste sono sparse qua e là sul disco; si ha così quello che l’utente vede come un singolo file. Quello che contraddistingue Linux e che l’interfaccia per la lettura del contenuto di un file-system e stata completamente virtualizzata, per cui inserendo gli opportuni moduli nel sistema diventa possibile accedere con la stessa interfaccia e, salvo limitazioni della realizzazione, in maniera completamente trasparente all’utente ai piu svariati tipi di filesystem, a partire da quelli usati da Windows e dal DOS, dal MacOS, e da tutte le altre versioni di Unix.

Translate »