|
Appunti informatica |
|
Visite: 1408 | Gradito: | [ Picolo appunti ] |
Leggi anche appunti:Il sistema di elaborazioneIl sistema di elaborazione Il calcolatore è un sistema programmabile. Uno La storia della nascita dell'IBM, il colosso dell'informaticaLa storia della nascita dell'IBM, il colosso dell'informatica Ottimizzazione dell'I/OOttimizzazione dell'I/O Abbiamo visto che il FS rediretta le richieste |
Definizione di Sistema Operativo
Un Sistema Operativo (SO) è un software, quasi sempre molto complesso, che virtualizza una macchina reale (elaboratore elettronico) e le sue risorse, gestendone e coordinandone l'uso da parte delle applicazioni. Il SO crea un ambiente di lavoro nel quale le applicazioni vengono eseguite ed assegna (alloca) loro le risorse della macchina reale in base alle richieste e alla disponibilità. Il SO è schematizzabile come costituito da un nucleo detto Kernel (insieme di tutto ciò che può essere eseguito sulla macchina in stato supervisore, normalmente interdetto all'utilizzo da parte dell'utente, e responsabile della creazione dell'ambiente di lavoro) e da un interprete dei comandi (espressi in apposito linguaggio di comando simbolico detto JCL, Job Control Language) detto Shell (si pensi al prompt dell'MS-DOS
Per i primi sistemi di elaborazione l'unico tipo di programmazione previsto era il Linguaggio Macchina (il programmatore si occupava di tutto: algoritmo, controllo periferiche, settaggio dei bit di stato, flag del processore, e così via). I primi SO erano semplici insiemi di Drivers, programmi che fungono da interfaccia tra l'unità centrale e i dispositivi periferici. Successivamente fu ideato il primo programma Caricatore, il cui compito era caricare programmi e dati, da schede perforate o nastri magnetici, nella memoria dell'elaboratore (un programma in linguaggio simbolico poteva richiedere per la sua esecuzione più operazioni di caricamento prima l'opportuno compilatore che generava il testo in Assembly, poi l'assemblatore che produceva il codice oggetto in formato binario e che veniva infine caricato in memoria per l'esecuzione). La necessità di limitare progressivamente l'uso delle schede perforate diede impulso alla creazione di macchine dedicate al trasferimento dei "contenuti" da schede perforate a nastri magnetici e, poiché se ne occupava un operatore umano, fu presto evidente che il processo di trasferimento era tanto più efficace se applicato ad un numero considerevole di schede per volta: nacque il concetto di Batch o Lotto. Si capì che la CPU di una macchina poteva essere sfruttata per eseguire alternativamente diversi Processi attivi purchè questa Multiprogrammazione (e i problemi che comportava) fosse opportunamente gestita. Il trasferimento di contenuti dalle schede perforate venne presto indirizzato alle unità a disco (che hanno il vantaggio di essere ad accesso casuale, anziché sequenziale come i nastri magnetici) e la procedura adottata prese il nome di Spooling (Spool è acronimo di Simultaneous Peripheral Operations On-Line e si riferisce allo spostamento di immagini di lavoro, da svolgere o da inviare a dispositivi periferici, attraverso la temporanea memorizzazione in un buffer, in memoria o più frequentemente su disco rigido): in pratica i contenuti delle schede perforate e dei nastri venivano massicciamente trasferiti a lotti su unità a disco, indicizzati in una tabella, in modo da poter essere poi all'occorrenza caricati in memoria su richiesta di utenti e programmi in tempi molto rapidi grazie all'accesso casuale dei dischi; naturalmente lo Spooling valeva non solo in Input ma anche in Output, consentendo di usare il disco come buffer temporaneo per l'invio differito nel tempo di dati a dispositivi periferici (la più comune applicazione dello Spool è proprio lo spooling di stampa, un sistema che attraverso una coda FIFO è in grado di somministrare ad una stampante una grande quantità di pagine, secondo i tempi che le sono congeniali, agendo in background, in modo che, durante la stampa, i tempi morti della CPU siano sfruttati dall'utente per eseguire processi a più alta priorità); con questo meccanismo era possibile caricare su disco un grosso pool di jobs, trasferirne di volta in volta una parte in memoria ed eseguirli uno per uno fino ad esaurimento, attingendo quando necessario direttamente dal disco i dati utili, con la possibilità di swappare un processo (in attesa di un evento o sospeso) su disco a vantaggio di un altro, così da tenere sempre in attività la CPU: si parla di Multiprogrammazione di tipo Batch o Batch Multiprogrammato. Diverso approccio alla gestione di job multipli è la Multiprogrammazione di tipo Time Sharing, nel quale la potenza di calcolo della CPU viene distribuita ciclicamente, per piccole frazioni di tempo, ad N utenti attraverso N terminali (ciascun utente ha l'impressione di avere le risorse del sistema tutte per sé, il singolo processo del singolo utente diventa Running per un breve intervallo di tempo e poi resta Ready nel tempo in cui operano gli altri utenti). Nel Batch Multiprogrammato con Partizione Time Sharing i jobs degli utenti (considerati prioritari perchè conversazionali, ovvero richiedono interazione con l'utente e devono sottostare a stringenti tempi di risposta) sono gestiti tramite il Time Sharing (Scheduling a Breve Termine), e solo in assenza di jobs conversazionali vengono avviati i jobs di background in modalità Batch (Scheduling a Lungo Termine); una possibile variante del modello consiste nel non fare sì che la CPU sia monopolizzata totalmente dai processi utente e prevede che una piccola frazione di tempo utile ciclico della CPU sia comunque concessa al carico di lavoro Batch. I sistemi che forniscono risposte in tempi brevi sono classificati in Hard Real Time o Real Time (non Hard) rispettivamente se tempi di risposta estremamente rapidi sono decisivi per la correttezza del sistema oppure se tempi "medi" di risposta sono comunque accettabili. Con l'avvento dei MicroProcessori i computer divennero personal e i SO offrirono un ambiente di lavoro più user friendly: il concetto di multiprogrammazione era inizialmente assente nei primi SO (si riteneva fosse legato necessariamente ad una pluralità di utenti e comunque richiedeva potenze di calcolo proibitive per l'epoca) ma oggi è supportato da tutti i SO moderni. Negli ultimi 20 anni, infine, si è dato impulso all'aggregazione di PC per costituire Sistemi Distribuiti, comunemente detti Reti, geograficamente dislocate.
Dal punto di vista dell'utente, i SO possono essere classificati in sistemi dedicati, sistemi batch (a lotti), sistemi interattivi o conversazionali, sistemi in tempo reale e sistemi transazionali. Un sistema dedicato fornisce un interprete dei comandi, la possibilità di lanciare programmi e di gestire file, il tutto dedicato ad un unico utente, caratterizzandosi per il basso sfruttamento della CPU durante le interazioni con l'utente e l'assenza di una virtualizzazione delle risorse: viene denominato Supervisore o DOS, per evidenziare rispettivamente il controllo esercitato sull'esecuzione dei lavori o il supporto alla gestione del disco. Un sistema batch (a lotti) gestisce singolarmente l'avanzamento di lavori raggruppati in lotti memorizzati su disco, privilegiando lo sfruttamento della CPU (vantaggio) a prezzo dell'assenza di interazione con l'utente, che deve fornire il suo lavoro in via preliminare e che può attenderne il completamento anche per ore o giorni (svantaggio): le unità di I/O sono virtualizzate e ciò rende le operazioni su di esse più veloci (vantaggio). Un sistema interattivo o conversazionale assegna, agli utenti che interagiscono attraverso terminali, le risorse per "quanti di tempo", riducendo il tempo di risposta e dando loro la sensazione di operare su un sistema dedicato (vantaggio): questo meccanismo produce necessariamente un overhead (svantaggio). Un sistema transazionale consente ad utenti ed applicazioni di eseguire sequenze di operazioni elementari (tipicamente manipolazione di archivi) in forma di transazioni, rispettando le proprietà di atomicità, consistenza, isolamento e persistenza. Un sistema in tempo reale esegue programmi che, interagendo con l'ambiente esterno, garantiscono a dati di ingresso risposte in tempo utile rispetto alle constanti di tempo proprie dell'ambiente esterno stesso: la correttezza del sistema dipende in modo critico dalla velocità di esecuzione. Si noti che in campo commerciale "real time" è sinonimo di conversazionale o transazionale, tuttavia i due tipi di sistemi non coincidono.
In base all'organizzazione interna possono essere inoltre classificati in sistemi monoprogrammati, sistemi multiprogrammati, sistemi time-sharing (a partizione di tempo) e sistemi ad uso speciale. In base infine all'architettura del sistema di elaborazione su cui sono calati, i SO possono essere classificati in SO per sistemi di calcolo monolitici, per sistemi di calcolo distribuiti e per sistemi di calcolo paralleli.
Appunti su: |
|