Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

Evoluzione dei sistemi operativi

informatica



Evoluzione dei sistemi operativi

Ogni sistema operativo realizza una duplice funzionalità:

costituisce una interfaccia tra la macchine e l'utente;

gestisce in modo ottimale le risorse del sistema.

Una prima classificazione di tipo cronologico permette di vedere l'evoluzione esterna, cioè quello che appare all'utente:

anni '40. I primi computer realizzati erano delle macchine molto grandi e costose, venivano gestite dall'utente che fungeva sia da operatore sia da programmatore. Queste macchine chiamate sequenzializzatori automatici possedevano un software di base composto da poche istruzioni per gestire le risorse indispensabili di input ed output(dati e programmi). Era utilizzato da un solo programmatore alla volta;

anni '50. L'evoluzione avvenuta in questi anni si basano i sistemi più moderni. Ciò è avvenuto perché si richiedeva l'introduzione di nuovi linguaggi atti a ridurre i tempi morti e a sfruttare il parallelismo delle risorse in modo tale che più lavori possano essere richiesti alla macchina( ma solo uno alla volta). Così l'elaboratore iniziò ad essere utilizzato da più programmatori;



anni '60. In questi anni si cercava di iniziare a produrre dei sistemi meno costosi con delle prestazioni più sofisticate, sia per l'hardware sia per il software. Nascono nuovi termini come interattività che stava ad indicare un uso della macchina e delle sue risorse in modo conversazionale e diretto; time sharing cioè divisine del tempo di utilizzo delle risor 414c29e se tra più utenti. Assumo grande importanza ,in questo periodo, i sistemi detti real time per i quali i tempi di risposta devono essere tali da influenzare il processo durante la sua stessa esecuzione;

anni '60(fine). I costi sono sempre troppo elevati ed il software non viene sfruttato in modo adeguato. Si ha così la crisi del software;

anni '70 la soluzione si trovò con l'introduzione di software meno complessi e costosi. Nasco così i personal computer;

anni '80. L'aumento della produzione di PC ha diminuito il controllo sui dati e l'aumento di usi illeciti. L'utilizzo del hardware va verso le cosiddette reti di computer per sfruttare il colloquio tra le macchine. Per quanto riguarda il software si è cercato di produrre dei programmi sempre più user-friendly;

anni '90. Si cerca di creare un ambiente multimediale con l'introduzione di mezzi diversi come immagini, suoni, teso. Attualmente un buon sistema è quello che sa gestire in modo ottimale le sue risorse per soddisfare l'utente.

1.2 Gestione delle risorse

Il ruolo principale del sistema operativo è quello di gestire adeguatamente le risorse che dispone. Per risorse intendiamo qualsiasi entità presente nel sistema di elaborazione che interagiscono allo scopo di permettere un processo produttivo. Un processo produttivo inizia quando l'utente comunica alla macchina, in modo specifico, le richieste dopodiché la CPU esegue i calcoli la MC, invece, conserva le istruzioni e i dati. Il tutto avviene sempre sotto la supervisione del sistema operativo che deve essere in grado di fornire all'utente una macchina utilizzabile in modo semplice, sicuro ed efficiente.

Inizialmente si è detto che le funzioni del S.O sono quella di agire come interfaccia tra la macchina e l'utente e di fornire una visone astratta delle risorse in base allo scopo che si persegue. La struttura che meglio favorisce la visone dei livelli di astrazione è quella a "cipolla" formata da diversi strati che svolgono diverse funzioni che ignorano i livelli inferiori ma ne utilizzano le funzionalità. Questi strati prevedono:

utilizzo e sincronizzazione della CPU(nucleo);

gestione della memoria centrale;

gestione delle periferiche di INPUT/OUTPUT;

gestione delle informazioni(file system);

interfaccia realizzata dai linguaggi di programmazione;

funzioni di utilità per l'utente.

I primi tre livelli gestiscono le risorse fisiche, gli altri le risorse logiche.

Le risorse possono essere distinte in statiche e dinamiche, la CPU nel sistema time sharing è una risorsa dinamica perché un processo ne può far uso quando ne ha bisogno e poi la rilascia anche se non ha completato l'esecuzione. L'assegnazione della stampante ad una richiesta di stampa è invece statica perché non si può variare la richiesta sino al termine della stampa. La risorsa può a sua vota essere esauribile o non esauribile. La CPU è una risorsa non esauribile, perché anche se può essere usata in sequenza da più processi questa non viene mai esaurita. Un esempio di richiesta esauribile sono i messaggi inviati da un processo ad un altro come quelli per effettuare la stampa.

