Vedvarende minne

Innen informatikk er et vedvarende minne en hvilken som helst metode eller apparat for effektiv lagring av datastrukturer slik at de fortsatt kan nås ved hjelp av minneinstruksjoner eller minne-API-er selv etter at prosessen som opprettet eller sist endret dem er avsluttet.

Sammenlignet med ikke-flyktig minne 
Bedvarende minne må ikke (fysisk og logisk) forveksles med ikke-flyktig tilfeldig tilgangsminne (NVRAM). Hvorvidt et minne er vedvarende er nærmere knyttet til begrepet bestandighet som beror på om programtilstander eksisterer utenfor feilsonen til prosessen som skapte den.

 En prosess er her definert som et program under utførelse
 Feilsonen til en prosess er delmengden av programtilstanden som kan bli korrupt på grunn av at prosessen fortsetter å utføres etter å ha pådratt seg en feil, eksempelvis på grunn av en upålitelig komponent brukt i datamaskinen som kjører programmet

Effektiv, minnelignende tilgang er den definerende egenskapen til vedvarende minne. Det kan oppnås ved hjelp av mikroprosessor-minneinstruksjoner, som for eksempel lasting og lagring. Det kan også oppnås ved hjelp av API-er som implementerer ekstern direkte minnetilgang (remote direct memory access, RDMA), som for eksempel RDMA-lesing og RDMA-skriving. Andre metoder med lav latens som tillater tilgang til data på byte-nivå kan også karakteriseres som vedarende  minne.

Kapabiliteter for vedvarende minne strekker seg utover ikke-volatilitet for lagrede biter. For eksempel kan tap av viktige metadata, som for eksempel sidetabelloppføringer eller andre konstruksjoner som oversetter virtuelle adresser til fysiske adresser, gjøre at ikke-volatile biter også er ikke-varige. I denne forbindelse ligner vedvarende minne mer på abstrakte former for datalagring, slik som filsystemer. 

Faktisk implementerer nesten alle eksisterende varige minneteknologier minst et grunnleggende filsystem som kan brukes til å assosiere navn eller identifikatorer med lagrede utvidelser, og gir som et minimum filsystemmetoder som kan brukes for å navngi og allokere slike utvidelser.

Problemet med lesing av ikke-vedvarende skriving 
Lesing av ikke-vedvarende skriving (read-of-non-persistent-write problem) er et problem for blokkeringsfrie programmer som jobber med vedvarende minne. Ettersom sammenlign-og-bytt (compare-and-swap, CAS) -operasjoner ikke vedvarer de skrevne verdiene til vedvarende minne kan de modifiserte dataene synliggjøres av hurtigminne-koherensprotokollen til en samtidig observatør før de modifiserte dataene kan observeres av en krasjobservatør i det varige minnet. Dersom det oppstår strømbrudd rett etter at skrivingen er synliggjort, men ikke er gjort vedvarende ennå, så kan problemet med «lesing av ikke-vedvarende skriving» oppstå, altså at en datavariabel som er modifisert av en sammenlign-og-bytt-operasjon kan synliggjøres for en samtidig observatør før en krasjobservatør, hvilket forårsaker potensielle uoverensstemmelser etter krasjet.

For å illustrere problemet kan man ta utgangspunkt i en enkeltlenket blokkeringsfri liste. Produsenttråden thread A setter inn en node etter hodenoden head, next-pekeren til hodenoden blir atomisk byttet (CAS) til å peke til den nye node A, men denne CAS-operasjonen blir ikke gjort varig. Deretter settes en annen node inn av produsenttråden thread B etter node A, ettersom en CAS for node A allerede er synlig for alle de samtidige trådene. CAS bytter atomisk next-pekeren til node A slik at den peker til node B, og denne CAS-en blir gjort varig. Hvis et strømbrudd skjer på følgende tidspunkt vil applikasjonen som bruker den lenkede listen være i en inkonsistent tilstand, hvor både node A og node B er gått tapt, ettersom next-pekeren fra head-noden til node A ikke har blitt gjort varig. Siden node B har blitt publisert, men ikke kan aksesseres etter omstart, samt at andre data kan kan blitt gjort vedvarende som blir aksessert gjennom eller er avhengige av node B, så vil alle påfølgende aksesseringer til slik data ikke være mulig, og medfører tap av data.

Lesing av ikke-vedvarende skriving er ikke begrenset til blokkeringsfrie koblede lister, men finnes også i alle blokkeringsfrie datastrukturer hvor det kan eksistere en forskjell mellom samtidig synlighet og vedvarende synlighet. For eksempel kan et lignende problem oppstå med varige sirkulære buffer.

Se også 
 Vedvarende data, informasjon som sjelden aksessers og som sannsynligvis ikke vil bli endret
 Vedvarende datastruktur, en datastruktur som alltid bevarer den forrige versjonen av seg selv når den endres (effektivt uforanderlig)

Referanser 

Filsystemer