PDA

Visualizza versione completa : Guide: Sistemi Operativi


MarcoGT
29-11-2007, 19.21.36
Scritto in origine da Filippo

Un computer, per quanto bello/complesso/performante/ecc.ecc. rimane sempre e comunque un inutile pezzo di ferraglia se non lo si dota di un software in grado di gestire, governare e coordinare tutte le componenti hardware di cui il PC è composto.

Tecnicamente, affinché tutto funzioni "basterebbe" che il software che noi utilizziamo comunemente (giochi piuttosto che office automation piuttosto che navigazione internet ecc.ecc.) comprendesse tutta la parte necessaria a interagire direttamente con le periferiche. Questo implica naturalmente che un'ipotetica applicazione sviluppata in questo modo sia in grado di riconoscere e gestire tutte le possibili combinazioni di hardware su cui essa potrebbe venire installata, cosa questa che risulta, come si può facilmente capire, praticamente irrealizzabile.

Per questo motivo c'è bisogno di un sistema operativo, ovvero un software il cui scopo principale sia quello di farsi carico della gestione delle risorse hardware e renderle disponibili alle applicazioni.

Le funzionalità minime che ci si aspetta di vedere supportate da un sistema operativo degno di questo nome sono grossomodo le seguenti:
Memory management: la memoria (e la sua gestione) è un aspetto assolutamente fondamentale per il funzionamento di un elaboratore.
I componenti del PC che fungono da memoria sono molteplici e caratterizzati da capacità e prestazioni diverse: a partire dai registri della CPU (velocissimi ma estremamente ridotti come capacità) si passa per le varie cache (primo, secondo e a volte anche terzo livello); a seguire abbiamo la RAM e per finire le memorie di massa (in pratica gli hard disk). Tutti questi mezzi fisici, presi nel loro insisme costituiscono la memoria virtuale (virtuale in quanto si tratta di utilizzare e far interagire in modo più o meno intelligente dispositivi fisici di natura diversa in modo da realizzare uno scopo comune che è quello di avere spazio a disposizione per memorizzare dati e istruzioni). Il sistema operativo, attraverso una funzionalità solitamente indicata con l'acronimo VMM (Virtual Memory Management) si fa per l'appunto carico della gestione di questi dispositivi eterogenei in modo da farli apparire come un unico dispositivo di memorizzazione, in modo trasparente alle applicazioni.
Ma non è finita qui: poiché è ormai un fatto normale che i sistemi operativi, anche quelli destinati all'utenza domestica, supportino il multitasking (ovvero la possibilità di utilizzare più applicazioni contemporaneamente), il sistema operativo deve anche fare in modo che la memoria possa venire condivisa tra le varie applicazioni in esecuzione, senza che una di queste possa andare ad alterare in alcun modo il contenuto della memoria destinata alle altre. Ecco che entra in ballo il concetto di spazio di indirizzamento virtuale, ovvero un meccanismo secondo cui l'applicazione interagisce con un modello logico di memoria che appare come disponibile in modo esclusivo all'applicazione stessa, ed è poi "cura" del sistema operativo tradurre questo modello logico nella memoria realmente presente nel PC, garantendo che i dati delle varie applicazioni restino fisicamente separati.
File System Management: così come la memoria destinata alle elaborazioni del computer, anche quella riservata a contenere dati e programmi quando il PC non è operativo richiede una gestione più o meno articolata. Inoltre, visto che a differenza della gestione della memoria, il salvataggio di documenti e programmi è un'attività nella quale è direttamente coinvolto l'utente, l'organizzazione del file system deve essere fatta in un modo quanto più possibile vicino agli schemi di ragionamento tipici di una persona in carne ed ossa. Assieme a tutto ciò, a seconda della sofisticazione del sistema operativo, la gestione del file system potrà poi offrire funzionalità accessorie avanzate come la compressione dei dati, la crittografia dei files, nonché capacità di autocorrezione e recupero dati in caso di danneggiamento fisico del dispositivo su cui il file system va ad operare.
Process management: nei sistemi operativi che offrono funzionalità di multitasking/multithreading, è necessario che non solo la memoria, ma più in generale tutte le risorse hardware vengano gestite e condivise dai processi in esecuzione simultaneamente. La risorsa hardware "contesa" per antonomasia dai vari processi concorrenti è chiaramente la CPU del computer: il componente che si occupa di decidere, in base a molteplici criteri, quale tra i processi ha diritto di accedere alla CPU in un determinato momento è lo scheduler. Del Virtual Memory Manager, che governa la memoria e la sua "spartizione" tra i processi abbiamo già parlato; eventuali altre periferiche che necessitino una condivisione tra processi (tipicamente la scheda video e il controller delle memorie di massa) possono a loro volta venire rese "apparentemente" disponibili a più processi tramite il meccanismo della virtualizzazione dell'hardware.

