Gestione della memoria
•
•
•
•
•
•
Nella fase iniziale dello sviluppo di UNIX, gli schemi di gestione della memoria
erano vincolati dalle esigue risorse di memoria della famiglia di macchine PDP.
Le versioni di UNIX precedenti la 3BSD usavano lo swapping soltanto per
gestire la contesa della memoria fra processi: se la contesa della memoria
faceva scadere le prestazioni, i processi venivano scaricati sulla memoria di
massa fino a che si liberasse sufficiente memoria centrale.
L’allocazione della memoria centrale e dello spazio di swapping veniva
effettuata con il criterio first–fit.
I segmenti di testo condivisibile non devono essere sottoposti a swap–out: in
tal modo si ottiene un minor traffico fra le memorie e si riduce la quantità di
memoria principale necessaria per processi multipli che utilizzano lo stesso
segmento di testo.
Lo swapper decide quali processi portare dentro e fuori la/dalla memoria
centrale in base a tempo di attesa, tempo di utilizzo della memoria, dimensione,
etc.
Nella versione 4.3BSD lo spazio di swapping è allocato in frammenti che sono
multipli di una potenza di 2 e variano da una dimensione minima, ad esempio 32
pagine, fino ad un massimo, dipendente dalla dimensione della partiziopne di
disco dedicata allo swap.
Operating System Concepts
21.1
Silberschatz and Galvin1999
Paginazione
•
•
•
•
I sistemi Berkeley UNIX dipendono dalla paginazione soprattutto per
la gestione della conflittualità della memoria e solo secondariamente
dallo swapping.
Paginazione su richiesta – Quando un processo richiede una pagina
che non è in memoria, si verifica un page–fault al kernel, viene
allocato un frame in memoria centrale e la pagina richiesta, che si
trova sul disco, viene copiata nel frame.
Un processo pagedaemon impiega un algoritmo di rimpiazzamento
delle pagine di tipo seconda–chance per mantenere sufficiente
spazio libero per la gestione dei processi.
Se lo scheduler decide che il sistema di paginazione è sovraccarico,
interi processi vengono sottoposti a swap–out finché il sovraccarico
non si esaurisce.
Operating System Concepts
21.2
Silberschatz and Galvin1999
File system, blocchi e frammenti – 1
•
•
•
•
Il file system UNIX supporta fondamentalmente due tipi di entità: i file e le
directory.
Le directory sono file con un formato speciale, pertanto la rappresentazione
di file è il concetto fondamentale per l’implementazione del file system di
UNIX.
Gran partre del file system è costituita da blocchi di dati contenenti qualsiasi
cosa gli utenti abbiano inserito nei loro file.
UNIX 4.2BSD utilizza due dimensioni dei blocchi per i file che non hanno
blocchi indiretti:
– Tutti i blocchi di un file sono grandi (ad es. 8K), eccetto l’ultimo.
– L’ultimo blocco è un multiplo opportuno della dimensione di un
frammento più piccolo (i.e., 1024), necessario per riempire il file.
– Pertanto un file di 18000 byte occuperà due blocchi da 8K ed un
frammento da 2K (che non sarà riempito completamente).
Operating System Concepts
21.3
Silberschatz and Galvin1999
File system, blocchi e frammenti – 2
•
•
Le dimensioni di blocchi e frammenti sono impostate al
momento della creazione del file system, in base all’utilizzo a
cui è destinato il file system stesso:
– Se sono previsti molti file piccoli la dimensione dei
frammenti deve essere piccola;
– Se sono previsti trasferimenti frequenti di grossi file, la
dimensione dei blocchi deve essere grande.
Il massimo rapporto blocco/frammento è di 8 : 1; la dimensione
minima del blocco è 4K (rapporti tipici sono 4096 : 512 e
8192 : 1024).
Operating System Concepts
21.4
Silberschatz and Galvin1999
Inode
•
Un file è rappresentato da un inode — un record che contiene le
informazioni relative al file.
•
L’inode contiene anche 15 puntatori ai blocchi del disco con il
contenuto di dati del file.
– I primi 12 puntatori puntano ai blocchi diretti.
– I successivi 3 ai blocchi indiretti:
 Il primo puntatore ad un blocco indiretto è l’indirizzo di un
blocco a singolo livello di indirezione — contiene indirizzi di
blocchi che contengono dati.
 Il secondo puntatore ad un blocco è l’indirizzo di un blocco a
