martedì 7 dicembre 2010

Il kernel e i moduli

Quante cose deve saper fare il nostro sistema operativo all'avvio?
Non mi riferisco al software di base che solitamente accompagna una distribuzione GNU/Linux. La mia domanda non era riferita allo strato software solitamente usato dall'utente, quello applicativo. Il supporto alla rete oppure a una periferica può sembrare banale. L'hardware, però, varia da sistema a sistema e non tutto può funzionare al primo colpo. Il kernel realizza una virtualizzazione dell'hardware, favorendone l'interazione (mediante chiamate di sistema). E’ proprio questa estensione che consegna nelle mani del programmatore (e dell'utente) una realtà molto più semplice, fatta di operazioni astratte per l’interazione con i dispositivi di I/O (periferiche) e per l’esecuzione contemporanea di più programmi. Una classificazione dei kernel può essere fatta proprio in base al grado di astrazione dell'hardware. Esistono varie tipologie di kernel, fra queste abbiamo: kernel monolitici, micro kernel, kernel ibridi e exokernel.
Il kernel usato nei sistemi operativi GNU/Linux è di tipo monolitico, l'accesso all'hardware avviene attraverso l'uso di un set di chiamate, dette system calls. Il kernel si occupa della gestione dell'hardware, dei processi in esecuzione, dell'allocazione delle risorse etc... Pensate a unico blocco capace di svolgere tutte le operazioni citate sopra (la lista è assai più lunga). Tale blocco, allora, può crescere a dismisura se il kernel deve favorire il supporto a una infinità di dispositivi!
Attraverso l'uso dei moduli l'immagine del kernel in memoria può essere ridotta a dimensioni ragionevoli. La cosa bella del kernel di Linux è la sua modularità. Un modulo può estendere le funzionalità del kernel e può essere caricato in memoria solo quando occorre realmente! Per questo motivo, se un dispositivo appena collegato non sembra funzionare al primo colpo molto probabilmente il vostro kernel non ha in memoria il modulo capace di gestirne le funzionalità.
La nostra distribuzione GNU/Linux si affida a una configurazione base del kernel. Durante la compilazione del kernel possiamo indicare i moduli che devono essere presenti in memoria e quelli, invece, che verranno caricati all'occorrenza. Alcuni utili comando per la gestione dei moduli sono: lsmod, modinfo, insmod, modprobe ed rmmode.

Nessun commento:

Posta un commento