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...
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...