Finora s'è parlato di una sola funzione, ancorché la più importante, del sistema operativo (gestire l'hardware per conto delle applicazioni). Non meno importante, e strettamente collegato a questo appena descritto, è l'aspetto dell'astrazione dall'hardware. Poiché il sistema operativo si "prende la responsabilità" di coordinare e gestire l'hardware per conto delle applicazioni, deve anche offrire a queste ultime modalità di accesso a queste risorse, che siano indipendenti da quale hardware sia materialmente presente nel PC. In altre parole, essendo queste modalità di accesso indipendenti da come il PC è fisicamente fatto, fanno sì che un'applicazione scritta per utilizzare queste modalità generiche funzionerà su qualunque computer purché dotato dello stesso sistema operativo.
Le modalità di accesso alle risorse indipendenti dall'hardware sono realizzate attraverso le cosiddette API, ovvero Application Programming Interfaces. Un'API è una libreria di funzioni attraverso le quali il programmatore di un'applicazione interagisce con il sistema operativo e richiede quindi l'accesso alle varie risorse che questo offre.
In ambito Windows, l'API principe è la Win32, ovvero l'API principale di Windows tramite la quale un'applicazione a 32 bit accede alle risorse del sistema. Sebbene con qualche piccola differenza da versione a versione, l'API Win32 è supportata da tutti i sistemi Windows a partire da Windows 95 fino ai giorni nostri. Il risultato è che un'applicazione scritta per funzionare con l'API Win32 funzionerà (almeno teoricamente) su tutti i Windows a partire da Windows 95 fino a Windows Vista. Altri esempi notevoli di API sono le DirectX e le OpenGL.

Ultimo ma non ultimo, un sistema operativo "dovrebbe" anche offrire un'interfaccia utente intuitiva, che permetta all'utilizzatore di interagire con le funzionalità offerte dal sistema operativo in modo immediato e concettualmente simile al modo di ragionare tipico di un essere umano. Nella maggior parte degli ambiti di utilizzo, e in particolare in quello domestico, la storia insegna che al momento l'interfaccia utente più intuitiva è quella costituita dalle finestre e dall'interazione con esse attraverso un puntatore, guidato da un'opportuna periferica di puntamento (che nella stragrande maggioranza dei casi sarà un mouse).

...continua...

MarcoGT
29-11-2007, 19.22.07
...continua...

