IL GARAGE |
Finestra di pura tecnologia affacciata sul mondo informatico Ideato e progettato da : Ragionier Maurizio SorrentinoF |
Sistema operativo(leggi la seconda parte) |
In informatica, un sistema operativo (abbreviato in SO, o all'inglese OS, operating system) è il programma responsabile del diretto controllo e gestione dell'hardware che costituisce un computer e delle operazioni di base. Si occupa dei processi che vengono eseguiti e della gestione degli accessi degli utenti. Indice 1 Composizione 2 Tipi di sistema operativo 2.1 Monitor 2.2 Interprete 2.3 DOS (Disk Operating Systems) 2.4 Sistema multitask 2.5 Sistema multiutente 2.6 Sistema operativo real-time 3 Parti del sistema operativo 3.1 Kernel 3.2 File system 3.2.1 Filesystem per unità locali 3.2.2 Filesystem distribuiti 3.3 Scheduler 3.4 Gestore di memoria 3.4.1 Basic memory management 3.4.2 Multiprogrammazione con partizioni fisse 3.4.3 Swapping 3.4.4 Gestore di memoria virtuale 3.4.5 Protezione della memoria 3.5 Interfaccia utente 3.6 Spooler di stampa 3.7 I sistemi distribuiti in rete 4 Sistemi operativi noti o importanti Composizione Il sistema operativo si compone di un sistema vero e proprio detto kernel e da una serie di programmi di sistema. Tipi di sistema operativo Un generico sistema operativo moderno si compone di alcune parti ben definite: un gestore di file system che si occupa di esaudire le richieste di accesso alle memorie di massa, un gestore di memoria virtuale che alloca pagine di memoria a richiesta e si assicura che questa sia presente nella memoria fisica al momento giusto, uno scheduler che assicura ai vari processi in esecuzione una ben definita quantità di tempo di elaborazione, uno spooler che accumula i dati da stampare e li stampa in successione, una interfaccia utente (shell o GUI) che permette agli esseri umani di interagire con la macchina ed un kernel, fulcro del sistema, che gestisce il tutto. A seconda dei casi, un particolare sistema operativo può avere tutti questi componenti o solo alcuni. Vediamo ora una serie di sistemi operativi possibili, dal più semplice al più complesso. Monitor Praticamente il solo kernel, con una minima interfaccia interattiva per impartire i comandi. Permette di scrivere in memoria il programma da eseguire e di lanciarlo, non ha nessuna altra caratteristica. È semplicissimo (per un computer), spesso i suoi comandi sono semplici chiamate dirette a subroutine in linguaggio macchina, è stato anche il primo tipo di sistema operativo mai implementato su un computer. Controlla i processi base del sistema Interprete Il secondo passo verso una migliore gestione del computer si ha con lo sviluppo di una interfaccia utente separata dal kernel, un interprete di comandi che funga anche da interfaccia utente, da shell. Questa shell primitiva di solito funge anche da interprete per un linguaggio di programmazione: a seconda delle scelte dei progettisti del software può essere un vero linguaggio oppure un più semplice linguaggio di scripting con cui creare comandi batch. DOS (Disk Operating Systems) Un computer diventa molto più utile se dotato di una memoria di massa: per gestirla serve un gestore di file system, cioè un insieme di funzioni che permetta di organizzare i dati sulla superficie dei mezzi di memorizzazione secondo una struttura ben precisa. I sistemi operativi che risiedono su disco (inizialmente floppy poi hard disk e altre piu' evolute unita' di massa) capaci di gestire un file system sono detti genericamente Disk Operating Systems, cioè DOS appunto. L'esemplare più famoso è senz'altro il MS-DOS della Microsoft. Esiste anche una versione libera del dos, denominata: FreeDOS. Sistema multitask Alcuni programmi non hanno sempre realmente bisogno della CPU: a volte, invece di eseguire istruzioni stanno aspettando che arrivino dei dati da un file, o che l'utente prema un tasto alla tastiera. Quindi si può, in linea di principio, usare questi tempi "morti" per far girare un altro programma. Questa idea, sorta fin dai primi anni cinquanta, si concretizzò nei sistemi operativi multitasking, cioè dotati di uno scheduler che manda in esecuzione più processi (esecuzioni di programmi) contemporaneamente, assegnando a turno la CPU ad ognuno e sospendendo l'esecuzione dei programmi in attesa di un evento esterno (lettura sulla/dalla memoria di massa, stampa, input utente ecc.) finché questo non si verifica. Dovendo ospitare in memoria centrale più programmi nello stesso tempo, i sistemi multitask hanno bisogno di più memoria rispetto a quelli monotask: perciò questo tipo di sistemi operativi è quasi sempre dotato di un gestore di memoria virtuale. Sistema multiutente Se un computer può far girare più programmi contemporaneamente, allora può anche accettare comandi da più utenti contemporaneamente: in effetti dal multitasking alla multiutenza il passo è molto breve tecnicamente, ma fa sorgere una serie di nuovi problemi dal punto di vista della sicurezza del sistema: come distinguere i vari utenti tra loro, come accertarsi che nessun utente possa causare danni agli altri o alla macchina che sta usando ecc. Al giorno d'oggi, i diversi sistemi operativi, come ad esempio il nuovo Windows CE 6 [1], sono progettati in modo che questo tipo di operazioni avvengano nel più breve tempo possibile, valorizzando, ad esempio, software come i middleware, i driver, le interfaccia utente, e molti altri. Questi problemi si risolvono assegnando un account univoco per ogni utente, assegnando un proprietario ai file ed ai programmi e gestendo un sistema di permessi per l'accesso ad essi, e prevedendo una gerarchia di utenti (cioè di account) per cui il sistema rifiuterà tutti i comandi potenzialmente "pericolosi" e li accetterà soltanto se impartiti da un utente in cima alla gerarchia, che è l'amministratore del sistema (generalmente l'account root nei sistemi Unix, Administrator nei sistemi Windows). Sistema operativo real-time Un sistema operativo real-time è un sistema operativo utilizzato tipicamente in un ambito industriale o comunque dove sia necessario ottenere una risposta dal sistema in un tempo massimo prefissato. I sistemi operativi realtime si possono dividere in due categorie: hard e soft, a seconda dei tempi di risposta. Parti del sistema operativo Kernel Il kernel è il cuore di un sistema operativo. Si tratta di un software che ha il compito di fornire ai moduli che compongono il sistema operativo e ai programmi in esecuzione sul computer le funzioni fondamentali ed un accesso controllato all'hardware, sollevandoli dai dettagli della sua gestione. Quali funzioni sia opportuno che il kernel debba fornire e quali possano essere demandate a moduli esterni è oggetto di opinioni divergenti: se il kernel di un sistema operativo implementa soltanto un numero molto ristretto di funzioni, delegando il resto ad altre parti, si parla di microkernel. Il vantaggio di un sistema operativo microkernel è la semplicità del suo kernel; lo svantaggio è l'interazione più complessa fra il kernel e le altre componenti del S.O. stesso, che rallenta il sistema. Di solito il kernel di un sistema operativo microkernel è molto piccolo e fornisce solo poche funzioni di base per l' astrazione dall'hardware e la comunicazione fra i vari moduli, che sono esterni ad esso. Schema di Microkernel Un kernel tradizionale, monolitico, integra invece dentro di sé la gestione della memoria virtuale, lo scheduler e i gestori di file system, nonché i driver necessari per il controllo di tutte le periferiche collegate. Questo tipo di kernel è più complesso da progettare, mantenere ed aggiornare, ma è anche più veloce ed efficiente. Una sua evoluzione è costituita dai kernel "modulari", che mantengono al loro interno lo scheduler e i gestori di file system e memoria virtuale ma separano alcune funzioni non essenziali in moduli a sé stanti, da caricare in memoria solo in caso di effettivo uso della funzione o periferica di loro competenza. Schema di kernel monolitico Sulla distinzione fra microkernel e kernel monolitico di notevole interesse è il famigerato dibattito fra Torvalds e Tanembaum "LINUX is obsolete" che potete trovare su comp.os.minix al seguente collegamento File system Il file system è il modo in cui i file sono immagazzinati e organizzati su un dispositivo di archiviazione, come un hard disk o un CD-ROM. Esistono molti tipi di file system, creati per diversi sistemi operativi, per diverse unità di memorizzazione e per diversi usi. Si possono identificare due grandi classi di file system: quelli per unità locali, destinate ad organizzare fisicamente i dati su un disco, e i file system distribuiti, nati per condividere i dati fra più computer collegati attraverso una rete, superando le differenze fra sistemi operativi e filesystem locali delle varie macchine. Filesystem per unità locali Amiga FileSystem CFS Ext2 Ext3 FAT HFS HFS Plus HPFS ISO 9660 JFS Minix NTFS ReiserFS UFS XFS ZFS Filesystem distribuiti Network File System (NFS) Coda Andrew file system (AFS) |
Schema di Kernel monolitico |
Schema di Microkernel |