Dispozitiv de Investigat FAT12 sistem de fișiere

Bună ziua, dragi cititori! Voi încerca să mestece în detaliu structura internă a dispozitivului și sistemul de fișiere FAT12, care este cea mai simplă a familiei FAT. Acest sistem este folosit în principal pe dischete. În următorul articol am de gând să reinventeze roata pe baza sistemului și a scrie un program pentru a DCPU (jocuri de calculator fictiv din 0x10c), care ar formata o dischetă într-un sistem de fișiere de biciclete. (Unitatea de dischetă și caietul de sarcini nu a fost anunțat oficial, dar ele sunt prezente în DevKit 0x10c). Deci, dacă sunteți interesat să înțeleagă modul în care tatăl nostru, și l-am găsit sunt stocate pe disc, sunteți binevenit sub tăietura.

Trebuie remarcat faptul că sistemul este depășit și aproape că nu am folosit, dar a fost ea a fost aleasă din două motive: este foarte ușor de înțeles și poate fi foarte util pentru un astfel de dispozitiv simplu ca DCPU.

Acum îndepărtați copiii și femeile însărcinate din ecrane, pentru că va trebui să se ocupe de bytes în forma sa cea mai pură.

Pentru a începe pentru a defini o dischetă. Și anume, cu discheta obișnuită 3.5 „, cu 1,44 pe tablă, pe care știm cu toții atât de bine. Deci, tot spațiul de pe disc floppy este împărțit în sectoare, fiecare dimensiune de sector este de 512 octeți. Sectorul sunt grupate, dar pe o dischetă nu este prea multe sectoare (2848), prin urmare, fiecare cluster conține doar un singur sector.

Astfel, sistemul de fișiere. Primul sector pe o dischetă (zero) este dat sub sectorul de încărcare - sectorul de boot. Se stochează tot felul de informații utile și importante. urmat imediat de masa FAT. FAT standuri pentru fișiere AllocationTable - File Allocation Table. De obicei, acest tabel este duplicat pentru a crește fiabilitatea. Prima și a doua mese ocupate 1-9 și 10-18, respectiv sector. După sectorul de mai multe tabele (pe o dischetă este 14sht) sunt alocate directorul rădăcină. Și după tot ce a venit cu conținutul sectoarelor de fișiere.

Acum, primele lucruri mai întâi.

Sectorul boot - sectorul de încărcare

Acest sector are un sector zero, pe o dischetă. Acesta conține informații foarte importante despre dispozitivul de sistem de fișiere. Urmat de un număr de octeți din sector și ceea ce este stocat în ele:

  • 0-10 - ignorat
  • 11-12 - numărul de octeți din fiecare sector
  • 13 - numărul de sectoare în fiecare cluster
  • 14-15 - numărul de sectoare rezervate
  • 16 - numărul de tabele FAT
  • 17-18 - numărul maxim de fișiere și foldere în directorul rădăcină
  • 19-20 - Numărul total de sectoare
  • 21 - ignorat
  • 22-23 - numărul de sectoare necesare pentru fiecare tabel FAT
  • 24-25 - numărul de sectoare pe pistă (în sectorul floppy disk a venit împreună în piesa)
  • 26-27 - numărul de capete
  • 28-31 - ignorat
  • 32-35 - este ignorată în FAT12
  • 36-37 - ignorat
  • 38 - pornire semnătură - semnătură de boot
  • 39-42 - volum id
  • 43-53 - eticheta de volum
  • 54-61 - tipul de sistem de fișiere
  • 62 - prin urmare, octeții nu sunt utilizate înainte de sfârșitul sectorului de boot

În cazul în care câmpul octet de pornire este setat la 0x29, apoi urmând 3 câmpuri sunt prezente.

Id-ul este utilizat ca un număr de serie volum. De obicei, este derivat din momentul crearea volumului.

Eticheta de volum - acesta este numele lui. Valoarea implicită este setată la «NO NAMEnbspnbspnbspnbsp».

Fișier tip de sistem - pentru FAT12, un șir de caractere «FAT12nbspnbspnbsp». De fapt, cei mai mulți șoferi nu determină tipul de sistem de acest șir, și pe baza numărului de sectoare în purtătorul (FAT12 selectat în cazul în care un operator de transport nu este mai mult de 2 ^ 12 = 4096 sectoare)

tabelul FAT

masă FAT este foarte similar cu o matrice, elementele din care sunt formate din 2 octeți. Fiecare element corespunde unui sector cu datele, dar aici nu folosim sectoare reale și logice. diferența lor este că acestea sunt numerotate începând de la începutul discului floppy, iar de la începutul zonei de date. Aceasta este, în acest exemplu, primele 33 de sectoare de dischete (0-32) angajate Boot Sector, tabelele FAT și directorul rădăcină, adică datele în sine începe la 33 sector. Tabelele FAT zero și primul element sunt rezervate, așa că începem cu al doilea. Astfel, a doua intrare FAT în tabel corespunde 33 de sectoare pe dischetă sau sector 0 logic, și, de exemplu, al cincilea element - 36mu și 3mu logica. Valoarea elementului poate fi de 3 tipuri:

  1. O valoare care indică faptul că acest sector este cel mai recent dintr-un fișier
  2. O valoare care indică faptul că acest sector nu este utilizat în prezent
  3. Numărul de ordine al următorului sector fișier

