L’idea di costruire una macchina che eseguisse ... · alta e generalmente sono caratterizzati da...

27
Università degli Studi Mediterranea di Reggio Calabria Facoltà di Giurisprudenza Corso di laura in Scienze Economiche ------------------ Elementi d’informatica di base Ing. Giuseppe M.L. Sarnè v.e. 3.0 - Ottobre 2009

Transcript of L’idea di costruire una macchina che eseguisse ... · alta e generalmente sono caratterizzati da...

Università degli Studi Mediterranea di Reggio Calabria

Facoltà di Giurisprudenza Corso di laura in Scienze Economiche

------------------

Elementi d’informatica di base

Ing. Giuseppe M.L. Sarnè

v.e. 3.0 - Ottobre 2009

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

2

Premessa Per la complessità della materia trattata e per le necessarie semplificazioni introdotte, questa nota è da intendersi unicamente quale supporto alle lezioni svolte sull’argomento, senza avere la pretesa di surrogarle. Chi fosse interessato ad approfondire gli argomenti trattati, potrà far riferimento ai testi consigliati in bibliografia.

L’autore

N.B. Gli studenti debbono fare riferimento unicamente all’ultima versione disponibile sul sito www.ing.unirc.it

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

3

Indice 1. Introduzione .............................................................................................................................. 4 2. Tassonomia degli Elaboratori Elettronici ................................................................................. 4 3. Rappresentazione Binaria ......................................................................................................... 5 4. Hardware e Software ................................................................................................................. 5 5. Schema di Von Neumann ......................................................................................................... 7 6. L’organizzazione dei sistemi di elaborazione ........................................................................... 7 7. Bus ............................................................................................................................................ 9 8. La memoria .............................................................................................................................. 9 9. Memorie secondarie .................................................................................................................. 11 10. I terminali ................................................................................................................................ 12 11. Reti di computer ...................................................................................................................... 13 12. Protocolli e livelli .................................................................................................................... 14 13. Trasmissione del segnale ........................................................................................................ 16 14. Mezzi trasmessivi .................................................................................................................... 16 15. Sistema telefonico ................................................................................................................... 17 16. Collegamento a Internet .......................................................................................................... 17 17. Il Sistema Operativo................................................................................................................ 17 18. Struttura dei S.O. ..................................................................................................................... 18 19. I processi ................................................................................................................................. 18 20. Lo scheduling dei processi ...................................................................................................... 20 21. Gestione della memoria .......................................................................................................... 21 22. Memoria virtuale ..................................................................................................................... 22 23. La segmentazione .................................................................................................................... 24 24. I File System ........................................................................................................................... 25 Bibliografia ................................................................................................................................... 27

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

4

1. Introduzione L’idea di costruire una macchina che eseguisse automaticamente dei calcoli matematici, sollevando l’uomo da quest’incombenza, non è un’idea recente.

Tra le prime macchine “calcolatrici” degne di nota la più significativa è indubbiamente quella realizzata da Blaise Pascal (1642), questa macchina era in grado di eseguire unicamente le operazioni di somma e sottrazione. Successivamente, si possono ricordare la macchina per effettuare le quattro operazioni di Von Leibniz (1646-1716), la macchina analitica di Babbage (1792-1871), ma la storia dell’informatica ne conta molte altre ancora. Comunque, tutte queste macchine calcolatrici erano esclusivamente meccaniche e ovviamente possedevano limitate capacità computazionali.

Differentemente da queste macchine, l’informatica moderna, come oggi la si conosce, è resa possibile dall’avvento e dallo sviluppo dell’elettronica e dalla possibilità che questa offre di implementare efficacemente ed efficientemente la logica binaria. Da sottolineare che la struttura logica del calcolatore “moderno” è stata ipotizzata ben prima della nascita del primo componente elettronico. 2. Tassonomia degli Elaboratori Elettronici Supercalcolatori Elaboratori in grado di eseguire grandi quantità di calcoli scientifici in breve

tempo. Possiedono architetture specifiche, spesso ottimizzate in funzione dei problemi da risolvere. Impegnano molte risorse economiche, sia per l’acquisto che per la gestione. Applicazioni: militari, meteorologiche, etc.

Mainframe Sistemi specializzati nel trattare grosse quantità di dati ed offrire i propri

servizi ad una moltitudine di terminali “stupidi”, spazialmente anche molto distanti. Questa categoria di elaboratori è molto costosa (ma meno dei supercalcolatori), sia in termini di acquisto che di gestione. Applicazioni: sistemi bancari, sistemi di prenotazione aerea, grandi aziende, etc.

Minicalcolatori Strutturalmente simili ai precedenti, ma più piccoli, svolgono funzioni

analoghe a livello di piccole strutture con carichi di lavoro inferiori. I costi d’acquisto e gestione sono proporzionalmente minori rispetto ai mainframe. Applicazioni: dipartimenti universitari, piccole aziende, etc.

Workstation Elaboratori specializzati in applicazioni tecniche. Mantengono ancora un

piccolo vantaggio, in termini di prestazioni, sui personal computer di fascia alta e generalmente sono caratterizzati da una costruzione più professionale. Hanno costi superiori alla fascia alta dei personal computer. Applicazioni: grafica, calcoli scientifici, etc.

Personal computer Elaboratori, nati per realizzare il paradigma di un sistema di calcolo su ogni

scrivania, hanno raggiunto potenze di calcolo considerevoli, tanto che a livello di prestazioni i migliori personal computer sono sovrapposti alla fascia bassa delle workstation. I costi del sistema e quelli di gestione sono bassi. Applicazioni: general purpose.

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

5

Network computer Sistemi diskless poco potenti, si appoggiano alla rete per ottenere le risorse di cui sono privi. Sono la versione moderna dei terminali “stupidi”, delegano ad un mainframe remoto tutte le capacità di archiviazione e di elaborazione.

Notebook computer Sistemi portatili che possono anche rimpiazzare completamente i personal

computer e possono essere dotati di display anche molto grandi. Possiedono una sorgente di alimentazione autonoma.

Netbook computer Sono l’equivalente versione portatile dei Network computer, sono molto

piccoli e molto leggeri, nascono per accedere a vari servizi sfruttando la connettività wireless, hanno prestazioni computazionali ridotte rispetto ai notebook, ridotte capacità di archiviazione e piccoli display e ovviamente sono anch’essi dotati di una sorgente di alimentazione autonoma.

3. Rappresentazione Binaria Un alfabeto composto solo da due simboli è detto “binario” ed è un alfabeto completo in quanto per suo tramite è possibile rappresentare qualsiasi tipo d’informazione unicamente mediante sequenze finite dei soli due simboli (rappresentazione binaria) senza necessità di ulteriori informazioni di supporto. Chiamiamo bit (BIT da BInary digiT) il generico carattere di una rappresentazione binaria, che può assumere solo uno dei due valori dell’alfabeto binario, e pertanto consente di rappresentare in maniera non ambigua due sole informazioni. Indichiamo convenzionalmente i valori che può assumere un bit con le cifre 0 e 1. All’interno del computer ogni informazione è rappresentata come una idonea sequenza di bit.

I gruppi di 8 bit prendono il nome di byte e rappresentano l’unità di misura di base dell’informatica, con cui per esempio si misura la capacità di memorizzazione dei supporti, la capacità di trasferimento dei bus (vedi par. 7), la lunghezza della parola caratteristica dei microprocessori, etc.

Si tenga presente che il passaggio da un alfabeto completo ad un altro modifica esclusivamente la rappresentazione dell’informazione, ma non influisce sulla capacità di rappresentare tale informazione o tanto meno sul contenuto.

Quanto detto vale anche per l’aritmetica dove la nostra usuale base 10, data dall’utilizzo di 10 cifre (dallo 0 al 9), può essere sostituita da altre basi e in particolare per quanto ci riguarda da quella in base 2. Ad esempio, il numero 9 può essere rappresentato in varie basi come: 910, 10012, 214, 118, 916, ma indica sempre 9 unità.

Esempio:

rappresentazione in base 10: 1966=1*103+9*102+6*101+6*100=1000+900+60+6=1966

conversione da base 2 a base 10: 10111=1*24+0*23+1*22+1*21+1*20=16+0+4+2+1=23

conversione da base 10 a base 2: 23/2→11/2→5/2→2/2→1/2

1 1 1 0 1 → 10111 La rappresentazione binaria dell’informazione è adatta per essere efficacemente utilizzata dai componenti elettronici (nelle centrali telefoniche dell’era pre-elettronica, la logica binaria era sfruttata per mezzo dei relè, ossia per mezzo di componenti elettromeccanici), poiché si fanno corrispondere i due valori convenzionali 0 e 1 ai due stati di presenza o assenza di corrente elettrica su una determinata linea elettrica o componente elettrico.

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

6

Tb Gb Mb Kb byte bit

1 Tb 1 1024 1.048.576 1.073.741.824 1.099.511.627.776 8.796.093.022.208 1 Gb --- 1 1024 1.048.576 1.073.741.824 8.589.934.592 1 Mb --- --- 1 1024 1.048.576 8.388.608 1 Kb --- --- --- 1 1024 8192

1 byte --- --- --- --- 1 8 1 bit --- --- --- --- --- 1

4. Hardware e Software L’hardware è costituito dai circuiti elettronici, la memoria, i dispositivi di input ed output, etc., mentre il software è costituito dagli algoritmi e dalla loro rappresentazione in forma utilizzabile dal computer. Esiste anche il firmware che è una via di mezzo tra software ed hardware, poiché implementa del software in hardware (built-in), ma unicamente per motivi di efficienza (i.e., velocità di esecuzione). Hardware e software sono logicamente equivalenti. Chi programma usa le istruzione software come se fossero realizzate in hardware.

