ĂshtĂ« publikuar versioni i projektit LittleFS 2.10, qĂ« zhvillon njĂ« sistem skedarĂ«sh kompakt pĂ«r pajisje tĂ« integruara dhe mikrokontrollues. Fillimisht, sistemi i skedarĂ«ve u krijua nga ARM pĂ«r sistemin operativ Mbed OS, por mĂ« pas u veçua si projekt mĂ« vete. Kodi i sistemit tĂ« skedarĂ«ve Ă«shtĂ« shkruar nĂ« gjuhĂ«n C dhe shpĂ«rndahet nĂ«n licencĂ«n BSD. Implementimi referencĂ« i LittleFS ofrohet si bibliotekĂ« C, mbi bazĂ«n e sĂ« cilĂ«s janĂ« krijuar njĂ« modul FUSE dhe lidhje pĂ«r gjuhĂ« tĂ« ndryshme programimi.
Veçoritë e LittleFS:
- Kërkesa të ulëta për burime dhe mbështetje për funksionim në kushte me RAM të kufizuar. Në implementimin e LittleFS përdoren vetëm bufferë të përcaktuar në mënyrë statike (pa alokim dinamik të memories) dhe nuk përdoren thirrje rekursive, ndaj madhësia e memories operative të përdorur dhe e strukturave ndihmëse të LittleFS në ruajtës mbetet gjithmonë konstante, pavarësisht se çfarë shkruhet në sistemin e skedarëve dhe sa i madh është ruajtësi.
- Mekanizma për barazimin e konsumimit të mediave Flash (wear leveling), që mundësojnë minimizimin e ripërdorimit të blloqeve dhe shpërndarjen e njëtrajtshme të operacioneve të pastrimit të blloqeve në memorien Flash, kontrolluesi i së cilës nuk e ofron këtë funksion.
- QĂ«ndrueshmĂ«ri shumĂ« e lartĂ« ndaj dĂ«shtimeve â sistemi i skedarĂ«ve e trajton ndĂ«rprerjen e papritur tĂ« punĂ«s (ndalimin pĂ«r shkak tĂ« shkĂ«putjes sĂ« energjisĂ«) si situatĂ« normale dhe garanton qĂ« ruajtja nĂ« disk tĂ« mbetet nĂ« gjendje tĂ« plotĂ« e tĂ« qĂ«ndrueshme nĂ« çdo moment. PĂ«r tĂ« shmangur cenimin e integritetit dhe humbjen e tĂ« dhĂ«nave pĂ«rdoret mekanizmi copy-on-write (COW), ku ndryshimet nuk e mbishkruajnĂ« informacionin ekzistues, por ruhen nĂ« njĂ« vend tĂ« ri.
- Atomicitet i ekzekutimit të operacioneve, si fshirja dhe riemërtimi, edhe në rast të ndërprerjes së energjisë gjatë kryerjes së tyre. Ndryshimet në skedar shkruhen në disk vetëm pas thirrjes së sync ose close. Mospërputhjet e shkaktuara nga operacione që nuk mund të kryhen në mënyrë atomike zgjidhen nga përpunuesi i posaçëm deorphan, i cili pas nisjes kalon nëpër të gjithë pemën e sistemit të skedarëve.
- 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 si lista COW CTZ, që sigurojnë kompleksitet O(1) gjatë shtimit dhe O(nlogn) gjatë leximit. Alokimi i blloqeve kryhet duke skanuar sistemin e skedarëve për të gjetur blloqet e përdorura brenda një zone me madhësi fikse, e ruajtur si vektor bitësh. Për ta thjeshtuar skanimin, të gjithë drejtoritë janë pjesë e një liste të lidhur që përfshin të gjithë sistemin e skedarëve. Nëse gjatë shkrimit të një blloku zbulohet një gabim, alokohet një bllok i ri dhe të dhënat transferohen në të.
Ndryshimet në versionin e ri të LittleFS:
- ĂshtĂ« ripunuar kodi pĂ«r analizimin e shtigjeve tĂ« skedarĂ«ve, gjĂ« qĂ« e ka afruar sjelljen e sistemit tĂ« skedarĂ«ve me sistemet POSIX dhe me pritshmĂ«ritĂ« e pĂ«rdoruesve nĂ« situata si pĂ«rfundimi i shtegut me slash, pĂ«rpunimi i shtigjeve bosh dhe navigimi pĂ«rtej rrĂ«njĂ«s sĂ« sistemit tĂ« skedarĂ«ve.
- Janë shtuar dy shembuj të rinj të pajisjeve me blloqe, ramcrc32bd dhe ramrsbd, ku është zbatuar një mekanizëm korrigjimi gabimesh i përputhshëm me LittleFS. Në formën aktuale, vetë sistemi i skedarëve LittleFS nuk ka mbështetje për zbulimin dhe korrigjimin e gabimeve, ndaj këto operacione zhvendosen në nivelin e pajisjeve me blloqe.
- Në funksionin lfs_mkdir është shtuar mbështetja për slash në fund të shtegut, pra thirrja lfs_mkdir(«a/») tani nuk shkakton më gabim.
- Në funksionet lfs_stat dhe lfs_getattr tani kthehet gabim kur përdoren slash-et në fund të shtegut, nëse shtegu ekzistues në sistemin e skedarëve nuk është drejtori.
- Përpjekja për të hapur përmes funksionit lfs_file_open një skedar me slash në fund të emrit tani do të shkaktojë gabimin LFS_ERR_NOTDIR nëse skedari nuk është drejtori në sistemin e skedarëve, LFS_ERR_ISDIR nëse emri i referohet një drejtorie në sistemin e skedarëve, dhe LFS_O_CREAT nëse skedari nuk ekziston.
- Përpjekja për të kaluar përtej rrënjës së sistemit të skedarëve, për shembull lfs_stat(«/../a»), tani do të shkaktojë gabim.
- Përcaktimi i një shtegu bosh tani nuk konsiderohet më sinonim i qasjes te drejtoria rrënjë, pra thirrja lfs_stat(«») do të shkaktojë gabim.
Burimi: opennet.ru