Bene, ora che si è visto qualcosa sui sistemi operativi, possiamo rivedere un po' la storia.
Per quanto riguarda gli utilizzatori del PC, è arcinoto che i sistemi operativi per questa famiglia di computer affondano le loro radici nel tanto vituperato eppure universalmente usato MS-DOS. Questo affare, sviluppato dall'allora semi-sconosciuta Micro$oft per conto di IBM, era largamente ispirato al sistema CP/M sviluppato qualche anno prima da Digital (CP/M = Control Program / Monitor). Rispetto ai sistemi operativi di oggi, MS-DOS era veramente misero dal punto di vista tecnico: la gestione dell'hardware era ridotta all'osso e si appoggiava in massima parte alle funzionalità base offerte dal BIOS del PC; per questo motivo non esistevano praticamente API, e le applicazioni DOS dovevano di fatto fare quasi tutto da sé per quanto concerne l'accesso alle risorse hardware; non vi era poi traccia di multitasking né tantomeno multithreading, potendo l'utente lanciare una sola applicazione alla volta; infine, l'interfaccia utente era pressoché inesistente, essendo essa ridotta alla possibilità di digitare scomodi comandi testuali, difficili da ricordare. L'unica funzionalità abbastanza sviluppata era la parte di gestione del file system, che all'epoca era il FAT (poi ridefinito FAT16 per distinguerlo dalla sua evoluzione FAT32, che fece il suo debutto con Windows 95 OSR2). A causa di tutte queste mancanze, è opinione comune che definire MS-DOS un "sistema operativo" sia inappropriato.
L'avvento delle prime incarnazioni di Windows, di cui Windows 3.1 è forse la più diffusa, non cambiò di molto la situazione. Certo, finalmente vi era un'interfaccia utente degna di questo nome, ma Windows 3.x era ancora lungi dal potersi definire un vero sistema operativo, visto che le sue funzioni di gestione delle risorse erano ancora largamente basate su MS-DOS (del quale Windows 3.x era più che altro un'interfaccia utente grafica, tecnicamente nota come GUI - Graphical User Interface). Veniva offerto un rudimentale multitasking, tramite un sistema di "cooperazione": non era Windows, bensì le stesse applicazioni, a "decidere spontaneamente" di cedere l'accesso alle risorse condivise ad altre applicazioni dopo un certo periodo di tempo. Questo multitasking, definito per l'appunto "Cooperative multitasking" era però chiaramente fragile: se un'applicazione andava in crash, la cessione volontaria del controllo alle altre applicazioni si interrompeva e l'intero sistema collassava.
Con la famiglia Windows 9x finalmente veniva fatto un passo avanti: il sistema finalmente utilizzava le modalità di funzionamento a 32 bit dei processori x86, che permettevano di implementare un Virtual Memory Manager degno di questo nome, nonché un vero multitasking (pre-emptive multitasking: è il sistema operativo che decide quando fermare un processo e passare il controllo ad un altro). MS-DOS non era comunque eliminato, e buona parte del sistema operativo si rifaceva comunque a tecnologie e a codice già impiegati in MS-DOS e Windows 3.x. Parallelamente, la famiglia di sistemi Windows NT era la prima vera incarnazione di un sistema operativo come si deve (niente MS-DOS sotto, sistemi completamente a 32 bit), ma la richiesta di risorse (soprattutto in termini di memoria) era proibitiva per la tipica configurazione di un PC casalingo dell'epoca, sicché per diversi anni la famiglia NT venne destinata esclusivamente al settore professionale.
Windows 2000 ha rappresentato il primo tentativo di riunione dei due filoni (Win9x per i PC da casa, WinNT per quelli professionali) in un'unica famiglia, tentativo però completamente realizzato solamente con il successore di Windows 2000, ovvero Windows XP.

A parte Windows e la sua evoluzione, per il mondo PC si sono visti altri pregevoli sforzi per ottenere un sistema operativo valido.
Partiamo da OS/2, un prodotto nato dalla collaborazione congiunta di IBM e Micro$oft (esperienza che poi la Casa di Redmond rigettò, ma allo stesso tempo sfruttò per sviluppare per conto proprio quello che sarebbe divenuto Windows NT); OS/2 era un sistema estremamente innovativo, ma pagò l'incapacità dei suoi creatori di promuoverlo come avrebbe meritato. IBM fece un ultimo disperato tentativo nel 1994 con un'evoluzione chiamata OS/2 Warp, ma ormai Windows 9x era alle porte e la migliore compatibilità di quest'ultimo con i vecchi programmi per MS-DOS e Windows 3.x, nonché la minor fame di risorse, ne decretò il successo, anche se OS/2 Warp era tecnicamente molto più valido.
Proseguiamo con BeOS, nato nel 1991, anche questo un prodotto avanti anni luce, come tecnologia, rispetto a Windows: in quegli anni gli utenti avevano ancora a che fare con le debolezze di Windows 3.x, mentre BeOS era completamente a 32 bit e già offriva multitasking, multithreading, un file-system proprietario con capacità di recupero dati, e supportava addirittura il multi-processing. Purtroppo anche questo tentativo era destinato all'oblìo, e ai giorni nostri BeOS sopravvive ancora come prodotto estremamente di nicchia, mantenuto in vita da pochi programmatori entusiasti.
L'unico sistema sopravvissuto allo strapotere MS è stato indubbiamente Linux. Nato nel 1991 dal genio di Linus Torvalds, Linux è uno dei tanti cloni UNIX. UNIX era un sistema operativo risalente agli anni 60 e nato nei laboratori della AT&T (gli stessi nei quali fu sviluppato il linguaggio di programmazione C, linguaggio con il quale la stragrande maggioranza dei componenti di UNIX -e anche Linux- è stata implementata). Attualmente Linux è disponibile in un'infinità di varianti, individuati dalle diverse distribuzioni reperibili in rete. Linux offre multitasking, multithreading, file system di rete, nonché il supporto per tecnologie (in particolare l'uso delle modalità a 32 bit dei processori x86) che in Windows avrebbero trovato spazio solo diversi anni più tardi. Linux, che io sappia, è stato tra l'altro uno dei primi sistemi operativi per PC e workstations, se non il primo in assoluto, a sfruttare le estensioni a 64 bit dei processori x86 AMD che fecero il loro debutto con l'Athlon64. Inizialmente dotato solo di un'interfaccia utente a riga di comando (per quanto infinitamente più potente e flessibile di quella offerta da MS-DOS), Linux si è arricchito nel tempo di pregevoli contributi per avvicinarlo all'utente comune: le interfacce grafiche KDE e Gnome rappresentano due esempi notevoli in questo senso, e mi piace citare anche il progetto WinE (Windows Emulator) che, come dice il nome, offre una discreta compatibilità con le applicazioni del mondo Windows.