Sida 1 av 1

Flashfilsystem

Postat: 31 oktober 2008, 13:17:05
av vfr
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.

Postat: 31 oktober 2008, 13:43:28
av speakman
De vanligaste för inbäddade linuxsystem är väl jffs2 nu och LogFS snart. Osäker på hur mycket MTD står för den flashsäkra hanteringen (hoppa runt på chippet istället för att skriva om samma område gång på gång t.ex.).

Det borde gå att få ur lite erfarenheter genom att kolla på någon av dessa.

Postat: 4 november 2008, 15:02:10
av vfr
Tack, ska kolla lite mer på det. Att hoppa runt är ju en teknik för att minimera slitaget. Jag hade gärna sett några länkar där denna och andra tekniker var lite mer beskrivna.

Postat: 4 november 2008, 15:19:42
av Rohan
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.

Postat: 4 november 2008, 15:56:20
av Henrik
NAND- eller NOR-flash? Vilken uC? UBIFS är ytterliggare en ny variant värd att titta närmare på.

Rohan: Du kanske borde nämna att t ex SSD har inbyggd controller vilken sköter wear-leveling transparent mot användaren.

Postat: 4 november 2008, 16:05:02
av sodjan
Henrik> Rohan: Du kanske borde nämna att t ex SSD har inbyggd controller vilken sköter wear-leveling...

Det gjorde han väl !?

Rohan> att det i de flash-diskar som säljs i servrar och laptops har inbyggd elektronik för wear levelling...

Det är dessutom inte alla "SSD" som har det...

Postat: 4 november 2008, 16:28:01
av vfr
Rohan skrev:* För det första måste man i ett flashminne radera ett block innan man kan skriva till det igen.
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.

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?

Postat: 4 november 2008, 17:12:00
av sodjan
Rent teoretiskt har du rätt, men jag tror att det var
underförstått att man inte vet i förväg vad som ska skrivas
(eller vad som redan är skrivet). Och då lär man behöva radera...