L’elaboratore a livello fisico differisce da quello che “conosciamo” e a cui chiediamo di effettuare determinate operazioni tramite appositi comandi. Potremmo asserire che quest’ultimo è una macchina virtuale che realmente non esiste. Infatti, ciò che realmente esiste è un insieme di componenti elettronici che effettuano o non effettuano determinate operazioni in relazione alla presenza o meno di corrente che li attraversi in un determinato istante.

Questa macchina è detta macchina di livello 0 o della “logica digitale” ed è capace di eseguire un certo insieme di istruzioni dette microprogramma. Un’istruzione a questo livello è una sequenza di bit, in cui ogni bit ha un determinato significato (ricordando che al valore 1 in genere corrisponde la presenza di una tensione positiva di ≈ 3÷5 Volt e al valore 0 una tensione di 0 Volt) che è interpretato elettricamente. L’insieme di istruzioni a questo livello di base tende ad essere il più semplice possibile per consentire di avere l’hardware più semplice possibile.

A livello di microprogramma l’insieme delle istruzioni, ossia il linguaggio disponibile, presenta tra le varie macchine esistenti più similitudini che differenze (il numero di istruzioni mediamente varia tra le 40 e le100 istruzioni al massimo).

La programmazione a questo livello è molto complicata e difficile. Per semplificarla è conveniente pensare ad una o più macchine dotate di linguaggi meno difficili e collegate in cascata dalla più semplice fino alla più complessa (livello della logica digitale). Le istruzioni espresse in questi linguaggi vengono interpretate o tradotte nel linguaggio della macchina di livello inferiore.

L’interpretazione si ha quando la “traduzione” da un livello all’altro viene effettuata al momento dell’esecuzione, se invece viene effettuata in un istante precedente si ha la “compilazione” che è svolta da programmi chiamati compilatori.

Per agevolare gli utenti si è costruita una gerarchia di macchine virtuali e di relativi linguaggi la cui struttura assicura che un programma scritto per la macchina Mn sarà eseguito dalla macchina M0. Livello 5 livello del linguaggio orientato ai problemi. Traduzione (compilatore). Livello 4 livello del linguaggio assembler. Traduzione (assemblatore). Livello 3 livello del sistema operativo. Interpretazione parziale (sistema operativo).

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

7

Livello 2 livello della macchina standard. Interpretazione microprogramma. Livello 1 livello della microprogrammazione. Esecuzione diretta dei microprogrammi da parte dell’hardware. Livello 0 livello della logica digitale. 5. Schema di Von Neumann

6. L’organizzazione dei sistemi di elaborazione All’interno del microprocessore (o CPU) è contenuta l’ALU (Arithmetic Logic Unit) che esegue operazioni di tipo aritmetico-logico quali somme, confronti, etc.. La CPU contiene anche una certa quantità di memoria veloce (registri) per immagazzinare i risultati temporanei e le informazioni di controllo. Tra i registri più importanti vi sono: il contatore di programma Program Counter (PC), che indica la prossima istruzione da eseguire; il registro delle istruzioni (IR), che contiene via via le istruzioni da eseguire; il registro di stato (PS), che descrive lo stato corrente dell’esecuzione e segnala eventuali errori; il registro di indirizzo di memoria (RIM), che contiene l’indirizzo della cella di memoria da cui leggere o in cui scrivere un’informazione; il registro dati di memoria (RDM), che contiene l’informazione letta o quella da scrivere in una determinata cella di memoria.

La CPU ha il compito di eseguire una alla volta le istruzioni, che preleva dalla memoria principale. La sequenza delle operazioni che la CPU effettua è governata dall’unità di controllo (UC) che ripete ciclicamente la sequenza di esecuzione sotto riportata ad una velocità compresa tra quella della CPU e quella del bus, comunque dell’ordine di centinaia di milioni di volte al secondo.

La sequenza di esecuzione di una CPU prende il nome di preleva-decodifica-esegui: 1. Legge la nuova istruzione ponendola nel registro IR 2. Cambia il registro PC affinché punti all’istruzione seguente 3. Determina il tipo di istruzione prelevata 4. Se usa i dati in memoria determina dove sono situati 5. Prende i dati nei registri interni della CPU 6. Esegue l’istruzione 7. Memorizza il risultato al posto giusto 8. Ritorna al passo 1 e prende una nuova istruzione.

Memoria

Unità di controllo

Input Output

ALU ACCUM.

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

8

Lo schema classico di una CPU può essere in prima approssimazione rappresentato come in figura.

Si dice che un elaboratore è dotato di una pipeline di elaborazione, quando è in grado di operare su più istruzioni contemporaneamente. In breve, se si ritorna alla sequenza di esecuzione di una CPU, si può notare che la CPU esegue effettivamente l’istruzione solo al passo 6, per tutto il resto del tempo è in attesa che vengano svolti gli altri necessari passi. Se si dota l’elaboratore di una struttura a più livelli, chiamata pipeline, in cui ogni livello opera su di un’istruzione diversa si può immaginare che mentre la CPU stia eseguendo un’istruzione, contemporaneamente il livello della pipeline più vicino alla CPU prelevi già i dati nei registri interni della CPU relativi all’istruzione successiva a quella corrente, il livello precedente nello stesso istante preleverà i dati in memoria relativamente all’istruzione ancora successiva e così via. Il tutto opera come una catena di montaggio in maniera che la CPU abbia sempre un’istruzione già pronta da eseguire per non rimanere altrimenti inoperosa per la maggior parte del ciclo, si eliminano così i tempi morti nel suo utilizzo.

Gli elaboratori si possono dividere in tre categorie: 1. SISD Flusso di istruzioni unico. Flusso di dati unico 2. SIMD Flusso di istruzioni unico. Flusso di dati multiplo (array processor o comp. vettoriali) 3. MIMD Flusso di istruzioni multiplo. Flusso di dati multiplo (la memoria è il collo di bottiglia)

Combinando la tipologia dei flussi dati (singoloi, multipli) con quella delle istruzioni (singole, multiple) si genera anche la categoria MSMD (flusso di istruzioni unico, flusso di dati multiplo) che però è solo teorica. Infatti, non si conosce ne si pensa che possa avere una qualche utilità un simile elaboratore.

A B

ALU

F(A,B)

Registri di memoria

Registri di input dell’ALU

Esegue un set di operazioni semplici

Registri di output dell’ALU

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

9

7. Bus Il bus in un elaboratore non è altro che un canale di comunicazione tra i vari componenti/dispositivi (CPU, memoria, dispositivi di Input/Output, etc.). Si può immaginare il bus come un fascio di fili elettrici che collega tutti i dispositivi.

Nei personal computer è presente un solo bus e tutti i componenti/dispositivi sono in concorrenza tra loro per usarlo, ovviamente l’uso è esclusivo e finché un componente/dispositivo usa il bus ne preclude l’uso a tutti gli altri componenti/dispositivi. Nei mainframe, per questioni di efficienza, sono presenti più bus specializzati; in genere i bus nei mainframe sono tre: uno per l’accesso diretto alla memoria da parte della CPU; uno per l’accesso diretto da parte dei dispositivi di Input/Output e uno di collegamento tra tutti i dispositivi.

Ogni dispositivo è costituito da due parti: una che contiene l’elettronica di controllo (controllore) ed una che è il dispositivo vero e proprio. Il compito del controllore è “controllare” il suo dispositivo e consentire l’accesso al canale di I/O. Un controllore che legge/scrive in memoria attraverso il bus senza l’intervento della CPU, si dice che esegue un accesso diretto alla memoria (DMA). In caso di accessi contemporanei di più dispositivi, vi sono arbitri del bus o meccanismi basati su una priorità assegnata ai vari dispositivi.

Generalmente i dispositivi hanno la priorità sulla CPU, si dice in tal caso che si ha un furto di cicli ai danni della CPU (per chiarire tale logica di funzionamento, si pensi ai dati richiesti ad un disco rigido che potranno essere disponibili per la lettura solo quando questi si presentano sotto la relativa testina di lettura del disco rigido; se l’elaboratore è dotato di un solo bus e in quel momento questi è usato dalla CPU, non essendoci in genere la possibilità di attendere che la CPU finisca ciò in cui è impegnata, si obbliga la CPU a sospendere temporaneamente la sua attività, affinché si possa lasciare l’uso del bus al dispositivo per trasferire i dati richiesti in memoria).

Il bus risiede sulla piastra madre; se la piastra madre non ha componenti attivi, come nei personal computer basati su processori Intel compatibili, ma supporta solo il bus e della componentistica minore, come nei personal computer basati su processori Motorola (Apple), la scheda madre prende il nome di backplane.

Esistono più tipi di bus ed ognuno ha un proprio standard di comunicazione e funzionamento. Usualmente ogni standard è più o meno legato ad una particolare famiglia di processori. 8. La memoria L’elemento base della memoria è il bit (che come detto può rappresentare solo due diverse informazioni, convenzionalmente contraddistinte dai valori 0 e 1), essendo tale scelta coerente con la capacità dell’elettronica di distinguere efficacemente, cioè non ambiguamente, due stati (corrente e assenza di corrente).

La memoria è costituita da un insieme di celle, ognuna capace di immagazzinare un elemento di informazione espresso in forma di byte. Come già detto, un byte è formato da 8 bit. La cella di memoria è anche l’unità di memoria indirizzabile più piccola. Ogni elaboratore ha la sua parola caratteristica (word) che è rappresentata dal numero di byte che possono essere letti/scritti/usati dalla CPU con un unico accesso alla memoria (p.es., 8,16,32,64 byte); in genere più grande è la parola e più potente sarà la capacità di elaborazione della macchina.

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

