Кіріспе

Файл жүйесі

Yaffs (Yet Another Flash File System) – Чарльз Маннингтің Aleph One компаниясы үшін жасаған файл жүйесі. Yaffs1 осы файл жүйесінің алғашқы нұсқасы болды және 512 байттық бет өлшемімен (+ 16 байттық резервтік (OOB; Out Of Band) аймағы) сол кездегі қолданыстағы NAND чиптері үшін құрастырылған. Жұмыс 2002 жылы басталды және ол сол жылдың соңында алғаш рет жарияланды. Алғашқы жұмысты Toby Churchill Ltd және Brightstar Engineering компаниялары демеушілік етті. Бұл ескі чиптер әдетте әр бетке 2 немесе 3 жазу циклын жүргізуге мүмкіндік береді. YAFFS мұны пайдаланады: «ластанған» беттер белгілі бір резервтік аймақ байтына жазу арқылы таңбаланады. Жаңа NAND флэш-чиптерінде үлкен беттер бар, бастапқыда 2К беттер (+ 64 байт OOB), кейін 4К, жазу талаптары қатаңдатылған. Өшіру блогындағы (128 килобайт) әрбір бетті тізбектеп жазу керек, және әр бетті бір рет ғана жазуға болады. «Бір рет жазу ережесін» («бір рет жазу қасиетін») сақтауды қамтамасыз ететін сақтау жүйесін жобалаудың бірнеше артықшылығы бар. YAFFS2 осы жаңа чиптерге бейімделу үшін жасалған. Ол YAFFS1 көзіне негізделген, бірақ басты айырмашылығы – ішкі құрылымдар 512 байттық өлшемді қабылдауға міндетті емес, және әр жазылған бетке блок тізбегінің нөмірі қойылады. Осылайша «бір рет жазу» ережесін бұзбай, ескі беттерді логикалық түрде жаңартуға болады. Ол 2003 жылдың соңында жарық көрді. YAFFS – деректердің сақталуын жоғары басымдыққа қоятын сенімді журналдық файл жүйесі. YAFFS-тің қосымша мақсаты – жоғары өнімділік. YAFFS көбінесе басқа баламалардан артық өнімділік көрсетеді. Ол сондай-ақ портативті болып жасалған және Linux, WinCE, pSOS, RTEMS, eCos, ThreadX және әртүрлі мақсаттық операциялық жүйелерде қолданылған. «YAFFS/Direct» нұсқасы операциялық жүйесі жоқ, кіріктірілген операциялық жүйелер немесе жүктегіштерде қолданылады: оның негізгі файл жүйесі бірдей, бірақ жоғары және төменгі деңгейдегі кодқа және NAND флэш жабдығына қарапайым интерфейсі бар. YAFFS код базасы GPL және Aleph One компаниясынан қол жетімді өнім лицензиясы бойынша лицензияланған. Yaffs жоғары деңгейде әр бөлім бойынша құлыпталады, бұл кез келген уақытта тек бір жіптің жазуына мүмкіндік береді.

YAFFS1

YAFFS файлдық жүйені инициализациялау үшін флэш-жадты өшіруден басқа ерекше процедура жоқ. Жаман блок кездескенде, YAFFS блоктың қосалқы аймағының бесінші байтын белгілеу арқылы «ақылды медиа» схемасын қолданады. Осылайша белгіленген блоктар одан әрі үлестірілмейді. Файл деректерін жазу үшін YAFFS бастапқыда файл метадеректерін, мысалы, уақыт белгілерін, атауын, жолын және т.б. сипаттайтын толық бетті (YAFFS терминологиясындағы бөлік) жазады. Жаңа файлға бірегей нысан идентификаторы беріледі; файлдың әрбір дерек бөлігінде осы бірегей нысан идентификаторы қосалқы аймақта болады. YAFFS бұл бөліктердің физикалық орналасуының RAM-да ағаш құрылымын сақтайды. Блок жарамсыз болған кезде (файл өшірілгенде немесе файлдың бөліктері жаңартылғанда), YAFFS бөліктің қосалқы аймағындағы белгілі бір байтты «ластанған» деп белгілейді. Егер толық блок (32 бет) ластанған деп белгіленсе, YAFFS блокты өшіріп, орынды қайта алады. Файл жүйесінің бос орыны жетіспесе, YAFFS жақсы беттердің тобын жаңа блокқа біріктіреді. Содан кейін YAFFS әр бастапқы блоктан ластанған беттер пайдаланған орынды қайтарады. YAFFS жүйесі NAND флэш-жадысын орнатқанда, жарамды деректерді тексеру үшін әр блоктың қосалқы аймағын сканерлеу арқылы әр блокқа кіруі керек. Осы ақпаратты пайдаланып, ол жадтағы деректердің ағаш құрылымын қайта жасайды.

YAFFS2

YAFFS2 YAFFS1 тұжырымдамасына ұқсас және көптеген ортақ кодтарды бөліседі; YAFFS2 кодтық базасы артқа қарай үйлесімділік арқылы YAFFS1 дерек форматтарын қолдайды. Басты айырмашылық – YAFFS2 заманауи NAND флеш жадтың «бір рет жазу» талабын орындау үшін көп қиындықтардан өтуі керек. YAFFS2 жаңа жазылған әрбір блокты үнемі өсетін реттік нөмірмен белгілейді. Блоктардың тізбегін блок реттік нөмірі және блок ішіндегі блок офсеті арқылы анықтауға болады. Осылайша, YAFFS2 жадты сканерлегенде және бірдей ObjectID және ChunkNumber-лары бар бірнеше бөліктерді анықтағанда, ол ең үлкен реттік нөмірін таңдап, қайсын пайдалану керектігін шеше алады. Тиімділік үшін YAFFS2 қысқарту басқыштарын да енгізеді. Мысалы, файл кішірек өлшемге өзгертілгенде, YAFFS1 зардап шеккен барлық бөліктерді «ластанған» деп белгілейді. YAFFS2 «бір рет жазу» ережесіне байланысты мұны істей алмайды. Оның орнына YAFFS2 «қысқарту басқышын» жазады, ол осы нүктеге дейінгі белгілі бір беттердің жарамсыз екенін көрсетеді. Бұл YAFFS2 жүйе қайта жүктелгенде файлдық жүйенің соңғы күйін қалпына келтіруге мүмкіндік береді. YAFFS2 NAND флештің көбірек абстрактілі анықтамасын қолданады, бұл оны әртүрлі геометриясы, нашар блоктарды басқару ережелері және т.б. бар флеш жад түрлерімен пайдалануға мүмкіндік береді. Кейіннен YAFFS2 бақылау нүктелерін қолдауды қосты, ол әдеттегі орнату сканилеуін өткіріп, өте жылдам орнату уақытын қамтамасыз етеді. Өнімділік әртүрлі болуы мүмкін, бірақ 2 ГБ үшін 3 секундтық орнату уақыты туралы хабарламалар бар.