Logged Virtual Memory

 

Back Home Up Next

Logged Virtual Memory

La memoria virtuale loggata LVM [4] fornisce un log delle attività di scrittura in uno o più spazi di memoria virtuale, e può essere visto come estensione del normale software di sistema per la memoria virtuale. Ovviamente il contesto di utilizzo è in tutte quelle applicazioni che richiedono rollback oppure una forte persistenza come ad esempio simulazioni in parallelo o databases OO mappati in memoria oppure un debugger.

1. LVM

Ogni log è una sequenza ordinata rispetto al tempo di record, ognuno dei quali rappresenta un accesso in scrittura, esso contiene un indice temporale (Timestamp), l’indirizzo dove è avvenuta la scrittura, il dato scritto e la sua lunghezza.

Tutti questo record sono scritti in maniera sequenziale in un proprio segmento di memoria, il quale può anche essere mappato nello spazio degli indirizzi, così che ogni applicazione può leggerlo (v. Figura).

 

 

2. Interfaccia per il programma applicativo

L’interfaccia per gli applicativi, in C++ è molto semplice.

Come esempio citiamo il codice che crea la struttura in figura.

Segment * seg_a = new StdSegment (size);

Region * reg_r = new StdRegion (seg_a);

LogSegment * ls = new LogSegment ( );

reg_r -> log (ls);

as = thisProcess ( ) -> addressSpace ( );

reg_r -> bind (as);

Con le seguenti funzioni:

StdSegment: crea un segmento di memoria.

StdRegion: crea una regione che è la mappatura di un segmento di memoria.

LogSegment: crea un segmento di log.

         

3. Utilizzo pratico

Oltre che per gli esempi citati sopra, la LVM è utilizzata in un paio di casi interessanti per la nostra discussione sui sistemi operativi.

La prima implementazione riguarda la RVM (Recoverable Virtual Memory) utilizzata nei sistemi ‘Camelot’ e ‘Coda’ per le transazioni.

L’introduzione della LVM porta ad una notevole semplificazione del recupero dei dati dopo una caduta del sistema. In pratica questo viene fatto dando ad ogni processo uno spazio di memoria virtuale con relativo log e non permettendo interferenze tra processi.

In pratica, per quanto riguarda tutto ciò che è nel mondo delle transazioni, l’introduzione della LVM porta ad una semplificazione ed ad un aumento delle prestazioni.

La seconda implementazione serve invece per un aumento della consistenza (in particolari sistemi) in caso di scritture da parte di diversi processi alla stesa area: infatti la LVM porta a trasmettere solo gli update, invece che l’intera pagina che è stata modificata.

Back Home Up Next