L'installazione di un sistema operativo L'operazione di installare un sistema operativo è una cosa completamente diversa dall'installazione di un qualsiasi altro programma per computer. E questo per due ragioni: 1) quando non c'è ancora alcun sistema operativo, bisogna capire chi e come controlla il computer; 2) se ancora manca il file system, bisogna sapere come questo viene creato dal niente su disco. Non si sta qui ovviamente parlando dell'aggiornamento di un sistema operativo (in questo caso infatti c'è già qualcuno che gestisce il computer e c'è anche il relativo file system), ma di un'installazione su un disco, o parte di disco, inizialmente vuota. Il primo problema da superare per comprendere la fase di installazione, è quello del "bootstrap" del sistema operativo. Bootstrap significa laccio di scarpa, e richiama l'azione di "sollevarsi per i lacci delle scarpe", cosa che riusciva solo al barone di Münchhausen. Tutti gli altri, sistemi operativi compresi, devono farsi sollevare ad qualcun altro. In sostanza, se sul disco non ci sono ancora i file del sistema operativo, che dovrebbe essere l'anima della macchina, come fanno a svolgersi le operazioni necessarie a caricare i programmi in memoria e ad attivarli? In realtà, la risposta è semplicemente che il sistema operativo non è l'anima profonda della macchina. Di solito si dice che questa funzione è svolta dal BIOS, il Basic Input/Output System, quello che controlla la macchina al livello più basso. Questo è realmente il primo programma che si attiva all'accensione della macchina. Esso offre alcuni servizi che il sistema operativo può in seguito utilizzare, ma anche scavalcare o ignorare del tutto (è il caso, per esempio, di Linux), e non è quindi del tutto corretto individuarlo come "anima" del PC. L'anima vera è, neanche a dirlo, il processore. Quello che "sa fare" consiste nel ripetere il ciclo: a) esegui l'istruzione caricata; b) carica l'istruzione successiva. Per dare avvio al tutto, basta che all'inizio ci sia già l'istruzione iniziale caricata. Questa è generata dalla situazione elettrica iniziale del processore, non è una prima istruzione qualsiasi di un programma: essa esegue semplicemente il caricamento di un'altra istruzione in un punto fisso della memoria. A partire da quel punto possiamo mettere un programma qualunque, anche un intero sistema operativo, come in alcuni casi capita. Le istruzioni iniziali devono essere in una zona della memoria non volatile, che si mantiene fissa anche a macchina spenta. Si potrebbe pensare al disco fisso, ma in realtà queste istruzioni si trovano sempre in una parte della memoria centrale, la ROM, o memoria a sola lettura, distinta dalla normale RAM su cui si può anche scrivere. Questo perché accedere alla memoria centrale è facile per il processore: ha un'istruzione nella quale basta specificare il numero che indica la posizione di memoria da caricare. Accedere al disco invece è tra quelle cose che il processore non è tenuto a sapere, e che devono essere fornite a parte. I PC sono stati infatti progettati come macchine flessibili, con parti liberamente intercambiabili, ed i costruttori di una di queste non sono a tenuti a sapere tutto delle altre. Appositi programmi di interfaccia, detti genericamente driver, permettono l'interazione tra le parti. E' quindi utile tenere in una piccola ROM un programma che permetta di eseguire le azioni più basilari di scambio di informazioni, il Basic Input/Output del BIOS, appunto. Quando il BIOS permette l'accesso al disco, da questo si può caricare un sistema operativo intero, in modo molto più flessibile rispetto all'averlo già tutto scritto in ROM. Un computer senza disco riesce quindi lo stesso a fare qualcosa ... se non altro informarvi che gli manca il disco. Il BIOS gestisce in modo elementare almeno tastiera e video, per comunicare con l'utente, e, al termine di una fase di test, cerca di caricare un sistema operativo in uno dei dischi che trova presenti. La sequenza classica di ricerca è: dischetti, disco fisso. I BIOS più recenti possono essere configurati per una diversa sequenza, per esempio si può fare il bootstrap anche dal CD-ROM, sempre se si ha un sistema operativo per cui questo non sia un problema. Nei sistemi operativi derivati dal DOS, infatti, il particolare modo di gestire i nomi dei dischi, o parti di disco, fa sì che accettino il bootstrap solo da dischetto, nominato in questo caso "A:", o dal primo disco fisso visibile, nominato "C:". Questo impone limitazioni in fase di installazione. Un sistema operativo che ancora non c'è si può avviare quindi da dischetto, o da CD-ROM. Quest'ultimo è per esempio il caso di alcune distribuzioni di Linux che si trovano già complete su un CD-ROM avviabile, per cui si ha a disposizione il sistema operativo completo senza installare nulla su disco. Ma il caso più normale è quello dell'avvio da dischetto. In questo caso quello che il dischetto contiene è una versione ridotta del sistema operativo, per esempio il DOS essenziale, se si tratta di Windows. Quello che serve in quest'ultimo caso è il cosiddetto dischetto di riavvio, ottenuto in DOS con il comando: FORMAT A: /S oppure, su un dischetto già formattato: SYS A: comandi che creano sul dischetto i file base del DOS, IO.SYS, MSDOS.SYS e COMMAND.COM. Da notare due cose: 1) non si possono semplicemente copiare i tre file sul dischetto per renderlo avviabile, perché i comandi di sopra copiano IO.SYS, che è il file fondamentale, all'inizio del disco (vedremo il perché in seguito); 2) creando un dischetto avviabile in Windows 95/8, con i comandi di sopra o attraverso l'apposita finestra di formattazione, se ne ottiene uno che, alla partenza dice, senza vergogna: "Avvio di Windows 95/8 ..." mentre questo è molto "improbabile", visto che su dischetto notoriamente Windows non ci sta. Questa è una tipica furbizia Microsoft, che, per propagandare Windows 95 come sistema operativo a sé stante, e non un'applicazione costruita sul DOS, non poteva accettare che il DOS 7 (contenuto in Windows 95), avviandosi, si presentasse con il suo nome. Quindi un programma di installazione si può far partire da dischetto: il sistema operativo che fa il lavoro iniziale sarà il DOS, e quando saranno stati trasferiti un numero sufficiente di file si potrà proseguire l'installazione con una versione ridotta delle capacità, specialmente grafiche, di Windows. Da notare che, se i dischetti servono solo per avviare il DOS, in modo che poi questo possa far partire un programma di installazione su CD-ROM, bisogna far sì che questo risulti visibile al DOS. Per questo su dischetto devono esserci il driver del CD-ROM, che chiameremo CDROM.SYS, e il programma MSCDEX.EXE, oltre a due righe, rispettivamente in CONFIG.SYS ed AUTOEXEC.BAT, per caricarli e attivarli, cioè:
dove "nomedriver" è una roba tipo MSCD000, oppure OEMCD001, che identifica in memoria il driver caricato. Una volta che il programma di installazione è stato avviato, rimane da capire che visione ha del disco su cui andrà ad installarsi. Per vedere nei dettagli come il DOS e i suoi figli vedono i dischi, e che strutture vi creano, potete leggere "Dischi rigidi, BIOS e sistema operativo". Non sono comunque necessari tutti i dettagli lì descritti, perché qui di seguito riassumeremo quelli che servono. Tralasciando la parte hardware/BIOS, supponiamo che ci abbiano installato un unico disco rigido nuovo di fabbrica, su cui non è stata eseguita alcuna operazione tranne la cosiddetta formattazione fisica, cioè la suddivisione in blocchettini di 512 byte, che possono essere letti e scritti uno alla volta (e non ha niente a che vedere con il comando FORMAT). Il DOS avviato da dischetto in questo caso non vedrà alcun disco rigido (con il comando "C:" si otterrà la risposta "specificazione di unità non valida"). L'unica parte del DOS per cui il disco esiste sarà il programma FDISK. In esso il disco, o i dischi rigidi presenti, non sono individuati da lettere ma da numero: 1, 2, 3 o 4. Questo perché ci sono due cavi dei dati a cui connettere i dischi (quelli più comuni, i dischi E-IDE), e ciascuno può portare due dischi. L'ordine dipende dal cavo, primo o secondo, e, sullo stesso cavo, dal fatto di essere "master" o "slave", a seconda di come sono configurati i "jumper" sui dischi. Il DOS potrà vedere il disco, assegnandogli una lettera, solo quando FDISK lo avrà "partizionato". Questo può voler dire "diviso" in più "partizioni" (si può pensare agli spicchi di una torta, anche se gli strati di una cipolla sarebbero più appropriati), ma l'operazione va fatta anche quando il disco dovrà restare tutto intero, in un'unica partizione. Questo perché, esistendo la possibilità di dividerlo, la prima cosa che serve sapere riguardo al disco sono i dati di questa eventuale suddivisione. Per esempio:
ecc. Da notare che il primo settore del disco, di numero 0, è riservato a contenere proprio i dati di questa suddivisione, la "tabella delle partizioni" (insieme ad altro che vedremo dopo), all'interno del cosiddetto "main boot record", o MBR. Il primo settore del disco è il posto naturale in cui mettere questi dati, ed elimina la necessità di conservare da qualche parte un'informazione sulla loro posizione. Quello che FDISK fa, è quindi creare un MBR nel primo settore, con le informazioni, decise da noi, sulla suddivisione del disco. Dopo uno degli inevitabili, in casa Microsoft, riavvii della macchina (sempre da dischetto naturalmente) il DOS accetterà il comando "C:" rispondendo con il tipico prompt "C:\>" del disco rigido. Ora il disco è visibile ma vuoto. In realtà è più vuoto del normale, perché al comando "DIR" non si avrà la risposta "file non trovato", tipica di un disco vuoto, per esempio un dischetto formattato di fabbrica, quanto invece "tipo di supporto di memorizzazione non valido" (nota: in DOS le directory vuote, diverse dalla principale, contengono sempre almeno due "file", indicati con "." e "..", per cui, nel loro caso, non si ottiene la risposta "file non trovato"). Cosa manca? La formattazione, quella cosiddetta "logica", che viene creata dal comando FORMAT. Dobbiamo quindi usare il famoso ed aborrito "FORMAT C:", che in casi normali distruggerebbe tutti i nostri dati. In questo caso crea semplicemente la cosiddetta "directory radice", esaminando la quale il DOS potrà dare la risposta "file non trovato", nel caso sia vuota. In realtà, ed è il grosso del lavoro, FORMAT dovrà creare anche un'altra struttura dati, la cosiddetta FAT, il cui compito è quello di tener conto di dove sono i vari pezzi dei file sul disco. Questa è una struttura tipica di DOS ed eredi, in quanto esistono molti altri tipi di "file system": HFS per i Macintosh, HPFS per OS/2, NTFS per Windows NT, EXT2 per Linux, ecc.. Inoltre, sul primo settore della partizione, viene creato un "boot record" che informa sulle strutture dati che si trovano dentro la partizione (oltre a servire per l'avvio, come vedremo). Per riassumere: perché il DOS veda il disco rigido bisogna che sul primo settore ci sia un MBR, creato con FDISK; l'MBR informa sulla eventuale suddivisione del disco e sul tipo delle partizioni; il DOS può quindi assegnare le lettere di unità ("C:", "D:", ecc.) alle partizioni che hanno un indicatore di tipo (che è un byte, e vale 06 (esadecimale) per FAT normale, 0A per FAT32) tra quelli ad esso noti. Per ospitare dei file, però, si deve creare sulla partizione un file system: questo è il lavoro di FORMAT, che crea file system di tipo FAT. La differenza con il caso dei dischetti è questa: la lettera "A:" è associata al lettore di floppy automaticamente, la lettera "C:" viene associata al disco rigido solo se ha un MBR (i dischetti ne sono privi e non possono essere ripartiti). Per il resto è lo stesso: bisogna formattarli, con "FORMAT A:" o "FORMAT C:", creando così boot record, FAT e directory radice. A questo punto il disco può essere reso avviabile, ospitando il DOS minimo, con il comando "SYS C:" (o anche, nella fase precedente,con "FORMAT C: /S", come per i dischetti), o eseguendo un programma di installazione di un sistema operativo completo. Rimane da vedere solo una cosa, e cioè la successione di avviamento e la denominazione dei dischi, o parti di disco, una questione che crea problemi nelle installazioni in cui non ci sia il solo "C:". Abbiamo visto che all'inizio il BIOS ha il controllo del PC. Quando ha terminato il suo lavoro, cerca un sistema operativo su disco. Al primo disco trovato, sia esso un dischetto (A:) o un disco rigido (C:), viene ceduto il controllo delle operazioni: infatti, MBR e boot record contengono del codice eseguibile che serve a saltare nella posizione in cui inizia il primo programma esecutivo del sistema operativo (IO.SYS nel caso del DOS). Questa posizione il BIOS non la può sapere a priori, dipende dalla strutturazione del disco. Nel caso del disco rigido: a) il codice nell'MBR vede quali partizioni esistono, b) tra esse una è segnata come "attiva", c) il controllo viene passato al boot record di questa che, sapendo dove inizia effettivamente la parte dei dati (escluse quindi FAT e directory radice), d) cede il controllo al file che si trova in quella posizione. Ecco perché non basta copiare IO.SYS e MSDOS.SYS su disco per renderlo avviabile: il comando SYS mette IO.SYS nel settore iniziale della parte dati della partizione da avviare. Tra i compiti di FDISK c'è anche quello di rendere attiva una delle partizioni del disco: questa sarà quella contenente il sistema operativo che si avvierà. Le altre partizioni possono risultare visibili (e nominate "D:", "E:", ecc.) oppure no. Questo dipende dal fatto che, oltre alla distinzione per tipo di file system, ce n'è un'altra che distingue tra FAT primarie, destinate ad avviare sistemi operativi, e non primarie, destinate a contenere dati ed applicazione ma impossibilitate ad avviare DOS e discendenti. Quando FDISK rende attiva una primaria, nasconde le altre alla vista. Questo viene fatto semplicemente cambiando il numero che indica il tipo di file system nell'MBR (in modo invertibile, per esempio sommando 10 (esadecimale) in modo che 16 ed 1A indicano rispettivamente una FAT normale ed una FAT32 nascoste). In questo modo, il DOS non le "vede". Si dice che questo sia per non creare conflitti tra sistemi operativi (in altri casi, il solito Linux per esempio, non ci sono queste limitazioni, ed il sistema operativo non si fa spaventare da un numeretto scritto nell'MBR, esamina le partizioni per conto suo e, se sono di tipo noto, le visualizza). Questa limitazione è poco coerente con il fatto che, per esempio le partizioni primarie sul secondo disco risultano visibili e possono contenere un sistema operativo. Non risulta agevole però installarvelo, se è della famiglia del DOS. Questi infatti presuppongono di avviarsi sempre da "C:" o da "A:". Si può installare quindi il sistema operativo solo facendo operare il disco provvisoriamente come primo disco: in seguito si può porlo come secondo, a patto che sul primo ci siano solo partizioni non primarie (che vengono "letterate" dopo tutte le primarie di tutti i dischi) e partizioni primarie nascoste, perché questo è l'unico modo in cui una partizione sul secondo disco può prendere la fatidica lettera C. In realtà per utilizzarlo bisogna poi anche disporre di un cosiddetto "boot manager", fornito per esempio con OS/2 o con programmi di partizionamento dei dischi. Questo è un programmino interattivo che si frappone nella catena di passaggi automatici di controllo BIOS/MBR/boot record/sistema operativo, permettendo all'utente di scegliere che sistema operativo attivare. In pratica risiede sulla partizione attiva del primo disco, riceve il controllo dall'MBR, interagisce con l'utente che fa la sua scelta e , a seconda di questa, passa il controllo al boot record della partizione scelta. Tutte queste difficoltà nascono dal modo "dinamico" di nominare dischi o parti di disco. Basterebbe che avessero nomi fissati, per esempio un numero di serie dato automaticamente in fase di creazione, o magari l'inutile etichetta (LABEL) della partizione, per non avere alcuno di questi problemi. La cosa notevole è che il problema può estendersi anche ai CD-ROM, perché, oltre alla supposizione del sistema operativo di avviarsi da "C:", vi è spesso anche quella dei programmi di installazione di Microsoft che pensano che il CD sia individuato da "D:", cosa non vera se esistono più partizioni perché il CD-ROM riceve la lettera dopo tutte le partizioni del disco rigido. In questo caso, si può avviare il processo di installazione da un CD nominato, per esempio, "E:", ma può capitare che, dopo l'immancabile riavvio durante il processo di installazione, il programma non trovi i file che cerca sul disco "D:", che, secondo lui, non può che essere un CD!
|