|
|
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), lindirizzo 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 Linterfaccia 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.
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. Lintroduzione 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, lintroduzione 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 lintera pagina che è stata modificata. |