10

Il numero della cella di memoria costituisce il suo indirizzo e viceversa. Le celle sono numerate in sequenza e per accedere al contenuto di una cella di memoria è necessario specificare il suo indirizzo. E’ comunque possibile indirizzare ogni cella direttamente (Random Access Memory – RAM) senza differenze di tempo di accesso tra le differenti locazioni di memoria.

Ogni elaboratore ha un proprio spazio di indirizzamento caratteristico, ossia l’intervallo in cui è possibile specificare un indirizzo.

All’interno della parola i bit possono essere ordinati numerandoli da sinistra verso destra (p.es. 0123), detto anche a finale grande, o viceversa (p.es. 3210), detto anche a finale piccolo (i termini finale grande e finale piccolo sono ispirati al libro “I viaggi di Gulliver”).

Una prima distinzione tra le memorie si ha tra memoria principale e memoria secondaria. La prima è volatile, ossia quando si spegne l’elaboratore il contenuto si perde; la seconda è permanente. La memoria principale è più costosa e più veloce, la seconda è meno costosa, ma più lenta.

In linea teorica maggiore è la quantità di memoria principale (veloce), migliori saranno le prestazioni dell’elaboratore, poiché accederà un numero minore di volte alla memoria secondaria, che è più lenta, per richiedere informazioni.

Per migliorare ulteriormente le prestazioni computazionali si affianca un’ulteriore piccola e velocissima memoria, detta cache, dove memorizzare i dati di più recente accesso; la cache è spesso organizzata in due livelli detti L1 e L2, la prima è generalmente inglobata sulla stessa basetta di silicio della CPU e perciò lavora alla stessa velocità della CPU, la seconda è posta in genere sulla piastra madre e perciò funziona alla velocità del bus (ma esistono anche implementazioni di questa cache inglobate nella CPU). La prima non si può ampliare, la seconda spesso si può ampliare, ma a patto che sia installata sulla piastra madre. Comunque si fa presente che più la memoria è veloce e più costa.

La cache non rallenta l’esecuzione solo a condizione che l’informazione da prelevare sia già presente nella cache. Se cosi non fosse, per prelevare l’informazione dalla cache la CPU dovrebbe aspettare che la stessa vi venga trasferita dalla memoria principale, mentre nell’ipotesi di assenza della memoria cache, la CPU potrebbe prelevare l’informazione direttamente dalla memoria principale. Perciò, per mantenere l’efficienza del sistema deve risultare che il più delle volte l’informazione sia già presente nella memoria cache, altrimenti questa rappresenterebbe solo uno strato intermedio sostanzialmente dannoso. Per fortuna, se durante l’esecuzione di un programma si osservasse la sequenza degli accessi in memoria, si costaterebbe che la maggior parte delle volte ad ogni accesso in memoria è richiesto un indirizzo situato a “poca distanza” da quello precedentemente richiesto. Pertanto, statisticamente parlando, risulta che se un’informazione è stata trovata nella memoria cache, vi è un alta probabilità che la successiva informazione richiesta sia “vicina” e quindi già presente nella cache. Quando ciò non si verifica bisogna scaricare una porzione della memoria cache e caricarne una equivalente dal disco rigido (o da similare supporto) che contenga il dato richiesto, in questo caso si ha ovviamente una penalizzazione in termini di tempo (vedi anche paginazione).

La memoria principale è del tipo RAM (Random Access Memory), ossia è possibile accedere (indirizzare) ogni locazione di memoria; infatti, quando si richiede la lettura/scrittura di una particolare locazione di memoria si asserisce (richiede) l’operazione di lettura/scrittura, si pone sul bus indirizzi la locazione della cella di memoria interessata e la memoria, dopo un tempo sufficiente (uguale per tutte le celle della memoria RAM), risponde ponendo sul bus dati l’informazione contenuta in quell’indirizzo o prelevando dal bus dati l’informazione da scrivere in quell’indirizzo.

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

11

Un altro tipo di memoria presente negli elaboratori è quella ROM (Read Only Memoria) o memoria a sola lettura. Una volta questa memoria era usata all’avvio per fornire le istruzioni di inizializzazione alla CPU, ciò poiché all’avvio la memoria principale è vuota. In particolare, questa ROM è detta BIOS (Basic Input/Output System) ed ha il compito di identificare il processore installato, la quantità e il funzionamento della memoria Ram, individuare le periferiche, leggere la traccia zero del disco fisso dov’è l’indirizzo, sempre sul disco fisso, dell’inizio del Sistema Operativo, etc.. Attualmente si usano memorie riscrivibili tipo “flash” che a differenza delle memorie RAM mantengono l’informazione anche in assenza di alimentazione. 9. Memorie secondarie Nastri magnetici L’unità di misura è il frame (8 bit + 1 di ridondanza), la densità è di 1600

frame per pollice, i frame sono raggruppati in record la cui lunghezza può variare con il sistema e dopo ogni record vi è uno spazio vuoto chiamato GAP (serve al sistema per ricalibrarsi a causa delle tolleranze dovute alla meccanica di trascinamento ed al supporto plastico del nastro magnetico). L’accesso ai dati è sequenziale.

Floppy disk Sono sistemi di memorizzazione rimovibili, caratterizzati da basso costo, bassa capacità e basse prestazioni. Differentemente dai dischi fissi non sono sempre in movimento e perciò ogni richiesta di lettura, prima di essere soddisfatta, deve aspettare che il motore del floppy raggiunga la velocità di regime, che è molto più bassa di quella dei dischi fissi e la testina, che come nel caso dei nastri magnetici, è a contatto diretto con la superficie magnetica. Lo strato di ossidi metallici è disposto su di un supporto flessibile. La suddivisione in settori, tracce e cilindri è analoga a quella dei dischi fissi, analoga è anche la modalità di posizionamento.

Pen-drive E’ la versione moderna dei floppy disk ed è realizzata utilizzando memorie di “flash” che sono caratterizzate dalla persistenza dell’informazione memorizzata indipendentemente dall’alimentazione. Si noti però che l’alimentazione è necessaria per tutte le operazioni di lettura/scrittura. Le memorie flash hanno costi che diminuiscono con il tempo consentendo di migliorare il rapporto prezzo/prestazioni.

Dischi fissi Attualmente esistono due tipologie di dischi fissi: magneto-meccanico e allo stato solido. Il primo è costituito da uno o più piattelli metallici, sulle cui facce cui viene applicato per sublimazione uno strato di ossidi magnetici. Per ogni faccia vi è una o più testine magnetiche che leggono le informazioni. Tutte le testine magnetiche sono solidali ad un unico braccio (arm). La velocità di rotazione va dai 4500 giri/minuto (a basso consumo per laptop) in su ed è per tale motivo che le testine non toccano la superficie, come nei nastri magnetici o nei floppy disk, ma galleggiano sfruttando un effetto aerodinamico provocato dall’alta velocità di rotazione dei piattelli. Le tracce di un disco fisso sono concentriche e sono divise in settori, ogni disco ha lo stesso numero di tracce, le tracce omologhe sui piattelli formano i cosiddetti cilindri. Ogni settore è formato da più blocchi e le operazioni di lettura e scrittura avvengono solo per blocchi. Quando si richiede un’informazione, l’elettronica (controller) individua la traccia e il settore in cui è depositata l’informazione, dopodiché il braccio con la testina si sposta sulla traccia in

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

12

questione (tempo di spostamento) e aspetta che il settore che contiene l’informazione cercata passi sotto la testina (tempo di latenza, che dipende dalla velocità di rotazione e dal posizionamento della traccia). Alcuni dischi rigidi per ottimizzare le prestazioni dispongono di una memoria temporanea dove immagazzinare velocemente le informazioni. Tutte le informazioni sulla dislocazione dei dati sono contenute nella FAT (File Allocation Table) L’accesso ai dati è casuale. I dischi rigidi allo stato solido sono equivalenti alle pen-drive, ma ovviamente hanno capacità molto più elevate, sono di conseguenza più costosi, ma enormemente più veloci dell’altra tipologia di dischi fissi ed è prevedibile che quanto prima li soppianti.

CD/DVD Sistemi di memorizzazione ottica, CD (780 MB), DVD (4,7 GB), DVD HD (32 GB) o Blue Ray (47 GB), possono essere, a secondo del tipo, WORM (Write One Read Many) ossia scrivibili un'unica volta, oppure riscrivibili un determinato numero di volte. Le informazioni sono scritte attraverso pozzi (pit) e territori (land), ossia attraverso delle incisioni che si fanno corrispondere a 0 o a 1, e che la testina di lettura riconosce per la diversa modalità di riflessione della luce che un diodo laser accoppiato alla testina di lettura emette. In realtà non si incidono singoli 1 o 0, ma si incidono tratti con informazioni omogenee, ossia sequenze di bit 1 o 0. A titolo di esempio, un CD ROM standard ha 533 MB formati da oltre 270.000 blocchi da 2 KB costituiti ognuno da 98 frame. Viene usato un codice a correzione di errore Reed-Solomon. La modalità di accesso è casuale. Il DVD si differenzia dal CD principalmente per la maggiore capacità avendo i cilindri più vicini e la lunghezza d’incisione del bit più piccola, ciò permette di avere una densità di informazione maggiore, che a seconda dei vari standard, consente capacità da 4.7 GB a 17 GB. A loro volta il DVD HD e il Blue Ray si differenziano dal DVD per le stesse ragioni, ma il Blue Ray usa anche una diversa e più piccola lunghezza d’onda (a luce blu) per aumentare ulteriormente la propria capacità, ciò rende incompatibile questo formato con i suoi predecessori.

