JAFFY
Deweloperzy | Karola Manninga |
---|---|
Pełne imię i nazwisko | Jeszcze inny system plików Flash |
Inny | |
Obsługiwane systemy operacyjne | Android , Firefox OS , Linux , Windows CE , pSOS , RTEMS , eCos , ThreadX , LCOS |
Yaffs ( Jeszcze inny system plików Flash ) to system plików zaprojektowany i napisany przez Charlesa Manninga dla firmy Aleph One.
Yaffs1 był pierwszą wersją tego systemu plików i został zaprojektowany dla ówczesnych chipów NAND o rozmiarze strony 512 bajtów (+ 16 bajtów obszaru zapasowego (OOB; Out-Of-Band)). Prace rozpoczęły się w 2002 roku, a po raz pierwszy ukazał się rok później. Początkowa praca była sponsorowana przez Toby Churchill Ltd i Brightstar Engineering.
Te starsze chipy również generalnie pozwalają na 2 lub 3 cykle zapisu na stronę. YAFFS wykorzystuje to: brudne strony są oznaczane przez zapisywanie do określonego wolnego bajtu obszaru. Nowsze chipy flash NAND mają większe strony, pierwsze strony 2K (+ 64 bajty OOB), później 4K, z bardziej rygorystycznymi wymaganiami dotyczącymi zapisu. Każda strona w bloku kasowania (128 kilobajtów) musi być zapisana w kolejności sekwencyjnej, a każda strona musi być zapisana tylko raz. [ potrzebne źródło ]
Projektowanie systemu pamięci masowej, który wymusza „regułę zapisu raz” („właściwość zapisu raz”) ma kilka zalet.
YAFFS2 został zaprojektowany, aby pomieścić te nowsze chipy. Opierał się na kodzie źródłowym YAFFS1, z tą główną różnicą, że struktury wewnętrzne nie są ustalone, aby zakładać rozmiar 512 bajtów, a numer kolejny bloku jest umieszczany na każdej zapisanej stronie. W ten sposób starsze strony mogą być logicznie nadpisywane bez naruszania zasady „napisz raz”. Został wydany pod koniec 2003 roku.
YAFFS to solidny system plików o strukturze logów , dla którego integralność danych jest priorytetem. Drugim celem YAFFS jest wysoka wydajność. YAFFS zazwyczaj przewyższa większość alternatyw. Jest również przeznaczony do przenoszenia i był używany w systemach Linux , WinCE , pSOS , RTEMS , eCos , ThreadX oraz różne systemy operacyjne specjalnego przeznaczenia. Wariant „YAFFS/Direct” jest używany w sytuacjach, gdy nie ma systemu operacyjnego, wbudowanych systemów operacyjnych ani programów ładujących: ma ten sam podstawowy system plików, ale prostszy interfejs zarówno do kodu wyższego, jak i niższego poziomu oraz sprzętu flash NAND.
Baza kodu YAFFS jest licencjonowana zarówno na licencji GPL , jak i na podstawie licencji na produkt dostępnych w Aleph One.
YAFFS1
Nie ma specjalnej procedury inicjalizacji systemu plików YAFFS poza zwykłym wymazaniem pamięci flash. Kiedy napotkany zostanie uszkodzony blok, YAFFS postępuje zgodnie ze schematem smart media polegającym na oznaczaniu piątego bajtu obszaru wolnego bloku. Bloki oznaczone jako takie pozostają od tego momentu nieprzydzielone. [ wymagane wyjaśnienie ]
Aby zapisać dane pliku, YAFFS początkowo zapisuje całą stronę (fragment w terminologii YAFFS), która opisuje metadane pliku , takie jak znaczniki czasu , nazwa, ścieżka itp. Nowemu plikowi przypisywany jest unikalny numer identyfikacyjny obiektu; każdy fragment danych w pliku będzie zawierał ten unikalny identyfikator obiektu w obszarze zapasowym. YAFFS utrzymuje strukturę drzewa w pamięci RAM fizycznej lokalizacji tych kawałków. Gdy fragment nie jest już ważny (plik jest usuwany lub części pliku są nadpisywane), YAFFS oznacza określony bajt w obszarze zapasowym fragmentu jako „brudny”. Kiedy cały blok (32 strony) jest oznaczony jako brudny, YAFFS może go wymazać i odzyskać miejsce. Gdy wolnego miejsca w systemie plików jest mało, YAFFS konsoliduje grupę dobrych stron w nowy blok. Następnie YAFFS odzyskuje miejsce zajmowane przez brudne strony w każdym z oryginalnych bloków.
Gdy system YAFFS montuje urządzenie flash NAND , musi odwiedzić każdy blok, aby sprawdzić prawidłowe dane, skanując jego wolny obszar. Na podstawie tych informacji rekonstytuuje następnie rezydującą w pamięci drzewiastą strukturę danych.
YAFFS2
YAFFS2 jest podobny w koncepcji do YAFFS1 i ma w dużej mierze ten sam kod; baza kodu YAFFS2 obsługuje formaty danych YAFFS1 dzięki kompatybilności wstecznej. Główna różnica polega na tym, że YAFFS2 musi przeskoczyć przez znaczne przeszkody, aby spełnić wymóg „jednokrotnego zapisu” nowoczesnej pamięci flash NAND.
YAFFS2 oznacza każdy nowo zapisany blok numerem sekwencyjnym, który rośnie monotonicznie . Kolejność porcji można wywnioskować z numeru sekwencji bloku i przesunięcia porcji w bloku. W ten sposób, gdy YAFFS2 skanuje pamięć flash i wykrywa wiele fragmentów, które mają identyczne identyfikatory obiektów i numery fragmentów, może wybrać, którego użyć, biorąc największy numer sekwencyjny. Ze względu na wydajność YAFFS2 wprowadza również koncepcję zmniejszających się nagłówków. Na przykład, gdy rozmiar pliku zostanie zmniejszony, YAFFS1 oznaczy wszystkie dotknięte fragmenty jako brudne - YAFFS2 nie może tego zrobić ze względu na regułę „napisz raz”. Zamiast tego YAFFS2 zapisuje „zmniejszony nagłówek”, który wskazuje, że pewna liczba stron przed tym punktem jest nieprawidłowa. Pozwala to YAFFS2 zrekonstruować ostateczny stan systemu plików po ponownym uruchomieniu systemu.
YAFFS2 wykorzystuje bardziej abstrakcyjną definicję pamięci flash NAND, umożliwiając jej użycie z szerszą gamą części flash o różnych geometriach, zasadach obsługi uszkodzonych bloków itp.
YAFFS2 później dodał obsługę punktów kontrolnych , która omija normalne skanowanie montowania, umożliwiając bardzo szybkie czasy montowania. Wydajność będzie się różnić, ale zgłoszono czasy montowania wynoszące 3 sekundy dla 2 GB . [ potrzebne źródło ]
Zobacz też
- Lista systemów plików
- JFFS
- JFFS2
- UBIFS
- LogFS
- NILFS , nowa implementacja systemu plików o strukturze logów
- Otwórz grupę roboczą interfejsu NAND Flash
Linki zewnętrzne
- Oficjalna strona internetowa
- Przedstawiamy YAFFS, pierwszy system plików flash specyficzny dla NAND
- Unyaffs : Prosty program do rozpakowywania obrazów YAFFS2.
- yaffs2utils : Narzędzia do tworzenia/wyodrębniania obrazu YAFFS2 w systemie Linux.