vuoi
o PayPal
tutte le volte che vuoi
Un sistema operativo multi-programmato si propone di nascondere all’utente la
presenza degli altri, fornendo a ognuno una visione astratta in cui la macchina
virtuale è interamente a sua disposizione, detta memoria virtuale, realizzata da
programmi detti gestori della memoria virtuale. Le tecniche da loro utilizzate
sono:
• Alternare le immagini dei processi nella memoria centrale, eseguendo al
momento dello switch di contesto da parte del processore anche lo
swapping, ossia lo scambio delle immagini dei processi nella memoria
principale.
• Caricando le immagini dei processi nella memoria centrale a pezzi, invece,
si caricano solo le parti di programma e dati utili durante una fase
dell’elaborazione, tenendo le altre parti in memoria secondaria.
Non sempre i processi vengono caricati nella stessa partizione: quando questo
vincolo non viene imposto si parla di swapping con rilocazione, in cui il codice del
programma è cioè rilocabile in diverse zone. E’ inoltre opportuno avere sempre
almeno due partizioni in memoria, in modo che al momento dello swapping in
una partizione, vi sia almeno un processo caricato ed eseguibile nell’altra
partizione.
Si possono tenere in memoria alcune parti delle immagini dei processi, purché si
sia in grado di caricare le altre parti in caso servano, grazie alla tecnica della
paginazione a richiesta (demand paging). L’immagine di un processo viene
suddivisa in pagine della stessa dimensione. La memoria principale
dell’elaboratore è divida in frame (della stessa dimensione delle pagine), di cui il
sistema operativo tiene traccia nella tabella dei blocchi (frame table),
mantenendo informazioni sul loro stato attuale (occupati/liberi) e il loro uso
recente. Ogni cella della memoria virtuale di un processo avrà un indirizzo
virtuale a cui le istruzioni del codice del processo faranno riferimento, formato dal
numero della pagina in cui si trova un’informazione e dall’indirizzo relativo al suo
interno (offset). Al momento della creazione del processo, le pagine contenenti
l’inizio del programma vengono caricate (solo quando servono) in frame liberi.
Quando l’esecuzione fa riferimento a un indirizzo di un’altra pagina si ha un page
fault, un indirizzamento a una pagina non correttamente caricata in memoria,
che blocca il processo e lo manda in attesa. Il sistema operativo gestisce la
tabella delle pagine (page table) per ogni processo, con tante righe quante
pagine ha il processo. Alla creazione di quest’ultimo, tutte le pagine si trovano in
memoria secondaria, per poi iniziare ad essere caricate nella principale quando il
processo è pronto. La scelta della pagina da rimpiazzare quando i frame liberi
non bastano si compie cercando di rimuovere le pagine che non serviranno più in
futuro, o serviranno il più tardi possibile. Se il sistema perde molto tempo a
scambiare le pagine si parla di trashing, che si realizza quando vengono scelte
pagine che serviranno presto e la pagina tolta dovrà essere subito ricaricata.
I dischi magnetici supportano la memorizzazione permanente di comandi e dati,
ma sono usati anche come supporto alla memoria principale. Il file system è la
parte di sistema operativo che gestisce e struttura le informazioni della memoria
di massa, fornendo all’utente una visione logica dei file e utilizzando lo spazio sui
dischi in maniera ottimale.
Il sistema operativo fornisce quindi una visione astratta dei file, che l’utente può
identificare con un nome logico e su cui può svolgere operazioni. Tutti i sistemi
operativi forniscono operazioni per creare directory (direttorio, folder, cartella),
un insieme di file o cartelle: ad esempio la directory applicazioni contiene i file
con i programmi applicativi, mentre quelle user contengono i file degli utenti. Nei
sistemi operativi, le directory e i file si rappresentano mediante alberi, in cui
• il nodo più alto (radice) corrisponde all’insieme di tutte le informazioni,
• ed esistono nodi padri e figli, o sotto-alberi che contengono figli e
discendenti di un nodo.
Lo slash / viene utilizzato come separatore nelle sequenze, dette pathname (es.:
HARD_DISCK/usr1/libro2). Nei moderni sistemi multi-utente il super-user
(administrator o root) può scavalcare ogni protezione
Per gestirli, occorre tenere traccia di dove i file siano memorizzati su disco,
dividendolo in:
• device directory, utilizzata per tenere traccia di quali file sono memorizzati
su disco tramite file descriptor (descrittore di file),
• e lo spazio di disco effettivamente usato per la loro memorizzazione.
Il processo con cui si sfrutta lo spazio nel miglior modo possibile prende il nome
di allocazione dei file, che può essere:
• contigua, se ogni file è trattato come unità indivisibile da memorizzare,
sebbene le dimensioni dei file varino nel tempo;
• sparsa, in cui i blocchi di un file sono memorizzati indipendentemente. Essa
può essere indexata (quando si mantiene nel descrittore del file la tabella
contenente gli indirizzi dei blocchi) o linkata, se nel descrittore del file si
memorizza solo l’indirizzo del primo blocco, e ognuno di questi contiene
l’indirizzo del successivo.
I dispositivi possono essere distinti in:
• a controllo di programma, in cui i dati in ingresso/uscita sono copiati
nella/prelevati dalla memoria temporanea privata del dispositivo (es.:
tastiera, video)
• I dispositivi in DMA (Direct Memory Access) sono invece in grado di leggere
e scrivere dati nella memoria centrale (es.: dischi di memoria secondaria).
Alla richiesta di input da parte di un processo, il sistema operativo manda un
comando al dispositivo per acquisire il dato. Il processo viene quindi bloccato e il
processore può dedicarsi ad altro, finché il dispositivo di input avverte il sistema
operativo che il dato è pronto. Tale meccanismo detto interrupt si basa quindi
sulla possibilità del processore, ad ogni ciclo di clock, di verificare se sono arrivati
segnali di interrupt e se sì, sospendere il processo in esecuzione per eseguire il
programma di gestione del dispositivo (driver del dispositivo). Grazie
all’approccio plug & play, gli attuali sistemi hanno al loro interno i driver per i più
comuni dispositivi la cui installazione diventa quindi più facile. Al contrario, in
caso si utilizzino dischi, per leggere un blocco la testina deve posizionarsi, fattore
che comporta 2 tempi di attesa:
• Di seek, il tempo per raggiungere la traccia desiderata,
• E di latency (latenza), impiegato affinché nella rotazione il settore
opportuno si trovi sotto la testina.
Si possono inoltre utilizzare politiche di scheduling speciali, come:
• la sector queueing. Nella coda associata a un settore vengono memorizzate
le richieste che riguardano i blocchi di quel settore.
• Le politiche SCAN prevedono inoltre che, mentre il disco gira, si selezioni
come prossima operazione quella che riguarda il prossimo settore da cui si
passa, e si cerchi di servire la richiesta che si trova sulla traccia più vicina a
quella in cui è posizionata la testina, in modo da spostarsi il meno possibile.
Il linguaggio di interazione fra utente e sistema può essere a interazione testuale
e grafica (in cui l’utente non deve ricordarsi i nomi dei comandi, selezionabili
all’interno del menu).
6. Reti di calcolatori: introduzione
La connessione di elaboratori diversi attraverso reti di comunicazione ha portato
all’avvento dell’informatica distribuita.
Una rete di elaboratori è un insieme di elaboratori collegati tra loro, ed è quindi
formata da nodi (elaboratori) ed archi di collegamento. Si utilizza un cavo su cui
inviare segnali (messaggi), la cui capacità di trasmissione prende il nome di
banda.
Affinché un computer possa collegarsi a una rete occorre
• l’apposita scheda per la gestione della comunicazione (la scheda di rete, o
scheda Ethernet);
• nel caso di collegamento attraverso linee telefoniche, il modem.
• Negli archi di rete molto lunghi si utilizzano dispositivi di ripetizione del
segnale detti repeater, che ritrasmettono il segnale in ingresso.
• Nelle reti geografiche si usano invece router e modem.
I dispositivi switch o hub hanno il compito di smistare i messaggi tra le varie
porte di connessione alla rete di cui sono dotati. Negli archi di rete molto lunghi si
utilizzano dispositivi di ripetizione del segnale detti repeater, che ritrasmettono il
segnale in ingresso. Nelle reti geografiche si usano invece router e modem.
La scelta della topologia di rete incide sui collegamenti fisici tra nodi. Il costo è
legato al numero e alla lunghezza delle connessioni, che devono essere sufficienti
per rendere la comunicazione veloce ed efficiente, tramite collegamenti diretti o
nodi intermedi. La comunicazione va inoltre distribuita equamente tra i diversi
archi, evitando zone a traffico troppo intenso, dette colli di bottiglia (bottleneck).
La rete deve inoltre essere tollerante ai guasti: la comunicazione deve cioè
essere possibile anche in presenza di malfunzionamenti, tramite una rete
ridondante, con più percorsi che collegano due nodi (topologia con collegamento
multi-punto, diversa dalla punto-punto: un collegamento per ogni coppia di nodi).
Cavi e nodi devono inoltre essere facilmente accessibili per permettere la
manutenzione. Distinguiamo quindi:
• la rete gerarchica si basa su un elaboratore principale su cui si mantengono
le informazioni di interesse comune, ed a cui sono collegate le sotto-reti
corrispondenti alle varie divisioni. Si segue quindi una struttura ad albero
ed i nodi che non hanno figli sono detti foglie. Tali reti sono adeguate nei
casi in cui vi siano frequenti comunicazioni solo figli-genitori e fratelli.
• Nelle reti lineari si ha un unico cavo detto dorsale, a cui sono collegati tutti i
nodi. Esse hanno costi limitati e facile manutenzione ma è facile creare colli
di bottiglia.
• Le reti ad anello collegano i nodi attraverso una rete circolare, costringendo
i messaggi ad attraversare nodi intermedi, la cui rottura interromperebbe la
rete.
• Le reti a stella sono costituite da un nodo centrale collegato a tutti gli altri.
Tutti i messaggi transitano quindi da esso, rendendo a volte il traffico
insostenibile o, in presenza di un guasto, impossibile.
Possiamo pensare ai nodi come a entità in grado di scambiarsi messaggi,
caratterizzati da un insieme di informazioni che costituiscono il corpo del
messaggio e comprendono il tipo di servizio che il mittente richiede al
destinatario e i dati coinvolti. Occorre quindi definire un protocollo di
comunicazione, ossia un insieme di regole che determinano le operazioni da
eseguire a ogni scambio di informazioni. Uno dei mo