Comunque la CPU è una risorsa interrompibile, in quanto anche se non può effettuare più lavori contemporaneamente può passare ciclicamente da un lavoro all'altro. Non si tratta però di una risorsa divisibile come lo sono i dischi o la MC, in quanto non può essere utilizzata contemporaneamente da più processi per memorizzare informazioni relative al loro avanzamento. Le risorse fisiche infine possono essere attive come la CPU o una stampante che eseguono delle azioni, o passive come la MC o memorie periferiche che permettono la registrazione delle informazioni.

1.3 Gestione dei processi   

Bisogna distinguere dapprima il processo dal programma. Quest'ultimo è un'unita statica data dalla sequenza di istruzioni da eseguire; il processo, invece, è una attività dinamica , in quanto sfrutta e gestisce le risorse coinvolte per l'esecuzione delle istruzioni del programma. Quando ad esempio si vuol "far girare un programma" si intende modificare lo stato della macchina seguendo i passi impartiti dal programma presente in memoria centrale. Così ogni processo avanza da uno stato iniziale, di attesa del servizio da parte del processore(CPU), sino alla completa esecuzione del lavoro. Possiamo quindi considerare il processo come l'unità di lavoro.

Per quanto riguarda la natura dei processi bisogna soffermarsi sui processi sequenziali, cioè processi in cui le singole istruzioni vanno eseguite solo in sequenza, una alla volta. Considerando il processore principale, la CPU, possiamo distinguere diversi processi:

processo in stato di esecuzione (running), quando la CPU sta operando per il suo avanzamento;

processo in stato di pronto (ready), quando attende la disponibilità della CPU;

processo in stato di attesa (waiting), quando richiede l'intervento di un'altra risorsa.

Ogni processo è riconosciuto dal sistema attraverso un apposito descrittore chiamato PCB(process control block): un'area della MC che funge da magazzino dei dati di un processo per tutto il tempo necessario per la sua esecuzione.

Nei moderni sistemi operativi più processi si possono trovare nello stesso stato, andando a formare, così, delle code di processi, le quali sono gestite da un apposito schedulatore.

1.4 Gestione della CPU

La CPU è il processore principale e si compone di due parti: l'unità aritmetico-logica(ALU) e l'unità di controllo(UC). L'ALU svolge i calcoli matematici e logici, mentre l'UC verifica il funzionamento del sistema, decodificando le istruzioni da eseguire e controllarne il suo svolgimento.

La CPU è una risorsa attiva, non divisibile ma interrompibile.

1.4.1 La monoprogrammazione 

In monoprogrammazione le istruzioni vengono fornite da un solo programma utente, per cui i parametri di rendimento e di utilizzo sono molto bassi. Vi può essere un solo processo alla volta in stato di esecuzione, dove rimane fino al termine dell'operazione. In questo si intuisce come la CPU rimanga per molto tempo inutilizzata, per questo motivo si è cercato di trovare una soluzione per rendimento migliore del sistema.

1.4.2 Il modo batch

La prima soluzione che è stata quella di immettere in un solo blocco una coda di richieste (modo batch). Il passaggio da un lavoro ad un altro è gestito da un sequenzializzatore automatico. Il blocco dei processi in ready è gestito in modo FIFO, cioè il primo immesso è il primo servito. Ma ciò che guida lo schedulatore è sempre il sistema operativo che richiede l'utilizzo della CPU. Quindi il processore principale ha così un lavoro in più da servire. In seguito, il miglioramento della modalità batch si è ottenuto fruttando le periferiche più veloci. Alla CPU, intanto, si è affiancato un elaboratore ausiliario che ha il compito di preparare i lotti di lavoro o le stampa dei risultati di un lotto elaborato. Si parla così di parallelismo tra varie operazioni. Anche l'introduzione dei video terminali ha consentito il miglioramento della modalità batch, in quanto così l'utente può interagire in modo reale con la macchina. Ciò produce spreco di tempo dovuto alla valutazione da parte dell'utente sui risultati delle operazioni sul terminale.

1.4.3 Le interruzioni

Un successivo miglioramento ha portato a sfruttare adeguatamente il lavoro autonomo delle risorse di input output, garantendo però la sincronizzazione tra i diversi processi. Ciò può avvenire con il meccanismo delle interruzioni.

