B.3. Funzionamento interno di un computer: i diversi livelli coinvolti
Un computer è spesso considerato come qualcosa piuttosto astratto e l'interfaccia visibile esternamente è molto più semplice rispetto alla complessità interna. Tale complessità deriva in parte dal numero di parti coinvolte. Tuttavia, tali parti possono essere visualizzate in strati, dove uno strato interagisce solo con quello immediatamente sopra o sotto.
Un utente finale può utilizzarlo senza conoscere questi dettagli... fino a quando tutto funziona. Quando si affronta un problema come, "Internet non funziona!", la prima cosa da fare è identificare in quale strato ha avuto origine il problema. La scheda di rete (hardware) funziona? E' riconosciuta dal computer? Il kernel Linux la vede? I parametri di rete sono configurati correttamente? Tutte queste domande aiutano ad isolare uno strato specifico evidenziando la potenziale fonte del problema.
B.3.1. Lo strato più profondo: l'hardware
Cominciamo con un promemoria base che un computer è, prima di tutto, un insieme di elementi hardware. C'è generalmente una scheda principale (nota come scheda madre), con uno (o più) processori, qualche RAM, controller di dispositivi e slot di espansione per schede aggiuntive (per altri controller di dispositivi). I più degni di nota tra questi controller sono gli IDE (Parallel ATA), SCSI e Serial ATA, per il collegamento di dispositivi di memorizzazione come gli hard disk. Altri controller includono l'USB, che è in grado di ospitare una grande varietà di dispositivi (che vanno dalle webcam ai termometri, dalle tastiere ai sistemi di automazione domestica) e l'IEEE 1394 (Firewire). Spesso, questi controller, consentono il collegamento di più dispositivi così il sottosistema completo gestito da un controller è quindi generalmente noto come "bus". Schede opzionali includono le schede grafiche (alle quali saranno collegati i monitor), le schede audio, le schede di rete e così via. Alcune schede madri hanno già integrate alcune di queste periferiche e non hanno bisogno di schede aggiuntive.
B.3.2. Avvio: BIOS o UEFI
L'hardware, da solo, non è in grado di eseguire operazioni utili senza la corrispondente parte software che lo guidi. Il controllo e l'interazione con l'hardware è lo scopo del sistema operativo e delle applicazioni. Questi, a loro volta, richiedono hardware funzionale per essere eseguiti.
Questa simbiosi tra hardware e software non avviene da sola. Quando il computer viene acceso per la prima volta, sono necessarie alcune configurazioni iniziali. Questo compito è svolto dal BIOS o dall'UEFI, un pezzo di software incluso nella scheda madre che si avvia automaticamente al momento dell'accensione. Il suo compito principale è cercare un software a cui possa trasferire il controllo. Di solito, come si è appreso in
Sezione 9.1, «Avvio del sistema» nel caso del BIOS, questo comporta la ricerca del settore d'avvio del primo disco rigido (noto anche come
master boot record o
MBR), ed eseguirlo. Da quel momento in poi, il BIOS non è solitamente più coinvolto (fino al successivo avvio). Nel caso di EUFI, il processo comporta anche la scansione dei dischi per trovare una partizione EFI dedicata contenente ulteriori applicazioni EFI da eseguire.
Il settore di avvio (o la partizione EFI), a sua volta, contiene un'altro pezzo di software, chiamato bootloader, il cui scopo è quello di trovare ed eseguire un sistema operativo. Dal momento che questo bootloader non è incorporato nella scheda madre, ma è caricato dal disco, può avere più funzionalità del BIOS, il che spiega perché il BIOS non carica il sistema operativo stesso. Ad esempio, il bootloader (spesso GRUB su sistemi Linux) può elencare i sistemi operativi disponibili e chiedere all'utente di sceglierne uno. Di solito, in caso di time-out, viene fornita una scelta di default. A volte l'utente può anche scegliere di aggiungere parametri da passare al kernel, e così via. Alla fine, un kernel viene trovato, caricato in memoria, ed eseguito.
Il BIOS/UEFI è anche responsabile del rilevamento edell'inizializzazione di un numero di dispositivi. Ovviamente, questo include i dispositivi IDE/SATA (di solito hard disk e unità CD/DVD-ROM), ma anche i dispositivi PCI. I dispositivi rilevati sono spesso elencati sullo schermo durante il processo di avvio. Se questo elenco scorre troppo velocemente, utilizzare il tasto Pausa per fermarlo il tempo sufficiente per leggere. Dispositivi PCI installati che non vengono visualizzati sono un cattivo presagio. Nel peggiore dei casi, il dispositivo è difettoso. Nella migliore delle ipotesi, è semplicemente incompatibile con la versione corrente del BIOS o con la scheda madre. Le specifiche PCI si evolvono, e le vecchie scehde madri non garantiscono di gestire i dispositivi PCI più recenti.
Sia il BIOS/UEFI che il bootloader sono eseguiti solo per pochi secondi ciascuno; ora stiamo arrivando il primo pezzo di software che viene eseguito per un tempo più lungo, il kernel del sistema operativo. Il kernel assume il ruolo di un direttore d'orchestra assicurando il coordinamento tra hardware e software. Tale ruolo prevede diversi compiti tra cui: gestire l'hardware, i processi, gli utenti ed i permessi, il file system e così via. Il kernel fornisce una base comune a tutti gli altri programmi del sistema.
Anche se tutto ciò che accade al di fuori del kernel può essere raggruppato sotto la voce "user space" (spazio utente), possiamo ancora separarlo in livelli software. Tuttavia, le loro interazioni sono più complesse di prima e le classificazioni possono non essere così semplici. Un'applicazione utilizza comunemente librerie, che a loro volta coinvolgono il kernel, ma le comunicazioni possono coinvolgere anche altri programmi o addirittura molte altre librerie che si chiamano a vicenda.