doppio livello di indirezione — contiene indirizzi di blocchi che
contengono puntatori agli effettivi blocchi di dati.
 Il puntatore al blocco a triplo livello di indirezione è inutilizzato
nel 4.2BSD.
Operating System Concepts
21.5
Silberschatz and Galvin1999
Directory
•
•
Il flag di tipo dell’inode distingue fra file semplici e directory.
•
L’utente fa riferimento a un file per mezzo di un path–name, mentre il file
system utilizza l’inode come propria definizione del file. Quindi, il kernel
deve mappare il path–name fornito dall’utente su un inode e, a questo
scopo si utilizzano le directory:
– Si stabilisce la directory di partenza; se il primo carattere è “/” la
directory di partenza è la root, altrimenti è la directory corrente del
processo in corso.
– La ricerca continua fino a scandire tutto il path–name e reperire il
file, del quale si restituisce l’inode.
– Viene allocata una struttura di file che punta all’inode.
•
Gli elementi delle directory hanno lunghezza variabile: ciascun elemento
contiene, nell’ordine, la lunghezza dell’elemento, il nome del file, e il
numero di inode.
Nel 4.3BSD le prestazioni del file system sono state migliorate, tramite
l’utilizzo di una cache di nomi di directory atta a mantenere le traduzioni
directory–inode più recenti.
Operating System Concepts
21.6
Silberschatz and Galvin1999
Associazione descrittore di file–inode
•
•
•
•
•
Le system call che fanno riferimento a file aperti indicano il file
passando come argomento un descrittore di file.
Il descrittore di file viene utilizzato dal kernel come indice alla
tabella dei file aperti per il processo in corso.
Ogni elemento della tabella contiene un puntatore a una
struttura di file.
A sua volta questa struttura di file punta sull’inode.
La tabella dei file aperti ha una lunghezza fissa che può essere
impostata soltanto nella fase di boot, quindi il numero di file
aperti simultaneamente nel sistema ha un limite fissato.
Operating System Concepts
21.7
Silberschatz and Galvin1999
Blocchi di controllo del file system
Operating System Concepts
21.8
Silberschatz and Galvin1999
Strutture dei dischi
•
•
•
•
La visione dell’utente di un unico file system logico può essere
fisicamente realizzata da più file system, situati su dispositivi fisici
distinti.
La partizione di un unico dispositivo fisico in più file system presenta
numerosi vantaggi:
– File system diversi possono supportare un diverso utilizzo.
– Aumento dell’affidabilità.
– L’efficienza può essere migliorata variando i parametri del file
system.
– Si evita che un programma utilizzi tutto lo spazio disponibile.
– Si velocizza la ricerca ed il ripristino su/da nastri di backup.
Il file system root è sempre disponibile su disco.
Altri file system possono essere montati — cioè integrati nella gerarchia
di directory del root file system.
Operating System Concepts
21.9
Silberschatz and Galvin1999
Associazione di un file system logico ai dispositivi fisici
Operating System Concepts
21.10
Silberschatz and Galvin1999
Implementazioni
•
•
•
•
•
L’interfaccia dell’utente con il file system è semplice e ben definita
e tale da permettere la modifica dello stesso file system senza
influire in modo significativo sull’utente.
Per la Versione 7, la dimensione degli inode è raddoppiata, le
dimensioni massime dei file e dei file system sono aumentate e
sono cambiati i dettagli di gestione della lista dei blocchi liberi e
delle informazioni del superblock.
Nel 4.0BSD, la dimesione dei blocchi usati nel file system è
aumentata da 512 a 1024 byte — maggiore frammentazione
interna, ma raddoppia il throughput.
4.2BSD ha aggiunto il Berkeley Fast File System, che aumenta le
prestazioni e implementa nuove chiamate di sistema per la
gestione delle directory.
Il Fast File System si trova in quasi tutte le implementazioni UNIX.
Operating System Concepts
21.11
Silberschatz and Galvin1999
Politiche di configurazione e di allocazione
•
•
Il kernel impiega una coppia <logical device number, inode
number> per identificare un file.
– Il numero di dispositivo logico definisce il file system da
considerare.
– Gli inode nel file system sono numerati in sequenza.
4.3BSD introduce il gruppo di cilindri — permette la
localizzazione dei blocchi di un file.
– Ciascun gruppo di cilindri occupa uno o più cilindri
consecutivi del disco, per cui gli accessi al disco
all’interno del gruppo di cilindri richiede un movimento
minimo della testina.
– Ogni gruppo di cilindri ha un superblock, un blocco di
cilindri, un array di inode e alcuni blocchi di dati.
Operating System Concepts
21.12
Silberschatz and Galvin1999
Gruppo di cilindri del 4.3BSD
Operating System Concepts
21.13
Silberschatz and Galvin1999
Il sistema di I/O
•
•
•
Il sistema di I/O nasconde le caratteristiche dei dispositivi al
“cuore” del kernel.
Consiste di un sistema di buffer cache, di codice generale per
driver di dispositivi e di driver per specifici dispositivi hardware.
Solo i driver di dispositivo conoscono le caratteristiche degli
specifici dispositivi hardware.
Operating System Concepts
21.14
Silberschatz and Galvin1999
Struttura di I/O del kernel del 4.3BSD
Operating System Concepts
21.15
Silberschatz and Galvin1999
Block Buffer Cache — 1
•
•
•
E` formata da un certo numero di buffer header, ciascuno dei
quali può puntare ad una parte di memoria fisica, nonché ad un
numero di dispositivo e un numero di blocco sul dispositivo.
I buffer header per i blocchi non attualmente in uso sono
contenuti in alcune liste concatenate:
– Buffer utilizzati recentemente, concatenati in ordine LRU
(LRU list).
– Buffer utilizzati non recentemente o senza contenuti validi
(AGE list).
– Buffer vuoti senza memoria fisica associata.
Quando un blocco viene richiesto da un dispositivo (lettura),
viene effettuata una ricerca nella cache. Se il blocco è ivi
residente, non si verifica nessun I/O. Se, invece, il blocco non
viene trovato, viene scelto un buffer dalla lista AGE o dalla lista
LRU, se AGE è vuota.
Operating System Concepts
21.16
Silberschatz and Galvin1999
Block Buffer Cache — 2
•
•
La dimensione della buffer cache può influire considerevolmente
sulle prestazioni di un sistema, poiché se la buffer cache è
sufficientemente grande la percentuale di cache hit può essere
elevata, ed il numero di trasferimenti di I/O basso.
Quando i dati vengono scritti su un file su disco, vengono sottoposti
a buffering nella cache ed il driver del disco ordina la sua coda di
output rispetto agli indirizzi del disco — le due azioni combinate
permettono al driver del disco di minimizzare il tempo di
posizionamento della testina e di scrivere i dati in momenti
ottimizzati rispetto alla rotazione del disco.
Operating System Concepts
21.17
Silberschatz and Galvin1999
Interfacce per l’accesso diretto ai dispositivi
•
•
•
•
Quasi tutti i dispositivi a blocchi hanno un’interfaccia a caratteri,
o raw device interface — a differenza dell’interfaccia a blocchi,
la block buffer cache viene bypassata.
Ogni driver di disco contiene una coda di trasferimenti pendenti.
Ciascun record della coda specifica...
– se si tratta di un’operazione di lettura o scrittura;
– un indirizzo di memoria centrale per il trasferimento;
– un indirizzo di dispositivo per il trasferimento;
– una dimensione di trasferimento.
L’operazione di mappatura delle informazioni da un blocco di
buffer su quanto richiesto per questa coda è molto semplice.
Operating System Concepts
21.18
Silberschatz and Galvin1999
C–List
•
•
•
•
I driver dei terminali impiegano un sistema di buffering dei caratteri,
che implica il mantenimento di piccoli blocchi di caratteri (es. 28
byte) in liste concatenate.
Una chiamata di sistema write su un terminale accoda i caratteri su
una lista per il dispositivo. Viene avviato un trasferimento iniziale ed
una serie di interrupt guida l’uscita dei caratteri dalla coda e gli
ulteriori trasferimenti.
Anche l’input è controllato da interrupt.
E` anche possibile fare in modo che il driver del dispositivo bypassi
la coda e restituisca i caratteri direttamente dalla raw queue —
raw mode (utilizzato da editor a schermo ed altri programmi che
necessitano una reazione immediata ad ogni pressione di tasto).
Operating System Concepts
21.19
Silberschatz and Galvin1999
Comunicazione tra processi
•
•
•
•
La maggior parte dei sistemi UNIX non permette la condivisione della
memoria in quanto l’hardware nativo PDP-11 non la incoraggiava.
La pipe è il meccanismo IPC più caratteristico di UNIX.
– Garantisce un flusso unidirezionale affidabile di byte tra due
processi.
– Un vantaggio dato dalla piccola dimensione delle pipe (es. 4096
byte) consiste nel fatto che i dati delle pipe vengono raramente
scritti effettivamente su disco; generalmente vengono conservati
in memoria dalla normale block buffer cache.
Nel 4.3BSD, le pipe sono implementate come un caso speciale del
meccanismo delle socket, il quale non fornisce un’interfaccia
generale solo a funzioni tipo pipe, che sono locali su una macchina,
ma anche a funzioni di rete.
Il meccanismo delle socket può essere utilizzato da processi non
correlati.
Operating System Concepts
21.20
Silberschatz and Galvin1999
Socket
•
•
•
•
Una socket è un endpoint di comunicazione.
Ad una socket è connesso un indirizzo, la cui natura dipende
dal dominio di comunicazione della socket.
Una caratteristica fondamentale del dominio di comunicazione
è che i processi all’interno del dominio comunicano fra loro
utilizzando lo stesso formato di indirizzo.
Una singola socket può comunicare solo in un dominio — i tre
domini che sono attualmente implementati nel sistema 4.3BSD
sono:
– il dominio UNIX (AF_UNIX);
– il dominio Internet (AF_INET);
– il dominio XEROX Network Service (AF_NS).
Operating System Concepts
21.21
Silberschatz and Galvin1999
Tipi di socket
•
Stream socket – forniscono flussi di dati in sequenza, duplex e
affidabili. Nel dominio Internet, questo tipo è supportato dal protocollo
TCP. Nel dominio UNIX, le pipe sono implementate come una coppia
di stream socket in comunicazione.
•
Socket per pacchetti in sequenza – forniscono flussi di dati come
quelli delle stream socket, con la differenza che esistono limiti di record.
Utilizzate nel protocollo XEROX AF_NS.
•
Datagram socket – trasferiscono messaggi di dimensione variabile in
ogni direzione. Supportate nel dominio Internet dal protocollo UDP.
•
Socket per invio affidabile di messaggi – trasferiscono messaggi
garantendone l’arrivo. Attualmente non supportate.
•
Raw socket – permettono ai processi l’accesso diretto ai protocolli che
supportano gli altri tipi di socket; e.g., nel dominio Internet, è possibile
raggiungere TCP, IP sotto TCP, o anche un protocollo Ethernet sotto IP.
Utili per lo sviluppo di nuovi protocolli.
Operating System Concepts
21.22
Silberschatz and Galvin1999
Chiamate di sistema per la funzione socket — 1
•
•
•
•
La system call socket crea una socket; prende come argomenti di
ingresso le specifiche del dominio di comunicazione, il tipo di socket
ed il protocollo da utilizzare e restituisce un intero (piccolo), il socket
descriptor.
Un nome viene associato ad una socket attraverso la system call
bind.
La system call connect viene utilizzata per inizializzare una
connessione.
Un processo server utilizza socket per creare una socket e bind
per associare l’indirizzo del suo servizio a quella socket.
– Utilizza listen per dire al kernel che è pronto ad accettare
connessioni dai client.
– Utilizza accept per accettare le singole connessioni.
– Utilizza fork per produrre un nuovo processo per il servizio di
un client, mentre il processo server originale continua ad
essere in attesa di ulteriori connessioni.
Operating System Concepts
21.23
Silberschatz and Galvin1999
Chiamate di sistema per la funzione socket — 2
•
•
Il modo più semplice per terminare una connessione e
distruggere la socket associata prevede l’utilizzo della system
call close sul suo descrittore di socket.
La system call select può essere utilizzata per esaminare la
possibilità di trasferimento di dati su più descrittori di file e/o
descrittori di socket.
Operating System Concepts
21.24
Silberschatz and Galvin1999
Supporto di rete
•
•
•
•
•
Il supporto di rete è una delle caratteristiche più importanti
introdotte nel sistema 4.3BSD.
La funzione socket garantisce la comunicazione fra processi,
eventualmente residenti su macchine diverse.
Quasi tutti i sistemi UNIX attuali supportano UUCP.
Il sistema 4.3BSD supporta i protocolli Internet DARPA UDP,
TCP, IP, e ICMP su una vasta gamma di interfacce Ethernet,
token–ring e ARPANET.
L’implementazione di rete del 4.3BSD, e in un certo senso
anche la funzione socket, sono principalmente orientate verso
l’ARPANET Reference Model (ARM).
Operating System Concepts
21.25
Silberschatz and Galvin1999
Modelli di riferimento di reti e loro stratificazione
Operating System Concepts
21.26
Silberschatz and Galvin1999
Scarica

ch21.2