10. I terminali Monitor I monitor più diffusi sono ancora di tipo CRT (Cathode Ray Tube), ma solo

grazie all’installato pregresso, ma ormai sono praticamente usciti fuori produzione essendo ormai questa orientata verso i monitor LCD (Liquid Cristal Display). Comunque, i monitor CRT possono funzionare a mappa di caratteri o a mappa di bit. Il funzionamento a mappa di caratteri, ormai obsoleto, comporta la memorizzazione di ogni carattere in una matrice (maschera) di 13 x 8 pixel (picture element), se richiesta la stampa a video di un carattere, la maschera veniva recuperata e inviata al tubo catodico. Nella seconda è più moderna modalità di funzionamento (sostanzialmente analoga a quella impiegata per gli LCD), l’elettronica del monitor ha la possibilità di indirizzare ogni singolo pixel. Il colore è gestito da matrici multiple di bit (chiamate anche piani di bit) e con n piani di bit si gestiscono 2n colori. I terminali a mappe di bit possono supportare finestre multipli intercambiabili. I monitor LCD (Liquid Cristal Display), come detto, operano a mappe di bit e basandosi su un diverso principio fisico, hanno il vantaggio di non emettere pressoché alcuna radiazione dannosa per l’uomo.

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

13

Tastiera La tastiera è il terminale di input più comune ed è in genere formata da almeno 102 tasti. Premendo un tasto viene inviata alla scheda madre una particolare sequenza di bit.

Mouse Esistono tre tipi di mouse (meccanico, ottico e opto-meccanico), che inviano ogni pochi millisecondi le informazioni relative allo spostamento lungo gli assi X e Y e lo stato dei pulsanti.

Porte La connessione di terminali e calcolatori differenti avviene attraverso le porte (RS 232 C (25/9 pin), USB, DVI, HDMI, firewire, PCMCIA, ecc.). Ad esempio, a monte (a valle) di una vecchia porta RC 232 C vi è un chip chiamato UART (Universal Asynchronous Receveir Trasmitter) che riceve un carattere intero e lo trasmette bit a bit e viceversa. Comunque queste porte sono state pressoché sostituite dalla universale USB (la versione 1.2 ha un transfer rate teorico di 48 Mbps)

Modem Il termine deriva dalla contrazione di Modulation-Demodulation. Per comunicare su di una linea telefonica si trasmette un segnale modulato (in ampiezza e/o in frequenza e/o in fase). Nella modulazione in ampiezza si usa una frequenza costante, ma cambia il voltaggio. Nella modulazione in frequenza si usa l’ampiezza costante, ma cambia la frequenza. Nella modulazione di fase, frequenza ed ampiezza sono in genere costanti, ma varia la fase del segnale. L’unità di misura è il baud, che misura il numero di intervalli nell’unità di tempo; erroneamente si usa come se fosse una frequenza, ma in un intervallo di tempo si possono trasmettere più bit. Modulazione di fase e di frequenza possono essere combinate. Se la trasmissione è asincrona, non c’è intervallo costante tra i caratteri ed è richiesto perciò un segnale di inizio carattere ed uno di fine carattere. Se la trasmissione è sincrona, ricevitore e trasmettitore una volta sincronizzati non necessitano di segnali di inizio e fine carattere. La trasmissione half-duplex è monodirezionale alternata, quella full-duplex è bidirezionale contemporanea.

Scanner Serve a convertire immagini e tasti da supporti cartacei o similari in opportune sequenze di bit. Nel caso dei testi, appositi software (OCR) si occuperanno di estrarre le informazioni di tipo testuale dall’immagine.

Stampanti Possono essere ad impatto, a getto di inchiostro, laser o a sublimazione.

11. Reti di computer Le modalità con cui gli elaboratori si connettono tra loro ha subito nel tempo un’evoluzione passando dal paradigma “mainframe-terminali”, cioè un potente elaboratore che fornisce tutti i servizi di cui necessitano dei terminali “stupidi”, a quello di elaboratori autonomi (non legati da rapporti tipo server-client) e interconnessi. Un tale sistema di elaboratori è detto rete di elaboratori. Bisogna prestare attenzione a non confondere ciò con un sistema distribuito, che è dato da una rete di elaboratori e da uno specifico software di gestione (Sistema Operativo) che dà l’illusione di avere di fronte un unico elaboratore, non consentendo perciò di individuare l’origine delle risorse cui si accede, mentre nella rete di elaboratori si ha coscienza della presenza di molte macchine in rete e che ogni risorsa cui si accede appartiene ad uno specifico elaboratore.

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

14

Le reti di elaboratori servono a condividere le risorse per: i) una maggiore affidabilità, poiché replicando le funzioni su più macchine si garantisce il servizio anche se una particolare macchina non è in condizione di erogarlo; ii) diminuire i costi, in quanto la stessa potenza di calcolo si può ottenere con un'unica macchina o mediante più macchine ed essendo il costo crescente in maniera più che proporzionale alla potenza di calcolo la seconda soluzione risulta più economica; iii) per rendere possibili le comunicazioni fra persone; iv) accedere a informazioni remote; v) divertimento.

Le reti si differenziano per tecnologia trasmissiva e per scala dimensionale e topologia. La tecnologia trasmissiva può essere broadcasting o punto a punto. Nel caso broadcasting, tutti i computer sono connessi su di un unico condiviso canale di comunicazione, quindi ogni messaggio sulla rete perviene a tutti gli elaboratori che vi sono connessi, ma viene accettato solo dal destinatario, mentre tutti gli altri elaboratori dovrebbero scartarlo (se sono definiti dei sottoinsiemi di elaboratori cui e possibile inviare un messaggio con un particolare indirizzo, si dice che si sta operando in multicasting). Nel caso di reti punto a punto, ogni coppia di elaboratori ha uno specifico collegamento fisico, pertanto un messaggio per arrivare alla sua destinazione può dover passare uno o più elaboratori.

Per scala dimensionale si distinguono in:

LAN (Local Area Network) L’estensione tipica di una LAN è quella di un edificio o di un campus. Comunque una limitazione formale indicativa è che una LAN non deve passare sul suolo pubblico. La trasmissione può essere consentita ad un solo elaboratore alla volta, per realizzare ciò è necessario adottare una topologia trasmissiva, che può essere: i) a bus, in cui gli elaboratori sono collegati a “pettine” sulla LAN ed in tal caso il traffico sulla rete può essere regolato da un “arbitro centralizzato”, oppure senza “arbitro” e tutti gli elaboratori controllano le trasmissioni sulla LAN per individuare l’istante in cui sia possibile trasmettere ed eventualmente in caso di errore ritrasmettere la trasmissione; ii) ad anello “ring”, in cui gli elaboratori sono connessi ad anello e su cui viene trasmesso da elaboratore ad elaboratore un particolare messaggio detto “token”, solo l’elaboratore in possesso del token potrà trasmettere sulla LAN e nell’eventualità che il token arrivi ad un elaboratore che non abbia nulla da trasmettere, questi provvederà a passare il token al computer che lo segue sul ring.

MAN (Metropolitan Area Network) L’estensione tipica di una MAN è l’ambito urbano. Generalmente queste linee sono monodirezionali in fibra ottica e pertanto punto a punto.

WAN (Wide Area Network) Questa è la rete mondiale ed è composta di linee di trasmissione, elementi di commutazione e router. In una WAN le comunicazioni possono essere di tipo punto a punto o, se si usa il satellite, in broadcasting.

Per topologia le reti si differenziano in lineare (bus), ad anello (ring), stella, punto a punto e mista.

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

15

12. Protocolli e livelli Con il termine “internet” si possono intendere due cose distinte: internet (con la i minuscola) è il sinonimo di internetworking (cioè reti di tipo diverso collegate tra loro), ossia di interconnessione di reti generiche; Internet (con la I maiuscola) è lo specifico internetworking basato su TCP/IP che tutti conoscono.

Le comunicazioni tra computer avvengono usando diversi protocolli di comunicazione (cioè, regole comuni per dialogare), che per ridurre la complessità di progetto sono in generale organizzati a livelli, ciascuno costruito sopra il precedente. L’insieme dei livelli e dei relativi protocolli è detto architettura di rete.

Un’architettura di rete può essere: proprietaria sviluppata da una particolare ditta che ne detiene la proprietà come per esempio

le reti Novell o Appletalk; standard de facto il cui standard è di pubblico dominio, per cui chiunque lo può utilizzare senza

pagare diritti, come l’Internet Protocol Suite (detta anche architettura TCP/IP); standard de jure è basata su specifiche approvate da una organizzazione internazionale di

standardizzazione, come per il protocollo ISO/OSI.

La madre di tutte le reti fu Arpanet, originata da un progetto di ricerca finanziato dal Dipartimento della Difesa degli Stati Uniti (DoD), allo scopo di creare una rete estremamente affidabile in caso di catastrofi (leggasi eventi bellici) che ne rendessero inutilizzabile una parte. Arpanet attraverso varie evoluzioni ha dato origine all’attuale Internet.

Per integrare via via vari tipi di reti fu necessaria una nuova architettura nota con i seguenti nomi; Internet Protocol Suite; Architettura TCP/IP; TCP/IP reference model (anche se in realtà non è formalmente un modello in quanto i protocolli effettivi sono specificati a parte)

