ĂshtĂ« publikuar versioni i projektit LittleFS 2.10, i cili zhvillon njĂ« sistem tĂ« kompakt tĂ« skedarĂ«ve pĂ«r pajisje tĂ« integruara dhe mikro-kontrollorĂ«. Originari i kĂ«tij sistemi tĂ« skedarĂ«ve u krijua nga kompania ARM pĂ«r sistemin operativ Mbed OS, por mĂ« vonĂ« u ndan nĂ« njĂ« projekt tĂ« veçantĂ«. Kodi i FS Ă«shtĂ« shkruar nĂ« gjuhĂ«n C dhe shpĂ«rndahet nĂ«n licencĂ«n BSD. Implementimi referues i LittleFS vjen si njĂ« bibliotekĂ« nĂ« gjuhĂ«n C, mbi bazĂ«n e sĂ« cilĂ«s Ă«shtĂ« ndĂ«rtuar njĂ« modul FUSE dhe lidhje pĂ«r gjuhĂ« tĂ« ndryshme programimi.
Karakteristikat e LittleFS:
- Kërkesa të ulta për burime dhe mbështetje për funksionimin në kushte me madhësi të kufizuar të RAM-it. Implementimi i LittleFS përdor vetëm bufer të definuar në mënyrë statike (pa alokim dinamik të memories) dhe nuk përdor thirrje rekursive, gjë që siguron se sasia e memories operative dhe struktura shërbyese të LittleFS në mbajtës mbetet gjithmonë e qëndrueshme, pavarësisht se çfarë shkruhet në FS dhe madhësisë së depozitës.
- Mjetet për nivelimin e gësheve të mbajtësve Flash (wear leveling), që lejojnë minimizimin e ripërdorimit të blloqeve dhe shpërndarjen e barabartë të operacioneve të pastrimit të blloqeve në memories Flash, kontrolli i të cilës nuk ofron zgjidhje për këtë problem.
- QĂ«ndrueshmĂ«ri shumĂ« e lartĂ« ndaj dĂ«shtimeve â FS e konsideron ndalimin e rastĂ«sishĂ«m tĂ« funksionimit (ndalimi i energjisĂ«) si njĂ« situatĂ« normale dhe garanton qĂ« ruajtja nĂ« disk tĂ« jetĂ« nĂ« njĂ« gjendje tĂ« plotĂ« nĂ« çdo moment. PĂ«r tĂ« shmangur shkeljen e integritetit dhe humbjen e tĂ« dhĂ«nave, pĂ«rdoret mekanizmi copy-on-write (COW), i cili ruan ndryshimet nĂ« njĂ« vend tĂ« ri, nĂ« vend qĂ« tĂ« ripĂ«rshkruajĂ« informacionin.
- Ato janë operacione atomike, si fshirja dhe emërimi, edhe në rast se ndalet energjia gjatë ekzekutimit të tyre. Ndryshimet e skedareve shpërndahen në disk vetëm pas thirjes së sync ose close. Pasiguri të shkaktuara nga operacione që nuk mund të kryhen në mënyrë atomike u zgjidhen nga një trajtues i veçantë deorphan, i cili kalon nëpër të gjithë pemën e FS pas ngarkimit.
- Mbështetje për funksione të ngjashme me POSIX për punën me skedarë dhe katalogë.
Përmbajtja e skedarëve në LittleFS paraqitet me lista COW-CTZ, duke siguruar një ndërlikim O(1) për shtimin dhe O(nlogn) për leximin. Alokimi i blloqeve realizohet përmes skanimit të FS për blloqet e përdorura në një zonë me madhësi fiks, të ruajtur si një vektor bitësh. Për të lehtësuar skanimin, të gjithë katalogët janë pjesë e një liste të lidhur që përfshin të gjithë sistemin e skedarëve. Nëse gjatë shkrimit të një blloku përcaktohet një gabim, alokohet një bllok i ri dhe të dhënat transferohen në të.
Ndryshimet në versionin e ri të LittleFS:
- Kodi për përpunimin e rrugëve të skedarëve është riparuar, duke përafruar sjelljen e FS me sistemet POSIX dhe pritshmëritë e përdoruesve në situata të tilla si përfundimi i rrugës me slash, përpunimi i rrugëve bosh dhe navigimi përtej rrënjës së FS.
- Janë shtuar dy shembuj të rinj të pajisjeve bllok, ramcrc32bd dhe ramrsbd, të cilat implementojnë një mekanizëm korrekcioni të gabimeve, të përshtatshëm për LittleFS. Në formën e saj aktuale, në vetë FS LittleFS nuk ka mbështetje për përcaktimin dhe korrigjimin e gabimeve dhe këto operacione transferohen në nivelin e pajisjeve bllok.
- Në funksionin lfs_mkdir është shtuar mbështetje për slashet përfundimtarë, pra thirrja lfs_mkdir("a/") tani nuk çon në një gabim.
- Në funksionet lfs_stat dhe lfs_getattr tani kthehet një gabim kur përdoren slashet përfundimtarë, nëse rruga ekzistuese në FS nuk është një katalog.
- Përpjekja për të hapur një skedare me slashen përfundimtar në emër tani do të çojë në gabimin LFS_ERR_NOTDIR, nëse skedari nuk është një katalog në FS, LFS_ERR_ISDIR, nëse emri i referohet një katalogu në FS, dhe LFS_O_CREAT, nëse skedari nuk ekziston.
- Përpjekja për të hyrë përtej rrënjës së FS, për shembull, lfs_stat("/../a"), tani do të çojë në një gabim.
- Shënimi i një rruge bosh tani nuk është sinonim për të hyrë në katalogun rrënjësor, pra thirrja lfs_stat("") do të rezultojë në një gabim.
Burimi: opennet.ru
