Che materia stai cercando?

Anteprima

ESTRATTO DOCUMENTO

Autori: Messina Francesco, Lento Maria Rita.

Gli INTERPRETI individuano gli stessi errori dei compilatori, (lessicali, sintattici, semantici

definiti di tipo statico) ed in piu' gli errori semantici di tipo dinamico chiamati RUNTIME

ERRORS. Sono quegli errori che possono essere individuati solo in fase d’esecuzione

(RUN) del programma. (Es.: divisione per zero se decrementandosi b nel corso dell'ese-

cuzione del programma divenendo zero, sara' impossibile compiere l'operazione a/b, op-

pure OVERFLOW cioe' superamento della massima quantita' di rappresentazione.

CONFRONTO TRA COMPILATORI ED INTERPRETI

INGRESSO:

? COMPILATORI: il programma sorgente;

? INTERPRETI: il programma sorgente piu' i dati da utilizzare nell'esecuzione.

ERRORI RILEVATI:

? COMPILATORI: segnalazione di errori statici;

? INTERPRETI: segnalazione di errori statici e dinamici (a run time).

IN CASO DI MODIFICA DEL SORGENTE, O DI FATAL ERROR

? COMPILATORI: il programma sorgente deve essere ricompilato per intero per essere

eseguito (e corretto se c'è un errore);

? INTERPRETI: l'esecuzione puo' riprendere subito dopo la modifica senza bisogno di

ricompilare prima l'intero programma, un eventuale errore puo' essere corretto non

appena scoperto.

Inoltre la velocita' di esecuzione di un programma compilato e' generalmente maggiore

rispetto a quella di un programma interpretato.

COMPILATORI O INTERPRETI:

Per i vari linguaggi ad alto livello, generalmente sono disponibili sia i compilatori sia gli in-

terpreti. 25

Appunti di conoscenze informatiche di base.

Il tipo d’applicazione determina la scelta, infatti, fra i vari programmi in tal senso possia-

mo dividere l'analisi in due sottogruppi:

- APPLIC AZIONI I/O BOUND: in questi tipi d’applicazione molto e' il compito svolto

dalle periferiche rispetto a quello che svolge la CPU;

- APPLICAZIONI CPU BOUND: il lavoro maggiore viene svolto dalla CPU mentre un ruo-

lo di minore importanza viene giocato dalle periferiche, tutto cio' comporta per questi pro-

cessi velocita' differenti, maggiori per l'I/O BOUND minori per i CPU BOUND.

E' quindi consigliabile l'uso del compilatore se si parla d’applicazioni CPU bound, mentre

sono piu' congeniali dei programmi interpreti per le applicazioni d’IMPUT- OUTPUT.

Quando il compilatore genera il programma oggetto, non assegna a dati ed istruzioni de-

gli indirizzi assoluti (es. cella di memoria n°6), ma indirizzi relativi (definiti a meno di una

posizione costante non specificata. Gli indirizzi sono quindi riferiti ad una posizione co-

stante senza che pero' si sappia qual e' la "posizione di partenza".

Es. quinta cella dopo la posizione START, senza che sia stata specificata la posizione di

START in memoria. La posizione di START verra' definita solo quando il programma ver-

ra' caricato in memoria centrale. Solo allora il programma sara' eseguibile. Otteniamo co-

si' che per conoscere l'indirizzo definitivo di un' istruzione nella propria cella di memoria

dobbiamo sommare l'indirizzo relativo all'indirizzo di START

Es. START = 13, indirizzo istruzione x = 5: indirizzo assoluto di x = 18.

Spesso puo' accadere di dover usare funzioni logiche, matematiche o simili all'interno di

un programma e, piuttosto che costruire la struttura di queste funzioni, puo' essere piu' u-

tile richiedere l'utilizzo di apposite librerie dalle quali richiamare le funzioni interessanti.

Così facendo si snellisce la programmazione e non si sopporta l’onere della programma-

zione anche delle funzioni desiderate. Es. seno, coseno tangente etc.

Questi sottoprogrammi all'interno delle librerie una volta richiamati devono essere colle-

gati al resto del programma tramite un programma "COLLEGATORE". Se non si desse il

riferimento del programma presente in libreria, l'esecuzione del nuovo programma non

potrebbe avere luogo.

Vi sono altri motivi per cui il codice oggetto non e' ancora eseguibile:

- il P.O. puo' contenere dei riferimenti a funzioni (blocchi di codici) definite esternamente

al programma, che compiono particolari operazioni per suo conto oltre a quelle su ac-

cennate, vi possono essere ad es. gestioni di periferiche oppure variabili esterne condivi-

se.

26

Autori: Messina Francesco, Lento Maria Rita.

-Tali riferimenti sono lasciati irrisolti, cioe' ad essi non corrisponde ancora un indirizzo.

Perche' il P.O. diventi eseguibile, e' necessario collegare queste funzioni (o variabili) al

programma. UTILITA' DEI SOTTOPROGRAMMI.

Per risolvere un problema complesso, e' conveniente scomporlo in sottoproblemi piu'

semplici.

Ogni sottoproblema puo' essere risolto da un sottoprogramma (modulo), che puo' essere

compilato a se stante, indipendente dagli altri moduli.

Compilandoli ognuno per conto proprio, ci si rende conto se il modulo contiene errori,

quindi rivisto ed eventualmente corretto, successivamente si pensa a collegarli insieme.

COLLEGAMENTO ED ESECUZIONE DEI PROGRAMMI

Una volta scritti e compilati i moduli relativi ai sottoproblemi, occorre collegarli per costi-

tuire un unico programma soluzione del problema principale.

Il programma che si occupa di ricucire i diversi moduli in un programma unico e' il LIN-

KER.

CICLO DI SVILUPPO D’UN PROGRAMMA

PROBLEMA al problema segue l'ALGORITMO espressione del metodo per la risolu-

zione del problema al quale segue il PROGRAMMA che e' la codifica dell'algoritmo

in linguaggio Per poter dare attuazione pratica al programma ancora su carta si ri-

corre ad un EDITOR DI TESTO viene cosi' ottenuto il PROGRAMMA SORGENTE.

Ponendo che il programma che desideriamo ottenere sia CPU-BOUND, utilizziamo il

COMPILATORE cosi' facendo viene ottenuto il PROGRAMMA OGGETTO che con-

tiene gli indirizzi relativi ed i riferimenti esterni irrisolti segue il LINKER, sara' suo il

compito di collegare questi riferimenti al programma cio' porta al PROGRAMMA

COLLEGATO, restano inevasi solo gli indirizzi relativi che vengono trasformati in assoluti

tramite il caricamento in memoria centrale del programma collegato, questo compito

spetta al LINKER. A questo punto se sussistono errori lessicali e semantici sono stati

27

Appunti di conoscenze informatiche di base.

corretti. se sussistono ancora errori potrebbe trattarsi di errori a run-time. Sara' compito

del DEBUGGER individuarli e una volta corretti, otteniamo cosi' il PROGRAMMA ESE-

GUIBILE.

SOFTWARE DI BASE

Sistema di elaborazione: struttura gerarchica composta da elementi hardware e software:

vengono visti come tre insiemi uno interno all'altro nell'ordine di hardware che occupa la

posizione piu' interna, software di base, senza il quale il computer e' un "inutile ammasso

di ferraglia", e software applicativo.

SW di base: e' rappresentato da quell'insieme di programmi che servono ad attivare

l'hardware ed e' fondamentale per utilizzare il computer.

SW applicativo: usa il calcolatore per raggiungere un determinato tipo di risultato. Se

l'HW non e' opportunamente pilotato dal SW di base non e' in grado di operare.

SW di base

insieme di programmi che:

? permettono le comunicazioni tra le varie componenti dell'hardware;

? gestiscono le risorse HW in modo ottimale per servire le richieste dell'utente o di piu'

tenti. Utente che non necessariamente deve essere un essere umano, ma si po-

trebbe trattare di un programma applicativo.

? consentono al calcolatore di eseguire programmi scelti in linguaggi ad alto livello, tra-

ducendo tali programmi in linguaggio di programmazione. Fanno parte, ad esempio,

del SW di base, il programma assemblatore, il compilatore, l'interprete, il linker, il lo-

ader, ..., nonche' il sistema operativo. .

N.b. da questo punto in poi ci si distacca dal De Michelis

Capitolo 11: SISTEMA OPERATIVO

E’ definito come l'insieme di programmi che gestiscono le risorse di un calcolatore in mo-

do da consentire agli utenti un uso agevole ed efficiente del calcolatore stesso.

Il sistema operativo e' definito anche come uno strato software che nasconde all'utente la

complessita' dell'hardware.

28

Autori: Messina Francesco, Lento Maria Rita.

Grazie al sistema operativo l'utente non "vede" la macchina reale e non deve neanche

preoccuparsi dei problemi di gestione dei dispositivi hardware.

L'utente interagisce con la macchina virtuale che è indubbiamente più' facile da gestire.

Questo comporta il notevole vantaggio di non doversi occupare neanche dei dispositivi

imput-output di collegamento esterno com’es. stampanti, che sono passibili di mutamen-

to senza che ne risenta la struttura del calcolatore. Detto in altri termini, il S.O.

consente di utilizzare qualunque collegamento esterno senza ingenerare blocchi o re-

strizioni nello utilizzo del calcolatore.

La macchina virtuale e' più' facile da programmare: i programmi utente utilizzano risorse

virtuali e non devono occuparsi della gestione delle risorse reali (gestite dal S.O.). La

macchina virtuale e' l'immagine della macchina reale che il S.O. offre all'utente. Essa e':

- più' estesa, cioè' ha più' risorse;

- più' facile da usare della macchina reale.

Il S.O. disciplina la gestione degli accessi, quindi nel caso in cui vi sono più' utenti che in-

tendono stampare qualcosa, ognuno otterrà cio' che aveva scritto perche' il S.O. ha stabi-

lito dei ”turni"

La macchina virtuale e' in grado di offrire all'utente dei servizi dietro invio di apposite RI-

CHIESTE (funzione di interfaccia verso l'utente).

Le richieste possono essere formulate in due modi:

- direttamente dall'utente (modalita' interattiva), tramite comandi di sistema. (Es. copia,

stampa, ..... ).

- indirettamente dai programmi utente, tramite istruzioni particolari (chiamate di sistema),

che vengono tradotte in chiamate ai programmi del S.O. (es. WRITE del programma PA-

SCAL si traduce in una chiamata a quella parte del S.O. che permette la gestione delle

periferiche).

Funzione di interfaccia utente del sistema operativo: fornisce all'utente un dato insieme di

servizi richiamabili mediante comandi o chiamate di sistema .

Se la richiesta dell'utente e' inviata tramite comandi (detta modalita' interattiva) occorre

un interprete di comandi (SHELL), programma che riceve i comandi direttamente impartiti

dall'utente, li interpreta e li traduce in chiamate programmi di sistema opportuno.

Ogni sistema operativo ha la sua shell ed eventualmente anche piu' di una. 29

Appunti di conoscenze informatiche di base.

Una parte del S.O. e' sempre residente in memoria, pronta ad esaudire le richieste dell'u-

tente o dei programmi dell'utente.

Figura 1. gerarchia interna al S.O.

l'interprete dei comandi non puo' mancare, ma non fa parte integrante del sistema opera-

tivo perche' ciascun utente puo' decidere di riscrivere lo shell. (Sostituendo ad es. dir op-

pure diskcopy con altre parole).

Il nucleo è il software che gestisce l'unita' centrale (CPU), un es. di servizio offerto dal

S.O. e' la esecuzione di un programma memorizzato sul suo disco rigido.

COSA NON SI VEDE !!

Il S.O. si occupa di :

- leggere il programma dal disco e caricarlo in memoria centrale, cioe' fa in modo che il

loader si occupi del caricamento del programma in memoria;

- comandare l'esecuzione del programa;

- riprendere il controlo del sistema di elaborazione ed esecuzione.

Altri esempi: stampa di un documento da un dispositivo periferico all'altro.

Le tre macchine virtuali sono tra loro integranti in quanto quella piu' esterna usa la fun-

zionalita' della precedente.

Nucleo: (KERNEL) insieme di programmi che colloquiano direttamente con l'H.W. e si

occupano dell'esecuzione dei programmi utente e di sistema.

30

Autori: Messina Francesco, Lento Maria Rita.

In ogni calcolatore c'e' una ROM contenente un programma che si occupa del carica-

mento del sistema operativo in memoria centrale (BIOS). Per questo motivo appena ac-

ceso il computer lo si ritrova sulla RAM ed e' in condizione di operare nel giro di pochi

secondi (BOOT).

Il nucleo gestisce processi ed eventi esterni generati dalle periferiche,chiamati "INTER-

RUZIONI". Il processo e' un programma in esecuzione. Include:

- il programma eseguibile;

- i dati;

- altre informazioni sul processo,necessarie alla sua esecuzione,dette contesto.

Un programma si trasforma in processo quando viene mandato in esecuzione. I processi

possono essere associati ad un programma di sistema operativo o ad un programma u-

tente.

11.2 DIFFERENZA NELLA MODALITA' DI FUNZIONAMENTO

I Programmi di sistema eseguono in modo supervisore le modalita' privilegiate senza al-

cuna restrizione sulle operazioni consentite.

I Programmi utente eseguono in modo utente, con diverse restrizioni sulle operazioni

permesse.

11.3 S. O. DIFFERENZA TRA SISTEMI OPERATIVI UNIPROGRAMMATI E MULTIPRO-

GRAMMATI

Nel sistema operativo uniprogrammato oltre al S.O. in memoria centrale vi e' un unico

ramma applicato. 31

Appunti di conoscenze informatiche di base.

Nel sistema multiprogrammato in memoria centrale, oltre al S.O. stanno piu' programmi

applicati-

vi.

I tempi di I/O sono "morti" per la CPU, quindi vengono sprecati. Per Questo motivo si so-

no creati i sistemi MULTIPROGRAMMATI che in ogni istante in memoria centrale, oltre al

sistema operativo permettono di risiedere a piu' programmi utente (Windows 95, UNIXS,

ETC..).

Se un sistema e' dotato di una sola CPU, allora un solo programma puo' trovarsi in ese-

cuzione in un solo istante, per questo motivo si ha un utilizzo limitato del sistema. Qual e'

allora il vantaggio dei multiprogrammati ? Se sono presenti piu' programmi i esecuzione,

questi utilizzano i tempi morti della CPU in un processo per sfruttare il suo operato nell'

altro.

Il nucleo quindi simula l'esecuzione parallela di piu' processi stabilendo dei turni di utilizzo

della CPU secondo opportune politiche di assegnazione.Bisogna ricordare che il paralle-

lismo ottenuto tra i processi e' virtuale, visto che in realta' non sono paralleli. Si ha un pa-

rallelismo effettivo invece nei sistemi multiprocessore, che dispongono di piu' CPU.

11.4 VANTAGGI E SVANTAGGI DEL PARALLELISMO VIRTUALE

Il vantaggio del parallelismo virtuale comporta uno spreco inferiore nel tempo di CPU poiché i pro-

cessi eseguono le operazioni di CPU parallelamente. Si tratta in ogni modo di un parallelismo vir-

tuale visto che, in un qualunque istante sarà solo un processo ad occupare la CPU.

32

Autori: Messina Francesco, Lento Maria Rita.

Tuttavia il grado di parallelismo virtuale è limitato dalla quantità di tempo I/O dei processi in ese-

cuzione come ad esempio problemi con processi CPU bound, Oltre tutto un eventuale processo P3

deve aspettare che vadano in esecuzione P1 e P2, anche se dura un solo secondo. Per evitare il pro-

blema bisogna aumentare il GRADO DI PARALLELISMO VIRTUALE. Vale a dire che occorre

evitare che un processo monopolizzi la CPU o che la impegni per troppo tempo.

Nei sistemi a partizione di tempo, detti anche TIME SHARING, AD OGNI PROCESSO è assegna-

to un QUANTO di tempo, ossia un intervallo massimo d’utilizzo della CPU. Il nucleo del sistema

operativo, anche detto Kernel, toglie la CPU al processo che ha esaurito il suo quanto o che deve fa-

re un’operazione di I/O.

11.4 Vantaggi del time sharing

I sistemi a partizione di tempo tendono ad uno sfruttamento continuo della CPU. Con tendere si

vuole sottolineare che lo sfruttamento può non avvenire se le fasi di I/O non coincidono.

Se dovesse essere inserito un altro processo P4 verrebbe inserito con un quanto pari a quello degli

altri. Gli utenti che hanno lanciato i processi P1, P2, P3, hanno tutti la sensazione che i loro pro-

grammi siano in esecuzione. Così facendo no n si ha un processo che monopolizza la CPU, cons e-

guenza diretta ne è che P1, P2, P3, evolvono come se avessero tre CPU separate.

Quanto deve essere lungo un quanto?

La durata del quanto è critica per l’efficienza del sistema poiché un quanto breve si ha una scarsa

efficienza in quanto il sistema operativo deve gestire molte volte il passaggio dei contesti, questo ne

provoca il sovraccarico con relativa perdita di velocità anche l’opposto provoca un problema analo-

go, se un quanto fosse eccessivamente lungo si perderebbe il parallelismo con la consecutiva mono-

polizzazione della CPU per il primo processo rispetto agli altri. Si avrebbe in ogni caso una cond i-

zione di sequenzialità nei programmi e non un parallelismo.

Abbiamo parlato di programmi e di processi cerchiamo di vedere la differenza che ne intercorre.

Sono definiti processi delle entità dinamiche che evolvono attraversando stadi. Gli stadi attraversati

sono:

? In esecuzione, RUNNING, la CPU è a disposizione per l’esecuzione;

? Pronto per l’esecuzione, READY TO RUN, nell’attesa che la CPU possa eseguirla, se vi sono

un insieme di processi pronti questo fenomeno va sotto il nome di ready queue;

? In attesa, waiting, non ancora pronto per l’esecuzione, nell’attesa di un evento esterno. 33

Appunti di conoscenze informatiche di base.

Una volta pronto il processo passa in esecuzione e abbandonerà questo stadio per due possibili mo-

tivi, o perché il processo ha avuto termine, oppure perché è terminato il quanto di tempo a sua di-

sposizione.

Gli accodamenti dei processi verranno gestiti in modo FIFO (first in first out).

Il nucleo maschera al processo la privazione ed il riassegnamento del processore tramite salvataggio

e ripristino del contesto.

IL GESTORE DELL’ UNITA’ CENTRALE è una parte del nucleo che si occupa di assegnare la

CPU ai processi pronti al fine di permettere loro di progredire nell’elaborazione e di terminarla. In

ogni istante un solo processo ha la CPU, trattandosi di sistemi monoprocessore, la gestione della

CPU consiste nell’assegnare il tempo di CPU ai vari processi.

Gli obiettivi del gestore della CPU sono:

? Massimizzare il tasso di servizi, detto troughput, ossia il numero medio di processi eseguiti

nell’unità di tempo;

? Massimizzare il grado d’utilizzo della CPU, ossia il rapporto tra:

INTERVALLI DI TEMPO IN CUI LA CPU E’ ATTIVA

TEMPO TOTALE DI CPU TRASCORSO

? Minimizzare il tempo di risposta che consiste nella differenza di tempo tra il lancio di un pro-

cesso ed il suo termine o tra l’invio di un comando e l’arrivo della risposta;

? Minimizzare il sovraccarico di schedulazione, ossia il tempo speso dall’unità centrale per ese-

guire i programmi di gestione della CPU.

11.5 INTERRUZIONI

Gli eventi generati dalle periferiche sono detti interruzioni. Possono essere:

? Interne, dove il segnale parte da un processo come ad esempio la richiesta di I/O;

? Esterne,dove il segnale è generato dalla periferica. Ad es. quando la stampante richiede altra

carta per finire l’operazione, oppure perché è stata già conclusa.

? Per errore.

Al verificarsi di un’interruzione il nucleo del sistema operativo:

? Interrompe il processo P in esecuzione;

? Ne salva il contesto in una determinata zona di memoria;

34

Autori: Messina Francesco, Lento Maria Rita.

? Esegue il programma di gestione dell’interruzione, che si troverà in un punto determinato della

memoria centrale;

? Stabilisce qual è il processo da mandare in esecuzione e ne ripristina il contesto.

Ripristinare il contesto significa copiare nei registri della CPU il contenuto dell’area di memoria

nella qual è registrata la descrizione del contesto del processo al momento della sua sospensione.

La macchina virtuale simulata dal nuc leo, differisce dalla macchina base perché:

? Possiede tante unità centrali quanti sono i processi da eseguire;

? Non possiede meccanismi d’interruzione.

Il nucleo fornisce agli strati superiori la visione di un insieme di CPU virtuali ciascuna dedicata ad

un processo attivo.

La gestione della memoria e quella delle periferiche non sono in una scala gerarchizzata. Entrambe

vedono, infatti, la macchina virtuale offerta dal nucleo e si trovano sullo stesso piano quindi anche

se svolgono funzioni diverse.

Il gestore della memoria (G.D.M.) è il modulo di sistema operativo che si occupa di assegnare la

memoria ai processi al fine di permettere loro di essere eseguiti.

La memoria centrale è una risorsa condivisa tra più processi ed il gestore della memoria si occupa

di come suddividere la memoria in parti e come assegnare tali parti ai vari processi.

Gli obiettivi del gestore della memoria, sono:

? massimizzare il numero di processi caricati in memoria;

? massimizzare il grado d’occupazione della memoria, ossia il rapporto fra:

NUMERO CELLE OCCUPATE

NUMERO TOTALE CELLE DISPONIBILI

? minimizzare il sovraccarico di gestione, ossia il tempo speso dall’unità centrale per eseguire i

programmi di gestione e della memoria.

11.6 Rilocazione

Attraverso la rilocazione si stabilisce una corrispondenza tra indirizzi relativi o logici e indirizzi fi-

sici. È questa un’operazione della quale non si occupa il sistema operativo, ma i compilatori, il lin-

ker ed il loader, che non ne fanno parte. 35

Appunti di conoscenze informatiche di base.

TECNICHE DI GESTIONE DELLA MEMORIA

Rilocazione assoluta: viene fatta o in fase di compilazione o subito dopo la compilazione, quindi

senza tenere conto dell’effettiva disponibilità di memoria nel momento in cui il programma sarà e-

seguito. Ad esempio, parliamo di rilocazione assoluta se chiediamo chi il programma eseguibile do-

vrà essere caricato nella porzione di memoria che va dalla cella 1000 alla cella 1267.

SVANTAGGI:

? il programma dovrà essere caricato sempre e solo in quella posizione, anche se eseguito più vo l-

te;

? la dimensione del programma è limitata, in quanto esso deve poter essere contenuto per intero

nella memoria centrale;

? può funzionare solo nei sistemi monoprogrammati.

Rilocazione statica: la trasformazione degli indirizzi logici in indirizzi fisici è effettuata solo nel

momento in cui si richiede l’esecuzione del programma. Se ne occupa il loader. La porzione di me-

moria assegnata al programma è costituita da celle contigue.

DIFFERENZE CON LA RILOCAZIONE ASSOLUTA

Il legame tra indirizzi logici ed indirizzi fisici vale solo per una data esecuzione del programma; in

esecuzioni diverse, un programma può occupare aree di memoria diverse, secondo la disponibilità

corrente.

PRIMA DOPO

Blocco occupato P3

Blocco occupato P6

Blocco occupato P1 Blocco libero

Blocco occupato P2 Blocco occupato P2

Blocco occupato P3 Blocco libero

Blocco occupato P4 Blocco libero

Blocco occupato P5 Blocco occupato P4

Blocco libero Blocco libero

Blocco libero

Blocco occupato P5

36

Autori: Messina Francesco, Lento Maria Rita.

I blocchi liberi sono troppo piccoli per essere allocati ad un processo, ma la somma delle loro di-

mensioni non è trascurabile. Nasce il problema della frammentazione che può essere risolto con va-

rie politiche. 37

Appunti di conoscenze informatiche di base.

11.7 FRAMMENTAZIONE DELLA MEMORIA

successive operazioni di caricamento e scaricamento di programmi creano tante porzioni di memo-

ria libere di dimensioni tanto ridotte da essere insufficienti a contenere interamente un programma,

ma rilevanti se sommiamo tutte le porzioni di spazio inutilizzato che si va accumulando.

Le varie politiche che possono essere applicate prendono il nome di:

- FIRST FIT

- BEST FIT

- WORST FIT.

Se viene scelta la prima politica di caricamento dati, cioè la first fit, questa sceglie la prima porzio-

ne di memoria libera che sia in grado di ospitare il programma, tutto ciò provoca un’elevata fram-

mentazione che si traduce in un costo elevato in termini di memoria che ne è sprecata.

Se viene applicata una politica di best fit il programma viene allocato nel blocco di memoria libero,

più piccolo, in grado di contenere il processo.

Con la politica di worst fit si cerca di prevenire lo spreco di memoria in maniera opposta rispetto al

metodo best fit, cioè il programma viene caricato nella cella di memoria libera più grande di modo

che con molta probabilità, ne resterà inutilizzata tanta quanta ne basta per caricare nella parte rima-

nente, che viene spezzata, un altro processo.

Possiamo quindi annoverare worst fit e best fit tra i procedimenti volti a prevenire la frammentazio-

ne, limitandola, ma no n eliminandola. Vi sono, infatti, altri metodi che consentono l’eliminazione

degli spazi vuoti altrimenti inutilizzabili. Sono questi ultimi la rilocazione e la compattazione.

Nella COMPATTAZIONE tutti i blocchi occupati vengono spostati su partizioni contigue, in modo

da consentire la creazione di un unico grande blocco libero. Tuttavia la compattazione richiede mo l-

to tempo di CPU e questo non fa alto che rallentare gli altri processi.

Se l’operazione fosse compiuta, l’ordine ottenuto riporterebbe ad una posizione simile all’originale:

Blocco occupato P1

Blocco occupato P2

Blocco occupato P3

Blocco occupato P4

Blocco occupato P5

Blocco libero

38

Autori: Messina Francesco, Lento Maria Rita.

Tuttavia per gli svantaggi su accennati non si utilizza quasi mai ed al suo posto si cerca di “fondere”

i blocchi in modo che sia più probabile che un processo possa esservi allocato. Questa operazione è

resa possibile dalla RILOCAZIONE, che a sua volta si scinde in rilocazione statistica e dinami-

ca. La rilocazione dinamica è fatta dal sistema operativo in memoria virtuale in maniera del tutto

invisibile agli utenti. Vengono ottenuti dei sottogruppi del programma definiti BLOCCHI LOGICI,

questi verrano caricati in memoria in formato rilocabile, senza tradurre i blocchi logici in fisici. Non

è inoltre necessario che tutti i blocchi logici risiedano in memoria centrale, basta che risieda il pri-

mo, quello corrente, contenente le istruzioni da eseguire.

Il gestore della memoria controlla se il blocco logico richiesto è presente oppure no. Se è presente,

l’indirizzo logico viene trasformato in indirizzo fisico ed il processo si avvia.

Se il blocco non è presente viene bloccato il processo. Il gestore della memoria “chiama” il gestore

delle interruzioni, che cercherà il blocco in memoria di massa. Dopo averlo individuato, lo carica in

memoria centrale e a questo punto il processo è pronto. Passa cioè dallo stato di waiting a quello di

ready to run. Se il gestore delle interruzioni non trova spazio in memoria centrale, scaricherà in

memoria di massa uno o più blocchi logici, liberando spazio per il blocco richiesto.

SVANTAGGIO

Se le successive operazioni di caricamento e scaricamento dei blocchi sono troppo frequenti, si ha

uno spreco eccessivo di CPU e si rallentano i processi.

Si definisce LIVELLO DI MULTIPROGRAMMAZIONE il numero di programmi residenti in

memoria. Al crescere di tale numero diminuisce lo spazio disponibile per ogni singolo programma.

È possibile scegliere se:

- assegnare a tutti i programmi lo stesso numero di blocchi;

- stabilire un numero di blocchi diverso per ogni processo.

I blocchi possono:

- avere la stessa dimensione, in questo caso si parla di pagine;

- non avere le stesse dimensioni, in questo caso si parla di segmenti.

Occorre inoltre stabilire la politica di sostituzione, ossia come scegliere qua li blocchi scaricare su

memoria di massa per mancanza di spazio. Esistono diverse politiche di sostituzione, esse si basano

sul principio di località spaziale o di località temporale.

Località spaziale: dopo che una posizione di memoria è stata referenziata, è molto probabile che

siano referenziate locazioni di memoria fisicamente vicine. 39

Appunti di conoscenze informatiche di base.

Località temporale: è molto probabile che venga nuovamente referenziato nell’immediato futuro

lo stesso blocco.

Least recentely used (LRU): scarica il blocco usato meno di recente. Eseguita

un’istruzione “x”, vi e’ un’alta probabilità’ che l’istruzione da eseguire dopo sia quella

che e’ memorizzata di seguito ad “x”.

11.8

Il Sistema operativo e' un insieme di programmi che consentono:

- una visione astratta delle risorse da parte degli utenti, (macchina astratta);

- la facilita' d'uso del sistema d’elaborazione;

- una gestione corretta ed efficiente.

Soffermandoci sull'ultima frase possiamo evincere dalle parole "corretta" ed "efficiente"

che, le modalita' d'uso della risorsa sono programmate dal S.O. per essere porte all'ute n-

te nella maniera piu' corretta, mentre con efficienza indichiamo che le richieste d'uso del-

la risorsa sono esaudite nel minor tempo possibile.

Sul S.O. si appoggiano tutti gli altri componenti del Software di base come i Compilatori,

gli interpreti, l'editor di testo nonche' i programmi applicativi.

Volendo mostrare schematicamente questa subordinazione dei programmi al S.O. ab-

biamo:

es. di programmi applicativi:

? gestione bancaria

? videogiochi

? prenotazioni aeree ? compilatori ed interpreti

? interprete dei comandi

? editori

SISTEMA OPERATIVO

40

Autori: Messina Francesco, Lento Maria Rita. hardware

Quindi, il S.O. si appoggia sull'hardware, mentre i programmi applicativi e di sistema, si

appoggiano sul sistema operativo.

Ognuno di questi strati VIRTUALIZZA la risorsa gestita, in altre parole permette agli strati

soprastanti di credere d’essere gli unici fruitori della cpu e di tutti gli strumenti hardware,

e di non condividerli con altri programmi. La cpu "virtuale" è utilizzata da tutti i livelli che

le stanno sopra (es. programmi operativi, programmi per il software di base... ecc.). gli al-

tri livelli del sistema operativo realizzano ciascuno una virtualizzazione.

Potremmo definire questo processo come un insieme di scatole cinesi che vanno dalla

piu' piccola, il S.O., ai programmi applicativi che costituiscono la scatola piu' grande.

Ogni strato fornisce dei meccanismi logici d’accesso alle risorse del sistema operativo

gestite (comando Print, apertura e chiusura di un file su Windows). Tutto volto al piu' faci-

le utilizzo dei software per l'utente. Potremmo definire che questo sistema riesce anche a

mascherare i limiti dell'hardware, poiche' ad es. se il limite in questione e' la memoria, il

programma è caricato poco per volta e non appena una parte del programma è caricata

l'altra viene scaricata per lasciare spazio.

Inoltre il Sistema operativo e' in grado di rendersi indipendente dalla realizzazione fisica

dell'H.W. se ad esempio si desidera stampare su carta un documento presente in memo-

ria non si deve conoscere la composizione dell'H.W., ma basta lanciare l'apposito segna-

le di stampa.

11.9 Sistemi operativi REAL TIME e GENERAL PURPOSE.

Fra i sistemi operativi oggi in uso vi sono i cosiddetti sistemi REAL TIME.

Questi sistemi possiedono delle caratteristiche che li differenziano da quelli general pur-

pose. Le differenze derivano dalla gestione dei programmi in esecuzione, che nel caso dei

sistemi general purpose abbiamo visto utilizzare il time sharing, così da eliminare i tempi

morti della CPU alternando i processi e salvandone i contesti al momento opportuno. Nel

caso del real time invece lo scopo principale e’ che un determinato processo sia mandato

in esecuzione e abbia termine nel tempo richiesto. In questi sistemi i vincoli temporali sono

41

Appunti di conoscenze informatiche di base.

quindi estremamente critici per il sistema, specialmente se si tratta di un sistema hard real

time meno critici, ma sempre rilevanti se si tratta di sistemi soft real time.

Ad esempio sono processi hard real time tutti quelli che soprassiedono alla gestione ed

all’utilizzo degli armamenti oppure alle centrali nucleari, o in ogni caso in qualunque occa-

sione in cui la differenza di pochi attimi nel concludere un’operazione comporterebbe dei

gravissimi scompensi successivamente.

Sono utili dei processi soft real time, invece tutte quelle vo lte che è conveniente dare sin-

cronia all’oggetto della programmazione come ad esempio le trasmissioni televisive, dove

sincronizzare le parole dell’interlocutore con i movimenti delle labbra è necessario ad assi-

curare una visione gradevole del programma. Possiamo quindi sottolineare che un siste-

ma soft real time migliora la qualità di un prodotto, mentre i sistemi hard R.T. hanno

l’esigenza di prevenire una possibile catastrofe.

Ambedue i sistemi devono essere in grado di gestire i cambiamenti di contesto in maniera

molto veloce poiché il sovraccarico deve essere ridotto al minimo, non badare al throu-

ghput facendo si che i processi critici siano eseguiti entro tempi predeterminati; poiché

l’esecuzione degli altri processi è di minore importanza.

I vincoli temporali associati ai contesti dei processi real time sono definiti DEAD LINE.

Ripetiamo quindi che l’obiettivo non è la massimizzazione del throughput.

Capitolo 12: Alcune informazioni sul linguaggio pascal

Per questa sessione gli appunti sono particolarmente ristretti vista la possibilità di fare affidamento

sui libri di testo, quindi ci limitiamo ad alcuni cenni soprattutto per mettere in risalto alcuni aspetti

che a volte possono trarre in inganno oppure per avere un quadro di insieme di problemi già svolti.

Cominciamo con un programma che calcola la somma di dieci numeri inseribili da tastiera.

Program somma_10_numeri

Const n=10;

var num,conta,somma:integer;

begin

42

Autori: Messina Francesco, Lento Maria Rita.

writeln(‘questo programma calcola la somma di dieci numeri inseriti da tastiera’);

conta:=0;

somma:=0;

while conta<n do

begin

write (‘inserisci un numero ‘);

read(num);

somma = somma+num;

conta:=conta+1

end;

writeln(‘la somma vale ’,somma)

end.

Il seguente programma è in grado di calcolare il quadrato di una somma di due valori inseriti da ta-

stiera.

Program quadrato_somma;

var x,y,somma,quadrato:integer;

begin

write(‘inserisci il primo numero ’ );

read(x);

write(‘inserisci il secondo numero’);

read(y);

somma:= x + y;

quadrato:= somma * somma;

writeln(‘la somma vale ‘,somma);

writeln(‘il quadrato di’, somma,’vale ‘,quadrato)

end.

Questo programma stampa 10 numeri letti da tastiera. 43

Appunti di conoscenze informatiche di base.

Program stampa_10_numeri;

var x,i:integer;

begin

for i:=1 to 10 do

begin

writeln(‘inserisci il valore’);

read (x);

writeln(x);

end

end.

Questo programma stampa le lettere dell’alfabeto dalla Z alla A.

Program stampa_alfabeto;

var conta: char;

begin

conta := ‘z’ downto ‘a’ do

writeln(conta)

end.

Program esempio_case;

var scelta: integer;

begin

read (scelta);

case scelta of

1:writeln(‘il poligono e’’’’ un quadrato’);

2:writeln(‘il poligono è un cerchio’)

end

end. ?

Questo programma calcola il fattoriale di un numero intero positivo 7.

44

Autori: Messina Francesco, Lento Maria Rita.

Program fattoriale;

const max=7;

var n,k,fattoriale:integer;

begin ?

writeln(‘introduci un intero a ‘, max);

readln(n);

if (n<0) or (n>max)) then

writeln(‘ il dato introdotto non è valido’)

else

begin

fattoriale:=1;

for k:=1 to n do fattoriale:= fattoriale*k;

writeln(‘il fattoriale di ‘,n,’vale’,fattoriale)

end

end.

Da questi programmi possiamo trarre delle conclusioni:

- un programma deve iniziare sempre con program seguito dal nome del programma;

- alla fine di ogni informazione deve essere posto il “ ; “;

- prima dell’inizio della parte descrittiva va conclusa la parte dichiarativa dove vengono nominate

le costanti e le variabili;

- mai mettere il punto e virgola prima di un END;

- se si vuole permettere l’esecuzione di un’istruzione composta la si deve racchiudere entro “b e-

gin – end”.

Notare inoltre come a volte write sia seguito da ln (line), serve a scrivere su righe distinte, così co-

me read se seguito da ln permettere la lettura da tastiera su una riga distinta.

In oltre va osservato come negli esempi appaiono frasi come: writeln(‘inserisci il primo numero’);

tutto ciò che sta tra le due virgolette viene vista dal calcolatore come una serie di caratteri alfanume-

rici, anche detta stringa.

12.2 La struttura if then else 45

Appunti di conoscenze informatiche di base.

Questa struttura condizionale, letteralmente: se allora altrimenti, permette di determinare se sceglie-

re un percorso all’interno del programma oppure no e quindi di seguire una delle due possibili vie.

Può rivelarsi molto utile, ma conviene stare attenti a non strafare poiché dare

un’insieme di if uno dentro l’altro in gergo annidare gli if, può provocare una scarsa

leggibilità del programma nonché un rallentamento dell’esecuzione. Essendovi infatti

molte condizioni da valutare il sistema perde efficienza, ultimo non per importanza,

gli if annidati rendono difficile il debugging, che è quell’operazione mediante la qua-

le vengono rimossi gli errori.

Il programma in questione usa gli if annidati:

program annido_if

var n,x,h,z: integer;

const f: integer ;

begin

write(leggi tre numeri da tastiera);

read(x);

read(h);

read(z);

n:=0

n:=x*h*z;

begin

if n>100 then

if n<150 then writeln (‘sono un numero compreso tra 100 e 150’);

else writeln(‘sono un numero esterno all’intervallo 100 – 150’);

else writeln(‘sono un numero esterno all’intervallo 100 – 150’)

end.

In alcuni casi è possibile evitare gli if ricorrendo all’istruzione CASE, con questa istruzione viene

creato un menù di scelta e si evitano i complicati passaggi logici degli if. Attenzione che non sem-

46

Autori: Messina Francesco, Lento Maria Rita.

pre si può ovviare agli if con il case a volte è necessario utilizzare gli if, quindi è un problema che

solo il contesto del programma può chiarire.

Es. dell’istruzione case

Case espressione of

Prima etichetta del case: istruzione 1

Seconda etichetta del case: istruzione 2

terza etichetta del case: istruzione 3

quarta etichetta del case: istruzione 4

quinta etichetta del case: istruzione 5

.

.

.

n-esima istruzione del case: istruzione n

end;

ATTENZIONE l’end è associato al case e non al begin, rappresenta quindi un caso particolare.

Case scelta1 of

1: poligono := quadrato;

2: poligono := cerchio;

3: poligono := rettangolo

end;

12.3 OPERAZIONI SU COMPONENTI DEL VETTORE

Finalità di questo programma è di leggere n numeri interi da tastiera e di memorizzarli in un vettore.

Program esempio_vettore;

const n= 10;

type vettore = array [1…n] of integer;

var v: vettore;

i: integer 47

Appunti di conoscenze informatiche di base.

begin

for i:=1 to n do

begin

writeln(‘digita un numero ’)

read (v[i])

end;

for i:=1 to n do

writeln(v[i])

end.

Quando si eseguono operazioni utilizzando i vettori è consigliabile utilizzare il ciclo for per iterare

un’operazione più volte. Il motivo è il seguente il vettore deve avere una dimensione prestabilita, e

si accorda perfettamente con il ciclo for in cui il numero d’iterazioni deve essere stabilito a priori.

Questo programma legge due vettori da tastiera e calcola il vettore somma.

Program somma_vettori

Uses crt

Const n= 5;

type vettore = array [1…n] of integer;

var v,y: vettore;

i:integer;

begin

clrscr;:

writeln(‘scrivi elemento ‘,i,’del primo vettore’);

read (y[i])

end;

writeln(‘il vettore somma vale ’);

for i:= 1 to n do

writeln(v[i] + y[i])

end.

48

Autori: Messina Francesco, Lento Maria Rita.

In pascal il programmatore può definire dei tipi di dati “personalizzati”. Esempio: colori,giorni

della settimana; questo si realizza attraverso un tipo primitivo del pascal il tipo enumerato, che si

indica nel seguente modo:

type identificatore_del_tipo =(identificatore valore1, identificatore valore2 … identificatore valore

n);

esempio dichiarazioni di tipi enumerati

type colore =(rosso,verde,blu);

type giorno=(lunedì, martedì, mercoledì, giovedì, venerdì, sabato, domenica);

var color: colore;

dies: giorno;

Se type colore=(rosso,verde,blu);

- è sbagliato dichiarare una variabile var rosso: colore;

- è sbagliato dichiarare un tipo type semaforo = (rosso, giallo, verde), poiché rosso e verde sono

presenti in due tipi differenti e generano quindi ambiguità.

La lista degli identificatori costituisce un insieme ordinato dove il primo valore è < del secondo,

questo è < del terzo, e così via.

Quindi ha senzo un’istruzione el tipo:

if color < verde then istruzione

oppure

for dies:= lunedì to domenica do istruzione.

Non ha senso invece l’istuzione if color>mercoledì perché di tipo differente. 49


PAGINE

56

PESO

143.92 KB

AUTORE

Exxodus

PUBBLICATO

+1 anno fa


DETTAGLI
Esame: Informatica
Corso di laurea: Corso di laurea in informatica
SSD:
A.A.: 2012-2013

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Exxodus di informazioni apprese con la frequenza delle lezioni di Informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università La Sapienza - Uniroma1 o del prof Scienze matematiche Prof.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Informatica

Fondamenti di informatica 1 - Esercizi
Esercitazione
Informatica di base - Appunti
Appunto
Informatica - Appunti
Appunto
Informatica - struttura degli elaboratori - Appunti
Appunto