Di seguito è riportato un confronto tra la struttura delle due architetture ISO/OSI e TCP/IP. Da ricordare che la prima è frutto di un comitato di standardizzazione che ha definito i vari livelli e successivamente ha realizzato i protocolli; tra le due fasi è nata e si è affermata l’architettura TCP/IP con un successo tale da pregiudicare la diffusione dell’architettura ISO/OSI

OSI TCP/IP Application Application Presentation Session ___________ Transport Transport Network Internet Data Link Host to Network Fisico ___________

ISO/OSI Livello Fisico si occupa della trasmissione di bit su di un canale fisico;

Livello Data Link ha lo scopo di presentare al livello superiore un canale di trasmissione privo di errori non rilevati;

Livello Network controlla il funzionamento della subnet di comunicazione gestendo il routing, la congestione, l’accounting, e la conversione di dati nel passaggio tra reti;

Livello Transport spezza i dati provenienti dal livello superiore e li passa al livello Network e deve garantire che arrivino al corrispondente livello Transport del destinatario;

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

16

Livello Session dovrebbe occuparsi di servizi più evoluti rispetto al livello Transport, ma non ha avuto un grosso successo;

Livello Presentation si occupa della sintassi e della semantica dei dati da trasferire, tipo convertire i dati in un formato accettato dal destinatario;

Livello Application dove risiedono tutti i protocolli necessari per fornire i vari servizi agli utenti.

Internet Protocol Suite Host to network non è specificato, ma prevede l’uso di quanto disponibile nelle varie

piattaforme;

Internet si occupa di inviare i pacchetti su qualunque rete e fare il possibile per farli arrivare;

Transport consente la conversazione tra sorgente e destinazione. Sono definiti in questo livello il TCP (Trasmission Control Protocol) protocollo connesso e affidabile e l’UDP (User Datagram Protocol) protocollo non connesso e non affidabile.

Livello Application dove risiedono tutti i protocolli necessari per fornire i vari servizi agli utenti, non vengono impiegati i livelli Session e Presentation in quanto non ritenuti necessari.

13. Trasmissione del segnale Al “Livello fisico” la trasmissione può avvenire su mezzi trasmessivi quali cavi elettrici, raggi luminosi o onde radio. La trasmissione può essere analogica (varia gradualmente su un numero infinito di valori); digitale (varia bruscamente su un insieme finito di valori).

I principi su cui si basa la trasmissione di un segnale sono diversi, ma quelli di base si possono ritenere:

Analisi di Fourier un segnale variabile nel tempo è equivalente ad una somma di funzioni sinusoidali (spettro di frequenze). Ogni mezzo fisico è caratterizzato da una banda passante. Ogni mezzo fisico attenua il segnale e introduce un ritardo diverso per ogni frequenza.

Teorema di Nyquist un segnale analogico di banda h può essere ricostruito campionando a 2h al secondo.

Teorema di Shannon il massimo tasso di trasmissione è legato alla frequenza ed al rapporto segnale rumore Max data rate (bit/sec) = h lg(1+S/N)

14. Mezzi trasmissivi Il segnale può viaggiare utilizzando una notevole varietà di mezzi trasmessivi, di seguito si fornisce un breve e parziale elenco:

Doppino intrecciato Cat.3 due fili isolati attorcigliati. Cat.5 migliore isolamento e attorcigliamento più stretto

Cavo coassiale Baseband coaxial cable (50 Ohm – 1-2Gps fino a 1Km) Broadband coaxial cable (75 Ohm – 300 MHz fino a circa 100 Km)

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

17

Fibre ottiche Multimodali 50 micron (più trasmissioni contemporanee) Monomodali: 9-10 micron (reggono distanze fino a 30 Km)

Trasmissioni senza fili Onde radio Microonde Raggi infrarossi Luce visibile Raggi ultravioletti 15. Sistema telefonico Il sistema telefonico riveste un ruolo centrale per le comunicazioni tra elaboratori sia perché c’è la possibilità di utilizzare una rete cablata esistente e sia perché è illegale stendere cavi sul suolo pubblico. Il sistema telefonico è composto da centrali di dimensioni e complessità crescente organizzate in forma gerarchica.

Le trasmissioni multiple possono avvenire per Frequency division multiplexing o per Time division multiplexing. In breve, la prima tecnica consiste nel suddividere la capacità trasmissiva (banda) disponibile in tanti canali, ognuno dei quali opera su un limitato intervallo di frequenza, ed è assegnato in esclusiva ad una data comunicazione; la seconda, per contro, assegna ad ogni comunicazione tutta la banda ma per intervalli di tempo piccolissimi. 16. Collegamento a Internet Un collegamento domestico a Internet si realizza con un modem ed un provider. In tal caso incidono: la velocità del modem dell’utente; la velocità del modem del provider; lo stato di carico della rete del provider; il tipo di linea utilizzata per la connessione.

Il protocollo TCP/IP prevede che ogni computer abbia un indirizzo del tipo 255.255.255.255 che nel caso di un collegamento ad un provider è assegnato dinamicamente, ossia due collegamenti diversi potranno far sì che al computer siano assegnati indirizzi diversi. Nelle LAN gli indirizzi possono sia essere assegnati dinamicamente che staticamente, in altre parole permanentemente.

I campi dell’indirizzo individuano la classe A, la B, la C e il numero del computer all’interno della rete. L’importanza delle classi è a decrescere partendo dalla classe A. 17. Il Sistema Operativo Il software può essere in due grosse categorie di programmi, il software di sistema e il software applicativo. Il più importante programma di sistema è il Sistema Operativo (S.O.) che controlla tutte le risorse e rende disponibile una base per tutti i programmi applicativi. Il S. O. presenta all’utente un’interfaccia o macchina astratta più semplice da capire e da programmare rispetto al linguaggio macchina e si occupa di gestire un’allocazione ordinata delle risorse ai vari programmi che competono per usarle tenendo traccia di chi le usa, di accettare e soddisfare le richieste, di evitare e/o risolvere i conflitti.

L’evoluzione dei S.O. ha seguito un percorso pressoché parallelo a quello degli elaboratori. I primi elaboratori erano privi di un S.O. ed ogni programma aveva l’uso esclusivo dell’elaboratore, il che implicava l’autosufficienza per gestire tutte le risorse di cui necessitava, comportando ulteriori complicazioni a livello di programmazione; oggi un moderno S.O. è in grado di coordinare

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

18

l’esecuzione contemporanea di numerosi programmi e fornire loro tutti i servizi di cui necessitano, come la gestione dei dispositivi di Input/Output. Di seguito è riportata una sintetica cronistoria dei S.O.

1. 1945-1955 Tecnologia: valvole. Gli elaboratori si programmavano con schede e cavi a spinotti. Dai primi elaboratori privi di S.O. si pervenne a S.O. molto primitivi.

2. 1955-1965 Tecnologia: transistors. Si impiegava la programmazione batch, che consisteva nel raccogliere fuori linea i programmi in lotti (batch) su nastro magnetico, mandare in esecuzione i lotti e registrare gli output su un nastro magnetico da stampare fuori linea.

3. 1965-1980 Tecnologia: circuiti integrati. Questo periodo si caratterizza per la multiprogram-mazione, dividendo la memoria centrale in porzioni, ognuna atta a ricevere un programma in esecuzione; questo sistema richiedeva la presenza di hardware specializzato. Il timesharing è una variante della multiprogrammazione in cui ogni utente ha un terminale in linea. S.O. tipici: FMS e IBSYS.

4. 1980-1994 Tecnologia: circuiti integrati su larga scala. S.O. tipici: MS-DOS e UNIX; 5. 1998-2003 Tecnologia: circuiti integrati su larghissima scala. S.O. tipici: Windows, UNIX e

LINUX. 18. Struttura dei S.O. I Sistemi Operativi sono strutturati nel Kernel (o nucleo) e nel Sistema Operativo cosiddetto esteso. Quando l’elaboratore funziona il Kernel è sempre presente in memoria, mentre il S.O. esteso è formato da una serie di programmi che non sono continuativamente necessari e, per non impegnare memoria, si caricano solo a richiesta e sono scaricati finito il loro compito; ad esempio quando si vuole formattare un floppy disk, una volta dato il comando, il S.O. carica l’apposito programma che dopo la formattazione del floppy disk viene scaricato dalla memoria.

L’interfaccia tra S.O. e programma utenti è definita dall’insieme di “istruzioni estese” del S.O., che creano, usano e distruggono i vari oggetti software gestiti dal S.O., i più importanti di tali oggetti sono i processi ed i file. 19. I processi La CPU ad ogni istante può eseguire un solo programma, ma osservando il funzionamento di un elaboratore si potrebbe invece pensare che più programmi siano in esecuzione contemporaneamente; per esempio, un browser può caricare una pagina html mentre è collegatoi tramite Internet con un sito Web e nell’attesa ci si può diverte con un videogioco e, sempre contemporaneamente, un documento viene inviato alla stampante tramite un programma videoscrittura. Ma riferendosi ad elaboratori monoprocessori, ossia dotati di una sola CPU, la realtà è che potrà essere in esecuzione un solo programma alla volta. Ci si domanda allora come può succedere che più programmi siano in esecuzione contemporaneamente. Vedremo nel seguito del paragrafo come ciò sia possibile.

Una definizione più precisa di ciò che per semplicità si è chiamato “programma”, è quella di processo, dove per processo si intende un programma “in esecuzione”, ossia: il programma eseguibile, il program counter, lo stack pointer (un indice della posizione corrente nella memoria detta stack) e i valori di altri registri e variabili di stato (vedi anche par. 6).

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