Per interruzione intendiamo un evento, esterno interno al sistema che può sospendere l'esecuzione del processo. La gestione efficiente delle interruzioni si affianca alla multiprogrammazione, secondo la quale più programmi possono essere presenti in MC. Utilizzando questo meccanismo un processo in esecuzione può passare in stato di attesa, mentre un altro dei processi in coda può usufruire della CPU. Comunque prima che ciò avvenga bisogna che il "supervisore" abbia registrato le informazioni riguardanti il processo in corso, in quanto solo ricordando il contesto in cui è avvenuta l'interruzione è possibile riprendere correttamente l'esecuzione.

1.5 La gestione della Memoria Centrale  

La MC è considerata un magazzino dove è possibile trovare i dati e le istruzioni di qualsiasi programma che determinerà un processo in esecuzione. Essa è un insieme di locazioni indirizzabili con un numero progressivo. La quantità di memoria indirizzabile dipende dal numero di bit riservati per l'indirizzo.

determinerà un processo in esecuzione. Essa è un insieme di locazioni indirizzabili con un numero progressivo. La quantità di memoria indirizzabile dipende dal numero di bit riservati per l'indirizzo.

1.5.1 Metodi di rilocazione

La fase di rilocazione consiste nel far corrispondere ad uno spazio logico( il programma) uno spazio fisico( gli indirizzi di MC, cioè le locazioni dove andranno sistemati i dati e le istruzioni del programma. La rilocazione può essere effettuata i tre diversi modi: assoluto, statica, dinamica.

La rilocazione assoluta si trova nei sistemi di monoprogrammazione che prevedono di distribuire lo spazio ad un solo programma. Si parla di rilocazione assoluta quando durante la fase di compilazione del programma si determinano gli indirizzi di MC corrispondenti ai simboli del codice sorgente. Il compilatore prevedendo la massima estensione dovrà eliminare quei programmi che superano tale estensione.

Nella rilocazione statica gli indirizzi effettivi vengono calcolati solo al momento del caricamento del programma nella MC per l'esecuzione. Una volta stabiliti restano tali.

In questo modo in memoria centrale possono coesistere più processi, purché lo spazio disponibile lo consenta. L'area occupata deve essere contigua e la massima prevista per ogni processo. La situazione che si andrà a formare nella MC non può variare anche se si ha un'eccessiva frammentazione. Proprio la frammentazione è uno degli inconvenienti di questo tipo di rilocazione. Infatti non è possibile utilizzare lo spazio disponibile per un programma che richiede maggiore spazio.

Con la rilocazione dinamica è possibile calcolare gli indirizzi durante l'esecuzione del processo, in modo tale da poter riconfigurare la MC in base alle nuove evenienze. È una modalità più sofisticata e complessa. Riduce la frammentazione e si possono recuperare gli spazi no contigui, ma il ricalcolo degli indirizzi fisici coinvolge la CPU che dovrà interrompere il processo di esecuzione.

1.5.2 Le partizioni

Nella fase di configurazione de sistema si prevede un numero di partizioni fisse nelle quali allocare un processo alla volta. Con questo metodo si allocano programmi grandi in partizioni grandi e programmi piccoli in partizioni grandi, evitando in questo modo lo spreco di spazio. Però lo spazio residuo non può essere recuperato perché in ogni partizione viene allocato un processo alla volta. Il grado di multiprogrammazione viene dato dal numero di partizioni.

Le partizioni dinamiche prevedono che le partizioni non siano determinate a priori ma dipendenti dalla allocazione dei processi in memoria. La MC viene occupata in base alle richieste e ogni volta che un processo termina l'area libera potrà essere utilizzata o formare, con un'altra area libera contigua, una sola area utilizzabile. Questa partizione determina la più alta multiprogrammazione.

Vi sono diversi criteri da seguire per stabilire quale partizione utilizzare per allocare un determinato processo:

criterio first fit, corrisponde al solito FIFO, per cui il processo viene allocato nella prima partizione trovata libera presente nella lista ma che sia idonea alla dimensione;

criterio best fit, si sceglie fra tutte le partizioni libere, quella che lascia meno spazio libero residuo;

criterio worst fit, si sceglie fra tutto le partizioni libere quella che lascia maggiore spazio residuo.

Il primo criterio è molto veloce ma non tiene minimamente conto della frammentazione esterna.

Il secondo criterio lascia ogni volta poco spazio riducendo la frammentazione, ma quello spazio essendo poco difficilmente potrà essere utilizzato. Il terzo criterio ,invece, è più conveniente perché lascia molto spazio libero per successivi processi anche abbastanza grandi.

Le partizioni rilocabili sfruttano la rilocazione dinamica per compattare la memoria ed ottenere un'area libera di dimensioni maggiori, ove poter allocare altre richieste. Si riduce, così , la frammentazione, ma si incontrano ulteriori disagi per il fatto che se si segue questo metodo il processo di running dovrà essere interrotto perché la bisogna ricompattare la memoria. Così tutto il tempo speso per l'interruzione e il ricalcolo degli indirizzi risulta maggiore rispetto a quello servito per terminare il processo.

1.5.3 La paginazione 

In tutti i metodi finora visti si è considerata un'allocazione che tiene conto del vincolo di continuità. Ma se consideriamo di eliminare tale vincolo si assiste ad una riduzione della frammentazione consentendo in questo modo di allocare quei processi che non potrebbero essere caricati se non riconfigurando la memoria.

La memoria è divisa da parti fisiche chiamate pagine, di dimensioni fisse, nelle quali allocare le parti logiche del processo.

Poiché un processo deve mantenere la sua unità logica, il sistema deve avere l'indirizzo di pagina e l'indirizzo all'interno della pagina. Per questo motivo il sistema deve compilare una tabella contenente l'indirizzo base di ogni pagina nella memoria fisica, e una tabella contenente le pagine occupate in modo da conoscere dove allocare le nuove richieste. Si riduce così la frammentazione perché lo spreco, in questo caso, non supera più di mezza pagina. In questo modo si pensa di ridurre ulteriormente la frammentazione utilizzando pagine piccole, ma ciò vuol dire utilizzare molte pagine, quindi gestire per ogni processo una tabella delle pagine. È allora opportuno utilizzare delle memorie associative che consentano di indirizzare i dati non attraverso un indirizzo, che tenga conto semplicemente della posizione, ma attraverso una informazione particolare del contenuto stesso(chiave). Non si tratta di un diverso tipo di memoria ma di un diverso modo di indirizzamento.

Esiste una tabella intermedia tra lo spazio logico e quello fisico contenete l'indirizzo logico associato all'indirizzo fisico, consentendo in questo modo un accesso diretto alla memoria.

1.5.4 La segmentazione  

Ogni modulo di un programma ha una sua funzione e come tale può essere distinto fagli altri e trattato come una segmento a se stante. La segmentazione presuppone una divisione logica del processo e poi una sua allocazione nelle pagine fisiche della memoria. Generalmente i segmenti sono più grandi delle pagine per cui il rischio di frammentazione e quindi la necessità di ricompattamento persiste. Il supervisore deve memorizzare non solo la disponibilità o meno di un segmento ma anche la sua capienza.. Siccome la suddivisione in segmenti riguarda soltanto lo spazio logico, mentre lo spazio fisico è sempre suddiviso in pagine, lo stesso segmento può essere allocato su pagine non contigue. Così al segmento viene assegnato un numero in modo tale da riconoscerlo nella pagina in cui è stato allocato. Si parla in questo caso di segmentazione paginata.

1.5.5 La Memoria Virtuale

Il livello di multiprogrammazione è sempre condizionato dalla disponibilità della MC. Lo spazio logico può assumere qualsiasi dimensione, ma lo spazio fisico non può superare la capienza della memoria. I metodi di allocazione visti si basavano sul fatto che ogni programma venga interamente caricato in memoria. Per ampliare la disponibilità di questa risorsa bisogna studiarla attentamente sfruttando la memoria virtuale, la quale non è una memoria effettiva, ma è ilrisultato di una opportuna gestione della memoria reale con l'intervento di una periferica ad accesso veloce(disco).

1.6 La gestione della Memoria di Massa

Considerando la classica struttura a cipolla al terzo livello troviamo le unità periferiche. Con questo termine intendiamo quelle risorse di sistema che non sono strettamente necessarie al funzionamento dell'elaboratore, ma presenti solo come arricchimento del sistema. Le unità periferiche si distinguono in:

unità di Input/Output, per la comunicazione con l'esterno;

unità di memorizzazione, per la conservazione delle informazioni.

Sappiamo che nei sistemi di multiprogrammazione vi possono essere diversi processi in attesa della stessa unità. Le diverse modalità attraverso le quali il sistema soddisfa le varie richieste classificano altri tipi di unità periferiche:

le periferiche dedicate sono quelle che possono essere impiegate per un solo processo alla volta, ad esempio le stampanti o i terminali video;

le periferiche condivise sono quelle che, mettendo a disposizione uno spazio di memorizzazione, permettono l'accesso da parte di più lavori, come succede per i dischi;

le periferiche virtuali non corrispondono ad unità reali ma sono il risultato di un opportuna gestione delle risorse da parte del sistema operativo.

1.6.1 Le periferiche dedicate   

Esempio di periferiche dedicate sono i terminali video, le tastiere, le stampanti etc. sono usate da un utente alla volta e non possono essere interrotte durante il loro lavoro. Per quanto video e tastiera "lavorino insieme" sono indipendenti l'uno dall'altro e ognuno ha un proprio registro di stato e dei dati. Per quanto riguarda i processi sequenziali, quando si utilizza la tastiera si resta in stato di attesa fino a quando l'utente no avrà premuto il tasto di invio e quindi indicare i termine dell'immissione manuale dei dati. Dopodiché si genera un ulteriore interruzione <tastiera> e solo dopo tale interruzione la macchina può acquisire il contenuto dei dati immessi.

Il video quando trasmette i dati forniti dalla tastiera, fa da eco affinché l'operatore possa rendersi conto di quanto sta immettendo. Dopo la conferma dell'utente si avrà l'invio dei dati tastiera alla memoria centrale.

Per quanto riguarda la stampante, su di essa possono essere indirizzati più lavori. Però non può essere condivisa contemporaneamente da più richieste. Certamente si tratta di una richiesta seriale.

1.6.2 Periferiche condivise

esempio di periferica condivisa è il disco. Queste periferiche devono prestare servizio in modo contemporaneo a più richieste. Suddividono il loro spazio in base alle esigenze che si vengono a creare durante l'avanzamento dei processi. Considerando il disk-pack si può vedere come vengono gestiti e utilizzati i dischi. Ogni faccia è suddivisa in un numero prefissato di tracce, indirizzabili attraverso un numero. L'insieme delle tracce di tutte le facce considerate che hanno lo stesso numero vengono chiamate cilindro. Il movimento solidale compiuto dalle due testine di lettura/scrittura permettono di accedere contemporaneamente a tutte le tracce aventi lo stesso raggio. Ogni traccia risulta suddivisa in settori. L'indirizzo assegnato risulta essere tridimensionale: numero faccia, numero di traccia e numero di settore. Se però si considera un sistema dotato di più dischi in linea, si deve considerare un ulteriore indirizzo relativo al numero del disco. La rapidità con la quale il sistema individua un settore dipende allora dalla posizione delle testine.

Se consideriamo l'operazione di DISKCOPY su un dischetto non ancora formattato bisogna creare una directory radice che servirà ad individuare i file o altre directory contenute nel disco stesso. Il controllore deve sapere i settori liberi e quelli occupati.

Il tempo di accesso ad un settore risulta condizionato dall'accesso alla traccia richiesta e dalla ricerca sequenziale de settore interessato. Il tempo di accesso si determina  sommando al tempo per trovare la traccia(Tseek) il tempo per far girare il disco fino ad avere il settore interessato sotto la testina di lettura/scrittura. Vi sono alcune tecniche che consentono l'accesso al settore interessato:

FIFO o first-come, first-served, le richieste vengono soddisfatte in ordine di arrivo ed indipendentemente da qualunque considerazione di efficienza. È molto semplice, ma va bene solo con carichi di lavoro ridotti.

SSTF il metodo Shortest Seek Time First si basa sul risparmio del cammino dei bracci mobili, in quanto si considera per primo la traccia che più si avvicina alla posizione corrente della testina;

SCAN è considerato il metodo migliore, in quanto la testina si muove sempre in una direzione servendo prime quelle richieste che si trovano nella direzione della testina secondo il metodo SSTF e una volta esaurite le richieste presenti in quella direzione, la testina inverte il suo percorso e procede in modo analogo.

1.6.3 Le periferiche virtuali   

Una periferica virtuale no è un altro tipo di periferica ma soltanto una sofisticata gestione della risorsa dedicata. Questa attenta analisi ha portato il sistema operativo ad adottare funzioni che consentano una migliore gestione delle periferiche per le richieste dell'utente. Il sistema per non far controllare ogni volta all'utente se la stampante è libera, attraverso una funzione chiamata SPOOL, interviene ,in modo tale che l'utente possa fare la sua richiesta senza curarsi dello stato della stampante. Successivamente la richiesta fatta viene memorizzata temporaneamente su disco. Appena la risorsa si libera il sistema, con la tecnica FIFO, passa a servire la prima tra le richieste in coda. Il sistema, comunque, deve tenere delle opportune tabelle di corrispondenza fra le unità di lavoro e i file associati. In questo modo il processi possono avanzare come se la richiesta fosse state normalmente soddisfatta.












Privacy




Articolo informazione


Hits: 2676
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024