Linda De Benedictis
27 Gennaio 2019Mario Falanga
27 Gennaio 2019appunti scolastici di informatica di Elena
Il sistema operativo (operating system) è un insieme di programmi che governa e controlla l’uso delle componenti del sistema di elaborazione permettendo all’utente un utilizzo trasparente ed efficace delle risorse disponibili.
Con il termine risorsa si intende un elemento che può essere hardware (cpu, memoria centrale) o software (dati, programmi)
Tramite questi sistemi operativi è stato possibile caricare in memoria centrale il programma da eseguire, attivare la cpu, richiedere la lettura di un dato memorizzato su memoria di massa, effettuare delle stampe.
Un’altra funzione del sistema operativo è quella di ripartire una risorsa che è fisicamente limitata fra le tante richieste possibili. Queste funzioni sono esportate tramite le politiche di gestione che definiscono le norme scelte per una gestione razionale delle risorse.
Possiamo affermare che un sistema operativo:
-funziona come interfaccia tra l’utente e l’hardware della macchina che in modo che l’utente non debba interagire direttamente con lelaboratore..
-gestisce le risorse del sistema (cpu, memoria centrale, periferiche, informazioni) rispettando le politiche di gestione.
Struttura e funzionamento
Macchine virtuali La presenza del sistema operativo rende più semplice lavorare con il calcolatore in quanto fornisce un’immagine astratta di tutte le risorse disponibili indipendentemente da come queste funzionino. Lutente lavora con una macchina virtuale molto semplice da gestire, formata da hardware più sistema operativo. I programmi che compongono il sistema operativo sono suddivisi il livello di tipo gerarchico. I moduli del livello più basso si appoggiano direttamente all’hardware dellelaboratore e costituiscono la più semplice macchina virtuale.
Il grado di portabilità di un sistema operativo indica la possibilità di utilizzare il sistema operativo stesso su macchine con hardware diverso.
Modalità di funzionamento
Esistono molti tipi di sistema operativo: le routine che sono programmi eseguibili dalla cpu e come tali devono essere allocati in memoria centrale (zona dati e zona istruzioni).
Non tutti i programmi che costituiscono il sistema operativo possono risiedere contemporaneamente in memoria centrale solo il cuore del sistema operativo è sempre residente in memoria centrale.
Tipi di sistemi operativi
Il modo in cui il sistema operativo si presenta all’utente, cioè come il sistema operativo utilizza i dati di ingresso per produrre i risultati, possiamo distinguere sistemi che effettuano l’elaborazione a lotti e l’elaborazione interattiva.
Il modo di operare di un sistema operativo relativamente all’uso della cpu e all’elaborazione dei processi abbiamo le seguenti categorie: sistemi in monoprogrammazione, sistemi multiprogrammazione e sistemi in time sharing.
Nell’elaborazione a lotti i fati necessari all’elaborazione sono accumulati in una memoria ausiliaria durante un certo periodo di tempo.
Lelaborazione interattiva permette di colloquiare con il programma in esecuzione. L’uso di terminali consente all’utente di lavorare dal proprio posto di lavoro, come se l’unità centrale fosse solo a sua disposizione: in realtà più utenti vengono serviti ripartendo fra di loro le risorse del sistema.
I sistema in monoprogrammazione sono quei sistemi che permettono l’esecuzione di un solo programma utente alla volta.
Il sistema operativo deve caricare il programma in memoria centrale, inizializzare i registri per l’esecuzione ed è responsabile delle operazioni di ingresso e uscita dei dati. I sistemi di multiprogrammazione sono quei sistema operativo che permettono di allocare più programmi utente in memoria centrale e di ripartire fra questi l’uso delle risorse.
Per rendere indipendente la cpu dell’attività di ingresso e uscita dei dati sono stati introdotti gli elaboratori di canale che sono piccoli elaboratori in grado di eseguire le operazioni di trasferimento dei dati fra la memoria centrale e le periferiche e viceversa.
Un particolare caso di multiprogrammazione è il multitasking. Particolarmente diffuso nei sistemi dedicati attuali, permette al sistema di elaborare più applicazioni (task) contemporaneamente.
Il time slice è un periodo durante il quale la cpu lavora x un programma.
Quindi se la cpu è gestita in time sharing essa rimane assegnata a un programma finche: -il programma non termini, -il programma richiede un operazione di I/O, -scade il time slice.
Prestazioni di un sistema operativo
Il sistema operativo è costituito da moduli che devono essere eseguiti dalla cpu proprio come i programmi degli utenti.
%CPU indica in percentuale il tempo di utilizzo della cpu in rapporto al tempo di lavoro di tutto il sistema.
Tcpu = tempo di lavoro della cpu
%cpu= tcpu/Ttotale
Ttotale = tempo I/O + Tcpu
E’ necessario evitare che il sistema cada in system overhead situazione nella quale la percentuale di utilizzo della cpu per eseguire programmi di sistema è troppo alta rispetto a quella dedicata all’elaborazione dei programmi utente.
Gestione del processore
Nucleo del sistema operativo
La componente principale dellelaboratore a anche la più costosa, è la cpu (central processing unit). Tutti i programmi hanno bisogno della cpu per essere eseguiti. Di particolare importanza è la parte del sistema operativo che si occupa dell’assegnazione della cpu ai singoli lavori che ne richiedono l’uso. Le funzioni che questi moduli devono svolgere sono: -mantenere aggiornato lo stato del processore (libero/occupato), -decidere a quale processo assegnare il processore quando se ne presenti la necessità, -assegnare il processore al processo (quello scelto), -riprendere il controllo del processore quando il processo è terminato o sospeso.
Programma è la descrizione delle istruzioni che devono essere svolte.
Processo è un programma in esecuzione.
La gestione dei processi è affidata a quei moduli del SO che formano il nucleo (kernel) e che sono sempre residenti in memoria centrale.
Fanno parte del nucleo: schedulatore dei lavori, schedulatore dei processi, controllore del traffico, gestore delle interruzioni, procedure di sincronizzazione e comunicazione tra i più processi necessarie per lo scambio di dati e informazioni
Ogni stato corrisponde a una situazione in cui si trova il programma da eseguire (è in esecuzione, è in attesa della stampante ecc..) il passaggio da uno stato all’altro è deciso dal sistema operativo sulla base delle politiche di schedul’azione. A ogni passaggio corrisponde una transazione che è effettuata tramite l’esecuzione di uno specifico programma del sistema operativo
Un lavoro può trovarsi in uno dei seguenti stati:
hold = il lavoro è stato proposto al sistema. Esso è in attesa di esecuzione e di trova in memoria di massa
ready = il programma è diventato processo e si trova in memoria centrale pronto per essere eseguito
run = il processo è in esecuzione
wait = il processo è in attesa
end = il processo è terminato
per poter compiere queste operazioni lo schedulatore accede alla lista di hold che contiene un JCB (job control block) per ogni programma in questo stato.
Generalmente un JCB contiene: lidentificativo del programma, l’occupazione espressa in Kbyte, lidirizzo di caricamento su memoria di massa, gli identificatori delle periferiche e il puntatore al JCB successivo.
Una volta individuato il programma da caricare un altro modulo del sistema operativo elimina l suo JCB dalla lista di hold e inserisce un nuovo PCB (process control block) nella lista di ready.
Generalmente un PCB contiene: lo stato in cui si trova il processo, lidentificatore del processo, il registro di salvataggio, l’indirizzo di caricamento in memoria centrale, gli identificatori delle periferiche, file aperti,il puntatore al PCB successivo.
Politiche di schedul’azione
Lo schedulatore dei lavori deve individuare quale lavoro può avanzare nello stato di ready tra tutti quelli presenti nella lista dei lavori in stato di hold. Tra tutti i lavori che hanno queste caratteristiche bisognerà effettuare una scelta e a questo scopo sono state definite diverse politiche:
FIFO i lavori sono ordinati nella lista in ordine di arrivo. Il primo lavoro inserito nella lista sarà il primo a passare dallo stato di hold allo stato di ready.
PRIORITA STATICA a ogni lavoro è assegnato un valore che indica il livello di importanza dal lavoro.
PRIORITA DINANICA affichè non ci siano lavori che permangono troppo tempo in coda xkè ce ne sono altri con priorità maggiore, il sistema operativo aumenta il valore della priorità in funzione del tempo di permanenza del lavoro in coda. Lo schedulatore dei processi si occupa di assegnare la cpu a un processo cioè deve decidere a quale processo in stato di ready assegnare il processore; esso è in grado di compiere questa funzione secondo una delle seguenti politiche:
round robin: il processore viene assegnato a turno per un intervallo di tempo stabilito. La coda è gestita con il metodo fifo e quindi tutti gli inserimenti provenienti dalla coda di hold, dalla coda di wait o quelli causati dall’esaurimento di un time slice avvengono al fondo.
Round robin a percentuale di tempo: la tecnica a percentuale di tempo è una variante del round robin, il processo non verrà inserito necessariamente al fondo, ma la posizione di rientro nella coda dipende dalla percentuale di tempo di cpu utilizzata. Round robin limitato : è ancora una variante del round robin. E prefissato il numero di time slice che un processo può utilizzare, terminati questi time slice il processo è inserito in una nuova coda che sarà presa in considerazione solo quando la coda del round robin è esaurita.
Priorità statica: a ogni processo viene assegnata una priorità in fase di generazione. Priorità dinamica: il sistema operativo modifica la priorità in base al tempo di utilizzo della cpu.
Procedure di sincronizzazione e comunicazione tra processi
Due processi si dicono concorrenti se sono presenti nel sistema contemporaneamente.
Due o più processi concorrenti si dicono disgiunti se sono completamente indipendenti l’uno dall’altro in quanto utilizzano ciascuno le proprie strutture di dati. Due o più processi si dicono interagenti quando accedono a variabili o a risorse comuni. Per non creare conflitti è necessario applicare il principio della mutua esclusione una risorsa ripartita può essere utilizzata da un solo processo per volta e solo quando il processo ne ha terminato l’uso essa può essere assegnata a un altro processo. Due o più processi sono in situazione di stallo quando sono in attesa di eventi che per vari motivi non potranno mai accadere.
Gestione della memoria
Per zona dati si intende quella parte del programma dove sono state definite le variabili e che dovrà contenere i valori che queste assumeranno durante l’esecuzione. Per zona istruzioni si intende la parte del programma che contiene le istruzioni operative.
Definiamo spazio degli indirizzi di un programma la zona di memoria centrale formata da zone dati più zona istruzioni.
Il gestore della memoria è formato dai moduli del sistema operativo che si occupano di: – tenere aggiornato lo stato di ogni locazione di memoria, – assegnare la memoria centrale ai processi che ne fanno richiesta, – gestire il recupero della memoria centrale quando un processo termina.
Allocazione a singola partizione
Nella memoria centrale viene caricato un solo programma utente che cmq non può occupare tutta la memoria disponibile perché una porzione è sempre riservata al sistema operativo.
Allocazione per partizioni
Se si vogliono avere in memoria centrale più processi in contemporanea allora si deve ricorrere ad altre tecniche, con la tecnica dellallocazione per partizioni la memoria centrale viene suddivisa in sezioni dette appunto partizioni.
Nella gestione per partizioni fisse la dimensione delle partizioni può essere determinata dal sistema responsabile del centro di calcolo conoscendo l’ampiezza media dei programmi che devono essere eseguiti.
Con la tecnica delle partizioni dinamiche le partizioni non sono fissate a priori ma viene creata una ogni volta che il gestore della memoria deve allocare un programma in memoria centrale.
La tecnica delle partizioni dinamiche può favorire la creazione di aree piccole e distribuite che non possono essere utilizzate perché la loro dimensione non è idonea al caricamento di programmi. Infatti programmi di una certa dimensione potrebbero non essere caricati perché non esiste uno spazio sufficiente. In questo caso si parla di frammentazione della memoria. Per assegnare una partizione si utilizza una delle seguenti politiche di assegnazione: first fit: il gestore della memoria scandisce la tabella delle aree libere assegnando al lavoro la partizione libera.
Best fit: il gestore della memoria scandisce tutta la tabella delle aree libere assegnando al lavoro la più piccola partizione che la possa contenere, le aree più grandi non vengono frammentate.
Paginazione
Con la paginazione si risolve il problema della frammentazione: la memoria centrale è suddivisa in blocchi aventi la stessa dimensione e lo spazio degli indirizzi di un programma è suddiviso logicamente in parti chiamate pagine.
I blocchi hanno la stessa dimensione della pagine e lallocazione del programma avviene quando in memoria centrale esiste un numero di blocchi liberi pari o superiori al numero di pagine da allocare.
Il sistema operativo deve gestire alcune tabelle di abbinamento: la tabelle delle pagine e la tabella dei blocchi.
Con la tecnica della memoria virtuale si accettano lavori di qualsiasi dimensione e si portano in memoria centrale solo quelle porzioni che devono essere eseguite.
Esistono due tecniche per la gestione della memoria virtuale:
– richiesta di pagine , – segmentazione.
La gestione della memoria virtuale a richiesta di pagine utilizza le stesse tecniche della paginazione suddividendo il programma in pagine e la memoria centrale in blocchi della stessa dimensione. Per tenere sotto controllo l’occupazione della memoria il sistema operativo deve gestire queste tabelle: tabella delle pagine che contiene informazioni sulle pagine di ciascun programma, tabella dei blocchi che contiene informazioni sullo stato di ciascun blocco di memoria centrale, tabella di mappa contiene informazioni per ogni pagina caricate in un blocco.
Segmenti In un sistema a memoria virtuale basato sulla segmentazione il programma viene diviso in porzioni dette segmenti che corrispondono a unità logiche definite dal programmatore come ad esempio un array una tabella e una routine. La segmentazione è di fatto una generalizzazione della gestione a partizione dinamiche in questo caso i segmenti possono essere allocati in un’area di memoria che ha le loro esatte dimensioni.
Si può usare una tecnica combinata fra pagine e segmenti che permette di ridurre alcuni degli inconvenienti presenti nelle due tecniche. Il sistema operativo deve gestire due tipi di interruzione probabili: mancanza del segmento in memoria (segment fault) e mancanza di pagine (page fault).