19

Per ovviare alla disponibilità di una sola CPU, che perciò può eseguire un solo programma alla volta, si usa il “trucco” di dividere il tempo della CPU in tanti intervalli (detti “quanti” o “slice”) e ad ogni processo si assegna ciclicamente l’uso della CPU per uno o più quanti. Così nell’arco di un secondo possono girare diversi processi in una sorta di pseudoparalellismo, ma realmente il tutto funziona in maniera sequenziale con un processo alla volta in esecuzione. Il tempo di ogni quanto può essere di qualche decina di millisecondi fino a qualche centinaio. La dimensione dell’intervallo in cui un processo può essere eseguito dipende anche dal tipo e dal numero di processi in memoria. Quando un processo ha consumato l’intervallo di tempo a sua disposizione, i suoi dati e lo stato corrente vengono salvati, affinché possano essere ricaricati quando quel processo andrà di nuovo in esecuzione, e vengono caricati quelli del nuovo processo. Questa operazione prende il nome di “cambio di contesto” e la modalità di esecuzione prende il nome di multiprogrammazione (per comodità si ipotizza comunque che ogni processo abbia un microprocessore dedicato, anche se il microprocessore è ovviamente virtuale essendo unico quello reale. Differentemente, nei primi calcolatori poteva essere eseguito un solo programma alla volta con un uso esclusivo e continuativo dell’elaboratore, si parla in tal caso di monoprogrammazione). Nei processi interattivi, che cioè interagiscono direttamente con l’utente è importante che la dimensione degli slice sia tale da dare una sensazione di fluidità nascondendo così la reale esecuzione sequenziale.

Il S.O. mantiene traccia dei processi in esecuzione attraverso una tabella dei processi dove ogni riga corrisponde ad un processo e contiene informazioni sullo stato del processo, lo stack pointer, l’allocazione di memoria, lo stato dei file aperti, informazioni utili a quantificare i costi, lo scheduling e qualsiasi cosa sia necessario salvare quando un processo non ha più la disponibilità del microprocessore (con la sola esclusione del contenuto della porzione di memoria utilizzata dal processo). Pertanto il S.O. quando gestisce i cambi di contesto fa riferimento alla tabella dei processi per salvare tutte le informazioni relative al processo che sta per essere scaricato e per prelevare, se il processo era già stato schedulato, tutte le informazioni relative al processo da caricare.

Un cambio di contesto può anche avvenire anche in un qualunque istante della sua esecuzione allorché il processo richieda un dato che debba essere reperito in memoria. In tal caso aspettare che il dato sia recuperato comporta un’oziosa attesa della CPU e pertanto risulta più produttivo mandare in esecuzione un altro processo. Si può affermare che quando un processo si blocca lo fa perché da un punto di vista logico non può continuare l’esecuzione (in genere perché manca un dato, oppure la CPU è stata allocata ad un altro processo). I processi si possono quindi distinguere nei seguenti stati:

1. in esecuzione 2. pronto – è un processo eseguibile se solo avesse la disponibilità del microprocessore. 3. bloccato – è un processo nell’attesa di dati o di qualche risorsa e ovviamente non ha l’uso

del microprocessore.

Esistono diversi tipi d’eventi che possono provocare la sospensione di un processo in esecuzione, quali il completamento di un’operazione di I/O, una divisione per zero, un accesso in memoria non valido, una richiesta al S.O.. Ognuno di questi eventi è causa dell’invio di un segnale alla CPU, segnale che prende il nome di “interrupt”. L’interrupt provoca la sospensione del processo in esecuzione e il passaggio dalla modalità di funzionamento utente a quella Kernel. In modalità Kernel il S.O. avvia idonei processi atti a gestire il problema che ha causato l’interrupt. In altre parole, viene realizzato il salvataggio dei registri e delle variabili di stato sullo stack, quindi un’apposita procedura salva i dati relativi al processo corrente e in ultimo è avviata la routine di servizio idonea per quel dato interrupt.

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

20

Un processo può creare uno o più processi figli o anche una gerarchia di processi che, in relazione al tipo di S.O., possono essere sia attivi contemporaneamente che comportare la sospensione del processo padre fino alla conclusione del/dei processi figli. I S.O. devono disporre di qualche meccanismo per gestire i processi, le principali chiamate di sistema riguardano la loro creazione e terminazione.

E’ utile anche far presente un problema che riguarda i processi obbligati a condividere la memoria in lettura e scrittura, in cui si possono verificare le “race-conditions” o “corse critiche”. In breve, il problema delle corse critiche è collegato ai cambi di contesti e si può verificare, ad esempio, quando un processo legge una locazione di memoria condivisa, immagazzina il dato, ma prima che lo possa utilizzare vi è un cambio di contesto. Il processo che segue utilizza la stessa locazione di memoria (in genere perché è usata per una qualche forma di comunicazione con l’altro processo) legge il dato, che in questo caso era lo stesso letto dall’altro processo, e modifica il valore della locazione di memoria. Al successivo cambio di contesto il primo processo torna in esecuzione, ma non rileggerà più la locazione di memoria, avendola gia letta precedentemente, e userà quel valore che ora è purtroppo sbagliato; tutto ciò può anche causare il blocco di entrambi i processi. Esistono comunque diverse tecniche di programmazione per evitare il verificarsi di questa tipologia di problemi. 20. Lo scheduling dei processi Per decidere quale processo mandare in esecuzione tra i processi che sono nello stato di pronto, si fa uso dello “scheduler dei processi” che decide in base alla politica adottata e i cui criteri possono essere: imparzialità, efficienza, tempo di risposta, tempo di round (minima attesa per i processi batch), throughput (numero di lavori elaborati per ogni unità di tempo). Da notare che alcuni criteri possono essere in conflitto tra loro e pertanto non applicabili simultaneamente.

Un concetto fondamentale è che ogni processo non è predicibile, non si può cioè predire in che stato sarà il processo ad un certo istante del quanto di tempo assegnatogli, perciò periodicamente i calcolatori generano un’interruzione (mediamente da 50-60 volte al secondo in su) e ad ogni interruzione esaminano lo stato del processo al fine di consentire la continuazione dell’esecuzione.

Un altro fattore da tenere in conto è la politica adottata nei confronti dei processi che acquisiscono delle risorse; la strategia che consente (o non consente) di interrompere i processi che hanno acquisito delle risorse è detta con prerilascio (o senza prerilascio) altrimenti detta “preemptive scheduling” (o non “preemptive scheduling”). Gli algoritmi di gestione dei processi che implementano politiche senza prerilascio sono ovviamente più semplici di quelli che impiegano politiche con prerilascio, ma sono utilizzabili in presenza di utenti in competizione per l’uso delle risorse.

Gli algoritmi più comuni di schedulazione dei processi sono:

• Round robin - Ad ogni processo è assegnato un quanto (slice) di tempo in cui girare, il processo viene sostituito alla fine del quanto o quando si blocca. L’algoritmo round robin è facile da implementare, ma la durata del quanto è un fattore critico poiché ogni cambio di contesto ha dei tempi morti, quindi se aumentando la dimensione del quanto si massimizza l’efficienza tuttavia minore è la dimensione del quanto maggiore è il numero di processi che gira e migliore è l’interattività con gli utenti. Una dimensione di circa 100 millisecondi è mediamente ragionevole, ma dipende anche dalle caratteristiche dell’hardware.

• Con priorità - Ogni processo ha una priorità che ad ogni cambio di contesto viene decrementata di un’unità. Il processo in esecuzione sarà sempre quello con priorità

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

21

maggiore. La priorità può essere assegnata staticamente o dinamicamente. Una buona tecnica è assegnare al processo una priorità pari all’inverso della durata (espressa in secondi) dell’ultimo quanto utilizzato. All’interno di classi di processi con la stessa priorità può essere usata la tecnica round robin.

• Code multiple - I processi sono suddivisi in classi ed ogni classe ha durata doppia di quella inferiore. I processi arrivano nella classe superiore ogni volta che consumano tutto il quanto a disposizione, oppure ogni volta che viene battuto un tasto supponendo ciò indicativo del fatto che il processo stia per diventare interattivo.

• Garantita - Utile nei sistemi real-time, dove si manda in esecuzione il processo che ha il rapporto più basso tra il tempo usato e quello che gli spettava.

• A due livelli - Uno schedulatore manda in esecuzione i processi tra quelli in memoria ed un altro decide quale caricare e scaricare dalla memoria. Tra i criteri si segnalano: il tempo passato dal precedente scarico; il tempo più recente di utilizzo della CPU; la grandezza del processo; la priorità del processo.

21. Gestione della memoria Tra le risorse più importanti vi è indubbiamente la memoria. Storicamente, la prima tecnica adottata di gestione della memoria è quella detta “monoprogrammazione senza swapping o paginazione”, dove ad ogni istante vi è un solo processo in esecuzione che ha assegnata tutta la memoria disponibile. Questa tecnica implica che, non essendoci cambi di contesto, il programma deve essere in tutto e per tutto autosufficiente ed ogni processo al suo interno deve avere un gestore per ogni dispositivo usato, non potendo richiedere l’intervento di altri processi. Una forma attualizzata di monoprogrammazione può essere quella presente in alcuni semplici microcalcolatori dedicati, dove la memoria è divisa tra S.O. (sempre presente) e l’unico programma in esecuzione.