Aici este o listă mai detaliată a valorilor și a ceea ce înseamnă:

  • 0x000 - sector nu este utilizat
  • Sectorul rezervat - 0xFF0-0xFF6
  • 0xFF7 - sectorul rău
  • 0xFF8-0xFFF - ultimul sector în fișierul
  • toate celelalte valori - numărul de ordine al următorului sector fișier logic

Un mic exemplu. Imaginați-vă că avem pe fișierul discul 2. Acesta text.txt, care acoperă 4 sectoare și picture.png, care ocupă 2 sectoare. Să text.txt ia 0, 2, 4 și 5, sectorul logic în zona de date (numărând de la zero), și picture.png - 1 și 3. Apoi, tabelul FAT va arata ceva de genul:

R 0x0000
R 0x0000 - primele 2 elemente sunt rezervate, îți amintești?
0 0x0002 - text.txt începutul fișierului, apoi stocați un pointer la fișierul text.txt sectorul următor
1 0x0003 - picture.png începutul și indicatorul de continuare
2 0x0004 - continuare text.txt
3 0x0FFF - ultimul sector picture.png
4 0x0005 - penultimul sector text.txt
5 0x0FFF - ultimul sector text.txt

Numărul înainte de valoare arată ce sectorul logic asociate cu acest element. Litera «R» stă în fața, adică elementele neutilizate rezervate.

director

Directory (inclusiv rădăcina) sunt stocate pe disc ca fișiere și să ia una sau mai multe sectoare. Fiecare sector director (512 bytes) conține indicii pentru fișiere 16, adică 32 de bytes pe indicator. Acest indice descrie directorul sau fișierul încorporat pe disc și se referă la el. Astfel, un set de indicii descrie pe deplin conținutul intern al folderului. Să examinăm mai în detaliu aceste indicii. Numerele de octeți și conținutul lor:

  • 0-7 - nume de fișier
  • 8-10 - expansiune
  • 11 - atribute
  • 12-13 - rezervat, prin urmare, ignorate
  • 14-15 - crearea
  • 16-17 - Creat
  • 18-19 - data ultimei utilizare
  • 20-21 - este ignorată în FAT12
  • 22-23 - data ultimei modificări
  • 24-25 - ultima dată modificat
  • 26-27 - o referire la primul sector logic al unui fișier sau director
  • dimensiunea fișierului în bytes - 28-31

În cazul în care primul octet al numelui are o valoare de 0x29, atunci acest indicator este gol (de exemplu, fișierul a fost șters), dar după aceea există încă indicii. În cazul în care primul octet al numelui - 0x00, indicatorul este gol, iar apoi toți indicii, de asemenea, goale.

atribut Byte descrie proprietățile fișierului. Aici valorile permise:

  • 0x01 - Numai citire
  • 0x02 - ascuns
  • 0x04 - sistem
  • 0x08 - Etichetă de volum (nu m-am dat seama ce este)
  • 0x10 - indică faptul că fișierul este un dosar
  • 0x20 - arhiva (Arhiva, de asemenea, nu a înțeles)
  • 0x40 - nu este utilizat
  • 0x80 - nu este utilizat

Valorile pot fi combinate. De exemplu, dacă vrem fișierul nostru a fost ascuns dosarul de sistem, apoi am stabilit valoarea octet 0x16, prin urmare, că 0x16 = 0x02 + 0x04 + 0x10.

Numele fișierului și extensia

FAT12 este alocat 8 caractere pentru numele fișierului și 3 caractere pentru extensia. Dacă numele de fișier durează mai puțin de 8 caractere, spațiile rămase sunt umplute (ASCII 32 sau 0x20). Același lucru cu extensia. De asemenea, toate numele și extensiile sunt stocate în majuscule. Regizorul, de altfel, poate fi, de asemenea expansiune. În același director nu poate fi localizat mai multe fișiere sau foldere cu aceleași nume și extensii. Iată câteva exemple de pe stânga, care este stocat pe disc, precum și numele corecte pe care le-am dat fișier. O subliniere ( „_“), am înlocuit un spațiu pentru claritate:

  • «FOO_____BAR» - «foo.bar»
  • «FOO_____BAR» - «Foo.Bar»
  • «FOO_____BAR» - «FOO.BAR»
  • «FOO________» - «foo»
  • «FOO________» - «Foo»
  • «PICKLE__A__» - «PICKLE.A»
  • «PRETTYBGBIG» - «prettybg.big»

File name „.big“ este incorectă, deoarece numele nu poate începe cu un punct.