Le 4 aree dell’O.S. (operative system) Command processor Traduce i messaggi dell’utente (apparteneneti ad un set finito di comandi) in azioni da eseguire I/O control Semplifica la gestione dell’I/O per i programmi che ne richiedono l’utilizzo File manager E’ il gestore dei file. Organizza le informazioni su disco, si occupa di ricercare lo spazio libero necessario per la registrazione di un nuovo file, di recuperare un file già presente per la lettura, … Per far ciò utilizza un file speciale detto directory che contiene un elenco dei file e della loro posizione sul disco Utility program Insieme di programmi che eseguono compiti aggiuntivi. Per es.: modificare l’ora dell’orologio di sistema, cancellare o copiare file, … Linguaggi di programmazione e applicativi Command processor I/O control File manager Sistema operativo Firmware contenuto nella ROM Utility programs SISTEMI OPERATIVI Si tratta dei componenti più importanti dopo l’hardware poiché permettono agli operatori di interagire con la macchina. Il sistema operativo crea un macchina virtuale che fa in modo che l’utente possa ignorare cosa ci sia all’interno del computer ma gli richiede la conoscenza dei propri comandi. I sistemi oprativi si sono evoluti in maniera amichevole verso l’utente con interfacce grafiche di facile utilizzo. I sistemi oprativi permettono di gestire i file, di gestire più utenti contemporaneamente (nelle reti), di gestire operazioni sicure, di interconnettersi su altri elaboratori . Compito fondamentale è legato alla interfaccia utente basata su di un paradigma grafico, laddove è possibile, scegliendo i comandi tramite menù di accedere ai comandi dei sistemi operativi. Il secondo aspetto di un sistema operativo è quello di organizzare le memorie di massa in modo logico. La CPU non si preoccupa di questo, l’organizzazione dei dischi è gestita dal sistema operativo. Il sistema si preoccupa anche dell’assegnazione dei nomi, delle estensioni (che permettono di associare i file ad un programma particolare – i file .doc sono generalmente associati al programma Word di Microsoft nel caso di Windows), della gerarchia dei file e del loro raggruppamento. Un altra caratteristica è quella della multiutenza: il sistema operativo permette a più utenti di condividere sia i dischi di un elaboratore, sia la CPU, sia qualunque altra periferica. Un grande problema è quello della sicurezza informatica. Il sistema operativo deve rendere corretto e sicuro l’uso di un computer (immagine 16). Il sistema operativo deve controllare che chi esegue operazioni su file o sia autorizzato. E’ necessaria cioè una politica di gestione delle risorse assegnando ad ogni utente delle opportune autorizzazioni. Uno dei modi è l’assegnazione di una password. Diversi livelli di password permettono di accedere a diversi livelli di informazioni. Il sistema operativo realizza ed implementa i sistemi di sicurezza. I più conosciuti sistemi operativi sono Windows 95/98 (per i singoli elaboratori), Windows NT per la multiutenza, Unix per le reti, VM un sistema operativo per grandi elaboratori (mainframe). Gli attuali Sistemi Operativi (SO) impiegati possono essere visti come una collezione di programmi interagenti che operano sull’hardware per fornire agli utenti un insieme di funzioni ad un elevato livello di astrazione. I vantaggi sono: definire modalità di interfaccia standardizzate verso il calcolatore; sviluppare i programmi in maniera più semplice, modulare e indipendente dallo specifico calcolatore; permettere l’aggiornamento del software di base in maniera trasparente. I sistemi operativi sono tra i programmi più complessi e difficili da realizzare, pertanto sono realizzati a livelli, dove ogni livello usa le funzionalità del livello precedente e fornisce funzionalità a quello successivo (struttura a cipolla). I livelli usuali di un sistema operativo sono: hardware Nucleo (gestore dei processi) Gestore della memoria Gestore delle periferiche Gestore dei file (file system) Interprete dei comandi (shell) Applicazioni Nucleo Questo strato colloquia direttamente con l’hardware. Esegue i programmi e risponde agli eventi esterni generati dalle unità periferiche. Maschera ad un utente la presenza di altri e gestisce i processi contemporaneamente attivi. Gestore della memoria Esso ha il compito di gestire la memoria in modo trasparente ed efficiente. Consente ad ogni programma di lavorare in un proprio spazio di indirizzamento virtuale. Deve proteggere i dati e le istruzioni dei programmi e mascherare la collocazione fisica. Inoltre deve permettere la sovrapposizione degli spazi di memoria associati ai vari programmi. Gestore delle periferiche Permette all’utente di operare mediante periferiche astratte. Maschera le caratteristiche fisiche e le operazioni di I/O all’utente, e infine risolve i conflitti tra i vari utenti. Gestore del file system Si occupa di organizzare le informazioni, che vengono strutturate in contenitori logici ( file ) identificati mediante un nome logico (filename). Solitamente il nome del file è composto da due parti: nome ed estensione Il file system offre le procedure ad alto livello per operare sui file presenti sulle memorie stabili. Esso permette di: recuperare le informazioni precedentemente memorizzate; eliminare le informazioni obsolete; modificare i dati preesistenti; gestire il backup; Il file system su un disco è organizzato ad albero, in cui ogni nodo è detto directory, ed ogni file è univocamente individuato dal cammino (path) che parte dalla radice e lo raggiunge. Ogni sistema operativo offre dei comandi per operare sul file system, i più comuni sono quelli per: creare e distruggere file e directory fare copie di file e directory muovere file e directory attraverso l'albero scegliere la directory corrente (cioè la posizione nell'albero in cui si sta operando correntemente) visualizzare una directory visualizzare il contenuto di un file Interprete dei comandi L’interprete dei comandi e i programmi di utilità sono moduli direttamente visibili all’utente. L’interprete dei comandi ha inoltre la funzione di interpretare i comandi che arrivano dalle periferiche. Le operazioni svolte sono: lettura della memoria di massa del programma da eseguire; allocazione della memoria centrale; caricamento nella memoria del programma e dei relativi dati iniziali; creazione ed attivazione del processo. Gestione dei processi Un sistema operativo per poter gestire contemporaneamente più programmi, ognuno dei quali può essere eseguito, bloccato e ripreso al punto in cui era stato sospeso precedentemente, deve disporre di una struttura che possegga istante per istante lo stato di ogni programma in esecuzione. Tale struttura astratta è il processo. Processo e programma Un processo è una porzione di programma in esecuzione sul calcolatore. o Un programma è un oggetto statico (una sequenza di istruzioni). o Un processo invece è dinamico, cioè è dotato di uno stato interno che cambia nel tempo. o Lo stesso programma può essere associato a più processi distinti. Stati del processo Executing o Running (in esecuzione): il processore è a disposizione per l’esecuzione del processo. In un calcolatore mono-processore ad ogni istante un solo processo può trovarsi in questo stato. Ready (pronto): in grado di essere eseguito ed in attesa del processore dopo il suo rilascio da parte di altri processi. Waiting (in attesa): non in grado di essere eseguito perché in attesa di un evento esterno. La multiprogrammazione I sistemi operativi che permettono di eseguire contemporaneamente più programmi sono detti multitasking. In sistemi con un solo processore l'esecuzione contemporanea dei processi è virtuale, in quanto la CPU esegue un'istruzione per volta. Con il termine multiprogrammazione si intende che più programmi possono risiedere contemporaneamente in memoria centrale. Il multitasking è nato per poter rendere minimo il tempo di inattività della CPU durante operazioni in cui non viene utilizzata. La politica che si utilizza per poter tenere più programmi in esecuzione senza sprecare tempo di CPU e penalizzare i processi in coda (facendoli attendere troppo a lungo) è la ripartizione del tempo, ovvero il time sharing. In tal modo viene fatta un'equa ripartizione del tempo di CPU fra tutti i processi attivi, ognuno dei quali crede di operare sul calcolatore come se fosse a lui dedicato. Tutto ciò è organizzato dal sistema operativo attraverso la gestione di una coda di processi; ognuno di questi ha un quanto di tempo a propria disposizione. Lo scheduler Lo scheduler è quella parte del sistema operativo che si occupa di gestire i processi. Esso deve: essere efficiente; minimizzare il tempo di risposta; minimizzare il tempo d’attesa dei processi batch; massimizzare il throughput (numero di processi per ora); garantire che ogni processo abbia la sua giusta parte di tempo di CPU. I principali algoritmi di scheduling sono: 1. First Come First Served 2. Algoritmo Round Robin 3. Priorità 4. Code multiple 5. Il più breve prima (shortest job first) Problemi legati alla concorrenza: Starvation: avviene quando più processi richiedono una risorsa ma solo alcuni riescono ad ottenerla. Gli altri aspetteranno indefinitamente che li venga allocata quella risorsa prima di continuare ad essere eseguiti. Deadlock: avviene quando un processo rimane permanentemente bloccato in attesa di una risorsa, la quale, a sua volta, aspetta il termine di quel processo precedente per essere resa disponibile. E’ da tenere presente infatti che ad ogni processo è assegnata una priorità, in base a vari parametri o allo stato in cui il processo di trova, o in base alle scelte d priorità effettuate dall’utente. Questo meccanismo fa in modo che processi ad alta priorità precedono sempre quelli a bassa priorità. Gestione della memoria Gli aspetti fondamentali da considerare nella gestione della memoria sono: Swapping Paginazione Memoria virtuale Segmentazione Riguardo le strategie di gestione è necessario: consentire il caricamento del programma a partire da un qualunque indirizzo di memoria; tenere in memoria solo una porzione dei dati e dei programmi; condividere insiemi di istruzioni da parte di processi facenti parte di uno stesso programma. Il gestore della memoria garantisce ai processi uno spazio di indirizzamento virtuale che può essere superiore alle dimensioni della memoria fisica. Swapping Nei sistemi multiprogrammati di uso comune la memoria non è sufficiente a caricare tutti i programmi. Per tale motivo si utilizza lo swapping: il sistema operativo è abilitato a trasferire il contenuto di un’area di memoria centrale in memoria di massa (area di swap). Generalmente vengono trasferiti i processi in stato di wait. Il sistema mette in stato di run solo i processi presenti in memoria. Paginazione La memoria centrale viene divisa in sezioni di dimensione fissa dette pagine logiche. Questa tecnica ha i seguenti vantaggi: alloca la memoria ad un processo utilizzando zone di memoria non contigue, per cui non è più necessario trovare in memoria intere zone vuote contigue per accogliere i dati che si stanno elaborando (potrebbero essere di difficile reperimento); tali dati saranno comunque legati tra loro logicamente, anche se non fisicamente; permette di estendere la memoria allocata ad ogni processo. La segmentazione Quando i programmi condividono elementi, come nel caso di processi che sono istanze dello stesso programma, o di una stessa parte di programma, è vantaggioso non creare copie dello stesso codice. Allora il programma viene diviso in segmenti: codice: contiene solo le istruzioni; dati: contiene la parte allocata sia staticamente che dinamicamente; Se una porzione di programma deve essere ripetuta più volte, non sarà quindi più necessario ricaricarla più volte in memoria, ma si troverà già lì, e cambieranno solo i valori dei dati che tale parte di programma sta elaborando. Memoria virtuale Questa tecnica è implementata mediante la segmentazione e la paginazione (possono essere anche abbinate). In pratica vengono caricate in memoria principale solo delle porzioni limitate, ovvero il segmento di programma che deve essere eseguito attualmente. Queste porzioni richiedono meno spazio di quanto occorra ad un intero programma; in tal modo è possibile caricare nella stessa quantità di memoria un maggior numero di programmi. Quando viene indirizzata una pagina che non è in memoria (paging fault) il sistema operativo si occupa di reperirla in memoria di massa, dove l’intero programma risiede, e renderla disponibile. Con la memoria virtuale è necessario comunque risolvere alcuni problemi connessi con la scelta delle pagine da scaricare (esistono appositi algoritmi che si occupano di queste scelte). GESTIONE DELLA MEMORIA DI MASSA Esistono tre metodi per allocare i file ne dispositivi di memoria di massa, o hard disk. ALLOCAZIONE CONTIGUA Ogni file occupa un insieme di indirizzi contigui definendo nel disco un ordine lineare. VANTAGGI: Riduzione del movimento delle testine quando si deve leggere un file; L’indirizzamento è semplice, basta conoscere l’indirizzo del blocco di inizio e la lunghezza, in blocchi, del file. Tali informazioni sono riportate in un’apposita tabella visibile alla directory che contiene il file. SVANTAGGI: La lunghezza in blocchi del file deve essere conosciuta a priori; E’ difficile reperire nel disco l’insieme di blocchi contigui liberi di dimensioni sufficienti ad accogliere l’intero file. Per ovviare a tale problema è pertanto necessario effettuare periodicamente un ricompattamento dei dati. ALLOCAZIONE CONCATENATA Ogni file occupa un insieme di indirizzi che possono essere non contigui, ma comunque logicamente concatenati tramite dei puntatori: ogni blocco contiene, oltre al dato da memorizzare, anche un puntatore all’indirizzo del blocco successivo in cui il seguito del file è memorizzato, per ui all’utente il file appare logicamente consequenziale. Tali puntatori non sono visibili all’utente. In questo tipo di allocazione è necessaria la presenza di una File Allocation Table (FAT), cioè una mappa del disco, suddivisa in blocchi: ogni blocco contiene l’indirizzo del blocco successivo che contiene la porzione di file successiva, oppure 0 se il blocco è vuoto (caso dei S.O. Microsoft). VANTAGGI Non è necessario reperire nel disco i blocchi contigui liberi necessari ad allocare l’intero file. Non è necessario conoscere a priori la lunghezza in blocchi del file. Non è indispensabile la ricompattazione periodica del disco (anche se è sempre opportuna) Il file può essere ampliato a piacimento fino a quando c’è nel disco qualche blocco libero. SVANTAGGI Nel disco và allocato spazio anche per i puntatori; l’indirizzamento è semplice, in quanto basta conoscere l’indirizzo del primo blocco: saranno i puntatori che condurranno sequenzialmente al resto del file. Per questo stesso motivo, però, la sequenza degli indirizzi potrebbe risultare di difficile ricostruzione. ALLOCAZIONE INDICIZZATA E’ una variante dell’allocazione concatenata con la differenza che non esiste la FAT, ma ogni file contiene, come informazione aggiuntiva, un indice di tutti i blocchi del disco in cui in file è allocato. Le directory, per riferirsi ai file in esse contenuti, devono conoscere quindi soltanto un puntatore al blocco indice di ciascuno di essi (è uno schema che ricorda la paginazione della memoria).