In alternativa si può allocare la memoria a più processi che girano in pseudoparallelismo, questa tecnica è detta “multiprogrammazione” e il numero di processi che possono contemporaneamente stare in memoria dipende dalle dimensione dei processi e della memoria. Dal punto di vista della programmazione è possibile realizzare applicazioni di dimensioni minori, potendo demandare l’uso dei dispositivi ad altre applicazioni, oltre naturalmente ad essere più semplice servire più utenti. Dal punto di vista dell’efficienza, ottimizza l’uso della CPU ovviando alla perdita di tempo di calcolo che si verifica quando un processo necessita di dati esterni per la maggior parte del tempo in cui resta in memoria, in tal caso con un solo processo la CPU resterebbe bloccata in attesa del dato mancante.

Se si adotta la multiprogrammazione con partizioni fisse, in questo caso l’organizzazione migliore è quella di avere n partizioni, ma non necessariamente di dimensioni uguali. Lo svantaggio di questa tecnica è che ogni porzione della partizione non effettivamente occupata dal processo è persa. Un’altra strategia che si può adottare è quella di mantenere una coda di processi ed allocare in una partizione libera il primo processo presente nella coda che abbia dimensioni tali da essere contenuto nella partizione, ma in tal modo si rischia però di avere processi piccoli in partizioni grandi; in alternativa, si potrebbe scegliere il processo più grande presente nella coda che è in grado di entrare nella partizione, ma così si discriminerebbero i processi piccoli. Per ovviare a questo problema si può imporre che un processo non può essere scartato più di k volte.

Con la multiprogrammazione quando un processo è ricaricato in memoria, quasi sempre la partizione che gli viene assegnata è differente da quella del precedente turno d’esecuzione, per tale motivo andrà in esecuzione a partire da indirizzi di memoria diversi, con l’ovvia conseguenza che tutti gli indirizzi di memoria precedentemente utilizzati non sono più validi. Gli effetti di ciò

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

22

sarebbero probabili indirizzamenti di memoria al di fuori dalla propria partizione corrente e per ovviare a ciò il linker (che partendo dal codice oggetto e dalle librerie, risolve tutti i riferimenti pendenti, dovuti in genere alle funzioni di libreria impiegate, ottenendo un codice eseguibile dotato di uno spazio indirizzi unico) dovrebbe includere nel codice eseguibile una lista delle variabili da rilocare ogni volta che la partizione assegnata cambia e dividere la memoria in blocchi protetti da accessi non consentiti, abilitando ogni processo all’uso del solo blocco assegnato. Una soluzione migliore è quella di esprimere gli indirizzi dei programmi come indirizzi relativi ed ogni volta che un processo viene assegnato ad una partizione, l’indirizzo reale sarà ottenuto sommando l’indirizzo relativo del processo con quello corrispondente alla prima locazione di memoria della partizione. In questo modo è facile cambiare la partizione assegnata ai processi. L’operazione di carico e scarico dei processi dalla memoria è detta operazione di swapping.

Un'altra tecnica di multiprogrammazione è quella realizzata con partizioni variabili sia in numero che in dimensione. Questa tecnica ha il pregio di sfruttare meglio la memoria rispetto alle partizioni fisse, per contro ha il difetto di creare “buchi” nella memoria in corrispondenza dei processi scaricati; in realtà i buchi adiacenti possono essere raggruppati in un'unica area di memoria. Se il processo cresce dopo l’allocazione, per esempio perché genera una serie di dati intermedi che deve provvisoriamente salvare, i processi anziché essere spostati o terminati (detti anche “processi uccisi”) possono sfruttare eventuali buchi nella memoria che risultino adiacenti all’area in cui è allocato il processo. La gestione della memoria può essere effettuata attraverso bitmap o attraverso liste. Ognuna di queste tecniche ha vantaggi e svantaggi. Con le bitmap ogni bit rappresenta una piccola porzione di memoria; se il bit è posto pari ad 0 indica che quella porzione di memoria è libera, ma per contenere il processo si dovrà trovare una sequenza di bit sufficientemente lunga; le liste sono già organizzate per dimensioni e quindi il gestore deve cercare solo quella di dimensioni sufficienti a contenere il processo, ma avrà lo svantaggio dei costi di calcolo dovuti alle frequenti riorganizzazioni dei dati. Con la tecnica delle liste possono essere utilizzate le strategie:

1. first fit - primo posto sufficiente; 2. next fit - si ricorda dove nella ricerca precedente era stato trovato un buco sufficiente; 3. best fit - scegli il miglior buco possibile) – problema: lascia buchi troppo piccoli; 4. wost fit - sceglie sempre il buco più grande) - problema: non è molto efficiente; 5. quick fit - mantiene liste separate per le dimensioni più comuni.

L’allocazione dello spazio di swap quando si scaricano i processi sul disco fisso comporta l’uso delle stesse strategie con l’unica differenza che in questo caso i processi devono occupare un multiplo dell’unita base di memorizzazione del disco fisso (blocco). 22. Memoria virtuale I programmi con il tempo divennero sempre più complessi e di dimensioni maggiori fino ad essere più grandi della memoria disponibile, i programmatori iniziarono allora ad usare la tecnica di dividerli in blocchi (overlay) che venivano caricati a turno in memoria secondo le necessità. Mentre il caricamento dei blocchi in memoria rimaneva compito del S.O., la suddivisione del programma in blocchi era un lavoro complesso e faticoso dei programmatori.

Nel 1961 in Scozia fu introdotta la memoria virtuale, un sistema trasparente all’utente in cui si impiega (indirizza) uno spazio di memoria maggiore (spazio di indirizzi virtuali) della memoria realmente disponibile (memoria fisica). Infatti, lo spazio di indirizzi virtuali era determinato dall’indirizzo più grande (numero binario più grande) che poteva essere richiesto dall’elaboratore, mentre quello fisico risultava solo un sottoinsieme di quello virtuale. L’idea fu quella di dividere la memoria fisica e la memoria virtuale in tanti blocchi (pagine) di dimensioni uguali e di assegnare un

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

23

identificativo ad ogni pagina. Nell’ambito dei limiti rappresentati dalla dimensione della memoria reale si caricheranno (dalla memoria secondaria) le pagine virtuali (quasi mai consecutive) mano a mano che servono ai processi in esecuzione, eventualmente scaricando quelle non più necessarie.

Gli indirizzi virtuali sono gestiti dall’Unità di Gestione della Memoria” (MMU) che li trasforma in indirizzi fisici, creando una corrispondenza tra una pagina appartenente allo spazio d’indirizzamento virtuale ed una appartenente a quello fisico. Una “tabella delle pagine” memorizza quali sono le pagine virtuali caricate nelle pagine della memoria fisica.

Se si cerca un indirizzo appartenente ad una pagina virtuale non presente in memoria si ha un fault di pagina, si scaricherà allora dalla memoria primaria alla memoria secondaria (ma solo se questa ha subito modifiche, altrimenti per risparmiare tempo si scriverà la nuova pagina caricata sulla vecchia pagina) una pagina poco usata e si caricherà dalla memoria secondaria alla memoria primaria la pagina che contiene l’indirizzo cercato e quindi si aggiornerà la tabella delle pagine virtuali.

La dimensione delle pagine è sempre un multiplo di 2, così è possibile suddividere un indirizzo in due parti, il numero della pagina e un indirizzo di una locazione di memoria interna alla pagina, detto anche “offset” o “spiazzamento”. Indirizzo più grande della memoria virtuale

Indirizzo più grande della memoria fisica

Dimensione della pagina di 16 bit Parola di 32 bit ��������������������������������

Indirizzo interno alla pagina Numero della pagina virtuale Numero della pagina reale

Nella tabella delle pagine l’elemento relativo alla pagina virtuale viene ricavato dal numero di pagina fisica da collegare all’offset per avere l’indirizzo da mandare in memoria. La tabella delle pagine virtuali mappa le pagine virtuali alle pagine fisiche, le pagine virtuali sono ovviamente molte di più delle pagine fisiche e la tabella può risultare molto grande, ma la traduzione deve essere fatta velocemente se non si vogliono pregiudicare le prestazioni del sistema. A titolo d’esempio con indirizzi da 32 bit e pagine da 4 Kb si hanno più di un milione di pagine e in un’istruzione potrebbero esserci anche tre riferimenti in memoria. Le soluzioni per effettuare una traduzione efficiente sono quelle di avere dell’hardware specializzato costituito da registri veloci, uno per ogni pagina virtuale; in alternativa la tabella può essere a sua volta mantenuta direttamente in memoria, ma questa soluzione è più lenta della precedente.

Per evitare la presenza in memoria di tabelle delle pagine molto grandi si può usare la paginazione a più livelli, alcuni sistemi arrivano fino a quattro livelli. In memoria si terrà perciò solo ciò che è strettamente necessario salvando il resto nella memoria secondaria.

La ricerca della presenza in memoria fisica di una data pagina virtuale rallenta il sistema, per velocizzarlo si fa uso di una piccola memoria associativa che contiene informazioni relative alle pagine presenti in memoria fisica oggetto dei più recenti accessi. La memoria associativa rende

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

24

possibile effettuare una ricerca in parallelo su tutti i dati per verificare la presenza in memoria fisica della pagina cercata e in caso di successo anche la corrispondenza tra pagina di memoria fisica e virtuale. Questo sistema statisticamente ha una buona efficienza.

Si individuano tre casi:

1. Se è presente in memoria la pagina e non si viola un bit di protezione (che indica il tipo di accesso consentito) viene presa la pagina

2. Se è presente in memoria la pagina e si viola un bit di protezione si ha un fault di pagina 3. Se non è presente in memoria la pagina si cerca nella tabella delle pagine, si scarica un

