Flashfilsystem
Flashfilsystem
Ja eller rättare sagt allmänt om hur man skall lagra på flash för att minimera slitage mm. Jag har en mängd data som skall lagras i en flash i en mikrokontrollerapplikation. Just nu så vet jag inte säkert om det blir en diskret flashminneskrets eller typ ett SD-kort. En del data är långvarig av typ "intern databas", andra är mer kortvariga t.ex loggdata som sedan skickas vidare.
Det finns ju speciella flashfilsystem avsedda att minimera slitage. Hur fungerar dessa? Vilka tekniker används?
Gärna några tips på bra länkar där sådana tekniker är beskrivna.
Det finns ju speciella flashfilsystem avsedda att minimera slitage. Hur fungerar dessa? Vilka tekniker används?
Gärna några tips på bra länkar där sådana tekniker är beskrivna.
Det här skrev jag precis till ett dokument som jag ska lämna ut till mina gymnasieelever som läser kursen Operativsystem (DTR1205). Det är skrivet mest som en parentes efter att ha gått igenom FAT (och förhoppningsvis något i-nodebaserat filsystem). Ursäkta att det bara blir en copy paste.
------
När man vill använda flash-baserade lagringsmedium bör man vara medveten om de något speciella förutsättningar som flashminnen har.
* För det första måste man i ett flashminne radera ett block innan man kan skriva till det igen. Detta tar betydligt längre tid än att skriva och därför bör man göra det när inget annat behöver göras.
* Den slumpvisa åtkomsttiden är inget problem men filsystem för hårddiskar är designade för att undvika sökning. Varför lösa ett problem som inte finns?
* Ett block i ett flashminne klarar ett begränsat antal skrivningar. Man bör därför har något som kallas för \emph{wear levelling} som går ut på att man försöker sprida skrivningarna mellan de olika blocken så mycket som möjligt.
Två populära filsystem för flashminnen är JFFS2 och YAFFS men snart även LogFS. Värt att nämna kan också vara att det i de flash-diskar som säljs i servrar och laptops har inbyggd elektronik för wear levelling och det är därför inte så viktigt vilket filsystem man använder. I inbäddade system och vissa netbooks är det däremot av stort intresse vilket filsystem som används.
------
När man vill använda flash-baserade lagringsmedium bör man vara medveten om de något speciella förutsättningar som flashminnen har.
* För det första måste man i ett flashminne radera ett block innan man kan skriva till det igen. Detta tar betydligt längre tid än att skriva och därför bör man göra det när inget annat behöver göras.
* Den slumpvisa åtkomsttiden är inget problem men filsystem för hårddiskar är designade för att undvika sökning. Varför lösa ett problem som inte finns?
* Ett block i ett flashminne klarar ett begränsat antal skrivningar. Man bör därför har något som kallas för \emph{wear levelling} som går ut på att man försöker sprida skrivningarna mellan de olika blocken så mycket som möjligt.
Två populära filsystem för flashminnen är JFFS2 och YAFFS men snart även LogFS. Värt att nämna kan också vara att det i de flash-diskar som säljs i servrar och laptops har inbyggd elektronik för wear levelling och det är därför inte så viktigt vilket filsystem man använder. I inbäddade system och vissa netbooks är det däremot av stort intresse vilket filsystem som används.
Inte i alla flashminnen. Möjligen i alla flashdiskar. Det finns flashminnen där man skriver till det som ett EPROM. D.v.s alla bitar är 1 vid raderat läge. Sedan går det att skriva valfria bitar till 0. Först när man vill ha någon bit till 0 igen så måste man göra en radering.Rohan skrev:* För det första måste man i ett flashminne radera ett block innan man kan skriva till det igen.
Edit: Kanske en semantisk skillnad. Eller inte helt. Lägger man upp bitmönster för t.ex använda sektorer eller liknande, så är det absolut användbart att kunna nolla valfria bitar utan mellanstående radering. Sedan är ju också frågan vad som egentligen sliter. Radering eller skrivning?