elemento dalla memoria associativa e lo si rimpiazza con la nuova pagina.

Se la pagina scaricata era stata modificata la si salva in memoria. Questa informazione è data da un bit che viene modificato con la prima operazione di scrittura effettuata sulla pagina. Quando c’è un cambio di contesto si devono invalidare le pagine già caricate in memoria associativa, in genere mettendo a 0 il bit di validità.

Un altro problema che si crea caricando e scaricando le pagine dalla memoria è la scelta della pagina da scaricare. L’algoritmo ideale di rimpiazzo delle pagine è purtroppo irrealizzabile, dato che consiste nello scaricare tra le pagine presenti in memoria quella che verrà richiamata il più tardi possibile e ciò ovviamente non può essere noto a priori. Il problema della scelta della pagina da eliminare è stato oggetto di numerosi studi e altrettanto numerose sono le possibili soluzioni, a titolo esemplificativo si fa cenno a due possibili strategie, quella che sceglie di scaricare la pagina usata meno recentemente e quella che sceglie la pagina più vecchia (caricata prima di tutte le altre presenti in memoria).

La paginazione su domanda comporta che il processo richieda al sistema le pagine a cui fa riferimento e queste pagine vengono richiamate in memoria. La maggior parte dei programmi mostra una località dei riferimenti, cioè in ogni fase dell’esecuzione il progetto si riferisce ad un limitato numero di pagine detto “working-set”. Se tutto il working-set sta in memoria non ci sono page-fault, per contro se dopo poco istruzioni il processo provoca sempre dei page-fault si dice che il processo è in una situazione di “trashing”. Per evitare che ad ogni cambio di contesto vi siano sequenze di page-fault, il sistema cerca di tenere traccia dei vari working-set e di caricarli prima di iniziare l’esecuzione del nuovo processo.

La scelta della pagina da scaricare può essere fatta tra tutte quelle in memoria indipendentemente dal processo a cui appartiene o solamente tra quelle relative al processo che ha causato il page-fault. Per limitare comunque i page-fault è conveniente che lo spazio in memoria sia anche dimensionato tra i vari processi in funzione della frequenza dei page-fault.

Infine un'altra problematica è la dimensione delle pagine, poiché se sono piccole vi è meno spreco, ma si richiedono tabelle più grandi, un maggior numero di page fault e maggior tempo speso in trasferimenti; viceversa se la dimensione delle pagine è più grande 23. La segmentazione Dopo la paginazione si è cercato di ottenere ancora più spazio indirizzabile, ma i limiti sono comunque individuati dalla dimensione dell’indirizzo. Si è trovata la soluzione nel dotare uno stesso processo di più spazi di indirizzamento lineari completamente indipendenti chiamati segmenti, che possono avere la stessa dimensione oppure no.

Per potere indirizzare il segmento bisogna strutturare diversamente l’indirizzo di memoria in numero di segmento ed indirizzo interno al segmento (similmente a ciò che avviene nella

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

25

paginazione), ma niente vieta che si usi contemporaneamente anche la paginazione (strutturando la parte relativa all’indirizzo interno al segmento come un indirizzo virtuale; si avrà pertanto un indirizzo diviso in numero di segmento, numero di pagina e indirizzo interno alla pagina).

I segmenti consentono anche il linking delle singole procedure separatamente, ognuna dotata del proprio segmento, oppure consentono di caricare ogni libreria in un segmento separato. Inoltre, mentre nella paginazione il contenuto della pagina è sconosciuto al programmatore perché il funzionamento nei suoi confronti è trasparente, nella segmentazione è il programmatore che decide se ci deve essere e cosa deve contenere ogni segmento e pertanto volendo può anche proteggere e dare diritti differenti ad ogni segmento. 24. I File System La capacità della memoria primaria è limitata dalle dimensioni, frequentemente risulta insufficiente e comunque non è permanente (escludendo le memorie tipo “flash” che però attualmente risultano più lente di quelle correntemente usate per la memoria primaria), ossia quando si spegne il computer il contenuto va perso, inoltre non è accessibile se non al proprietario dello spazio di indirizzamento e ciò rende difficile scambiarsi le informazioni.

Perciò serve: 1. memorizzare le informazioni permanentemente alla fine del processo 2. memorizzare grosse quantità di informazioni 3. consentire a più processi l’accesso alle informazioni.

Un file su supporti esterni risolve questo problema, ma bisogna definire che cosa è un file e pertanto la struttura del File System, i nomi dei file, le modalità di accesso e protezione, sono le principali tematiche che tratteremo in questo paragrafo.

I file sono un meccanismo di astrazione che consentono in maniera trasparente per l’utente di memorizzare e ritrovare una informazione prescindendo dalla reale implementazione. Quando un processo crea un file gli da un nome e, quando il processo termina, attraverso quel nome altri processi potranno usare il file. Il nome è spesso diviso in due o più parti il cosiddetto nome vero e proprio e nessuna o una o più estensioni.

Le tre più comuni modalità di strutturazione dei file sono: 1. sequenza non strutturata di byte 2. sequenza di record 3. ad albero

In 1) un qualsiasi significato può essere attribuito a livello di programma utente; il S.O. non aiuta, ma non interferisce. In 2) si usa una struttura a sequenza di record a lunghezza fissa, ognuno con una sua struttura interna. Ogni lettura restituisce un record ed ogni scrittura scrive un record. In 3) si usa un albero di record, non necessariamente della stessa lunghezza, l’albero è ordinato rispetto ad un campo del record detto Key.

I tipi di file possono essere 1. File regolari – contengono le informazioni degli utenti 2. File directory – file di sistema che conservano la struttura del file system 3. File speciali a caratteri – modellano l’Input/Output di unità speciali (stampanti, terminali,

reti) 4. File speciali a blocchi – modellano i dischi

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

26

I file regolari possono essere scritti in ASCII, ossia formati da linee di tipo testo (per ogni linea i sistemi operativi in genere inseriscono un carattere di fine linea), oppure possono essere in binario e se letti risultano non direttamente comprensibili (in genere i file binari hanno anche una struttura interna). I file regolari ASCII si possono stampare ed è facile collegare Output e Input di programmi diversi. I programmi sono essi stessi file eseguibili ed un sistema operativo deve perlomeno riconoscere il proprio file eseguibile.

Il tipo di accesso ai file può essere di tipo sequenziale a tutti i byte (o record) del file, oppure ad accesso casuale in cui i byte o record possono essere letti in un qualsivoglia ordine, a partire dall’inizio del file o dalla posizione corrente.

Ogni Sistema Operativo associa ad ogni file delle informazioni tra cui potrebbero esserci:

Protezione Password Creatore Proprietario Flag di sola lettura Flag di file nascosto Flag di sistema Flag d’archivio Flag ASCII Flag binario Flag d’accesso casuale Flag di file temporaneo Flag di lock Lunghezza dei record Posizione chiave Tempo di creazione Tempo dell’ultimo accesso Dimensione attuale Dimensione massima

N.B. Un flag è un bit che da un’informazione di tipo on/off.

Le principali operazioni che è possibile eseguire sui file sono: CREATE per creare un file; DELETE per cancellare un file; OPEN per aprire un file in lettura o scrittura; CLOSE per chiudere un file aperto in lettura o scrittura; READ per leggere sequenzialmente il contenuto di un file dopo che è stato aperto; WRITE per scrivere un file sequenzialmente partendo dall’inizio; APPEND per scrivere un file in coda al contenuto già esistente; SEEK per accedere ad una specifica informazione in maniera casuale e non sequenziale; GET ATTRIBUTES per restituire gli attributi del file; RENAME per cambiare il nome del file. I file possono essere raccolti in cartelle che prendono il nome di Directory. Se ci sono più utenti, ogni utente può avere la propria area riservata (e protetta dagli altri utenti) per la memorizzazione dei suoi dati, e tale area sarà identificata dalla directory dell’utente. E’ possibile organizzare il file system con una struttura gerarchica delle directory. A titolo d’esempio la directory di un utente al proprio interno potrà avere un’altra directory per i file di testo, una per i videogiochi ed una per i fogli excel, la directory dei file di testo a sua volta potrà al suo interno contenere altre directory come quella dei file di ricerca, dei file delle lettere all’amministratore e cosi via. Dal punto di vista del S.O. una directory è solo un tipo di file. Ciascun file all’interno di una gerarchia di directory è caratterizzato da un percorso (path) che bisogna utilizzare per accedere al file, il path può essere assoluto o relativo, nel primo caso si deve esplicitare tutto il percorso dall’origine della struttura gerarchica delle directory (root) al file, nel secondo basta solo il nome del file, ma si può usare solo quando l’utente è posizionato nella stessa directory che contiene il file. Le principali operazioni che è possibile eseguire sulle directory sono: MAKE (o MD) per creare una directory; REMOVE (o RD) per cancellare una directory; RENAME per cambiare il nome della directory; CHANGE (o CD) per cambiare la directory corrente; DIR (o LIST) per elencare il contenuto di una directory.

Giuseppe M.L. Sarnè – Elementi d’informatica di base

Dispensa gratuita disponibile dal sito www.giuri.unirc.it

Università “Mediterranea” degli Studi di Reggio Calabria

Facoltà di Giurisprudenza – Corso di Laurea in Scienze Economiche

27

Bibliografia Informatica di base – D.P. Curtin et al. – McGraw-Hill I moderni sistemi operativi – A. S. Tanenbaum – Prentic Hall International Architettura dei Computer – A. S. Tanenbaum – Prentic Hall International Reti di Computer – A. S. Tanenbaum – Prentic Hall International