Sistemul de fișiere grase și gestionarea datelor în ms-dos

Caracteristicile generale ale sistemului FAT

Sistemul FAT a fost dezvoltat pentru MS-DOS. Acesta este un sistem de fișiere simplu cu destinație de plasare segmentată, fără protecție pentru mai mulți utilizatori. Structura directorului este asemănătoare unui arbore, iar pe fiecare volum al discului este creat un arbore separat. Pentru a specifica locația unui fișier, poate fi folosit numele său complet. conținând litera unității, calea arborelui de directoare și numele real al fișierului, de exemplu: "C: \ UTILS \ ARCH \ RAR.EXE".







În Windows, este de asemenea posibil să utilizați FAT, justificat în special pentru dischete. Pentru hard disk-urile cu capacitate mare, sistemul FAT devine ineficient și este înlocuit treptat de un sistem NTFS mai puternic.

Structurile de date de pe disc

Când formatați o dischetă sau o partiție de hard disk în sistemul FAT, tot spațiul de pe disc este împărțit în următoarele zone, prezentate în Fig. 3 # 8209;

· Sectorul BOOT conține parametrii cantitativi de bază ai volumului de disc și a sistemului de fișiere și poate conține, de asemenea, programul de boot OS.

· FAT (File Alocation Table) - conține informații despre locația fișierelor și spațiul liber pe disc. Având în vedere importanța critică a acestui tabel, acesta este întotdeauna stocat în două exemplare, care trebuie să fie identice [4]. Fiecare operație care modifică conținutul FAT trebuie să schimbe ambele instanțe în același mod.

· ROOT - directorul rădăcină al sistemului care conține date despre fișiere și subdirectoare de nivel superior, fiecare din acestea putând conține fișiere și subdirectoare.

· Zona de date - o serie de clustere care conțin toate fișierele și toate directoarele (cu excepția directorului rădăcină).

Să analizăm în detaliu cum sunt stocate toate informațiile despre un fișier stocat în sistemul FAT.

Când creați un fișier într-unul din directoarele sistemului de fișiere, este creată o intrare care stochează cea mai mare parte a informațiilor despre acest fișier. Fiecare director, cu excepția directorului rădăcină, este, de asemenea, un fișier special, iar o înregistrare a acestuia este inclusă în directorul părinte. Intrarea catalogului ocupă întotdeauna 32 octeți, structura acestuia fiind prezentată în Tabel. 3.1.

FAT structura de intrare director de sistem

Dimensiunea câmpului (în octeți)

După cum puteți vedea din tabel, numele fișierului poate ocupa cel mult 8 caractere plus alte 3 simboluri de expansiune. La începutul anilor 80, se părea că acest lucru este destul. Ulterior, această restricție a fost denumită "blestemul 8 + 3", iar pentru a scăpa de ea sistemul de fișiere FAT a fost posibil numai în Windows 95.

Byte-ul atribut conține un set de biți care caracterizează proprietățile fișierului. Împreună cu atributele aproape inutile, „sistem“ „ascuns“ și „arhivă“, și conține importante „read-only“, „catalog“ și „eticheta de volum.“ Atributul numai pentru citire interzice sistemului să șterge un fișier sau să-l deschidă pentru scriere. Atributul "director" înseamnă că această intrare nu descrie un fișier normal, ci un director. Atributul „Volume Label“ poate fi conținută numai în directorul rădăcină, o astfel de înregistrare nu dezvăluie nici un fișier, ci conține numele câmpurilor și extinderea etichetei 11 caractere (nume) atribuit volumului de disc.

În general, intrarea în agendă conține aproape tot ceea ce știe sistemul despre fișier, iar dacă dimensiunea fișierului nu depășește un grup, atunci totul este complet. Dacă fișierul conține mai multe clustere, atunci numerele rămase pot fi găsite în tabelul FAT.

Tabelul FAT constă din înregistrări, numărul cărora este egal cu numărul de clustere din zona de date, iar mărimea unei înregistrări poate fi de 12, 16 sau 32 de biți. În consecință, ei vorbesc despre soiurile sistemului de fișiere FAT-12, FAT-16 sau FAT-32. Dimensiunea înregistrării trebuie să fie astfel încât numărul maxim de cluster să poată fi scris în el. De exemplu, pentru un standard de dischetă trei inch 1.44 Mb este suficienta pentru a utiliza-FAT 12, deoarece permite să aibă 2 12 = 4096 clustere (de fapt, ceva mai puțin), și chiar și cu dimensiunea mănunchi de 1 sector (512 octeți) este mai mult decât suficient: 4096 '512 = 2 MB.

Înregistrările FAT "din motive istorice" sunt numerotate pornind de la 2 la numărul maxim al clusterului, fiecare intrare FAT descrie clusterul corespunzător cu același număr. Înregistrarea poate lua următoarele valori:

· Dacă cluster aparține unui fișier (sau director) și ultima (sau numai) în acest fișier, intrarea FAT conține o semnificație specială - toate unitățile (FFF16 la FAT-12 sau FFFF16 pentru FAT-16);

· Dacă clusterul aparține unui anumit fișier (sau director), dar nu este ultimul din fișier, atunci intrarea FAT conține numărul următorului cluster al aceluiași fișier;

· Dacă grupul este liber, atunci înregistrarea conține toate zerouri;

· În cazul în care cluster-ul este defect (de exemplu, atunci când verificarea de disc a arătat că acest grup conține cel puțin un sector defect), înregistrarea conține o semnificație deosebită pentru FF716 FAT-12 sau FFF716 la FAT-16.

Acum știm cum sistemul FAT stochează informații despre plasarea unui fișier segmentat. Numărul primului cluster de fișiere este stocat în intrarea în agendă, iar clusterele rămase pot fi determinate secvențial prin intrările din tabelul FAT.

În fiecare director, cu excepția directorului rădăcină, primele două înregistrări conțin nume speciale: numele "." Înseamnă directorul în sine, numele ".." este directorul părinte.

Crearea și ștergerea unui fișier

Pentru a finaliza studiul structurilor de date ale sistemului FAT, luați în considerare modul în care aceste structuri se schimbă în timpul operațiilor de creare și de ștergere a fișierelor.

Când sistemul de operare efectuează funcția de a crea un fișier cu numele dat în directorul specificat, acesta găsește mai întâi directorul dat în arborele de directoare al sistemului de fișiere. (După citirea directorului, sistemul verifică dacă are deja intrări cu numele dat (adică dacă există deja un astfel de fișier). Dacă da, este setat acest fișier la "read-only"? Dacă este instalat, noul fișier nu poate fi creat, mai întâi trebuie să eliminați atributul. Dacă nu este instalat, fișierul vechi este șters. Apoi, sistemul găsește o intrare gratuită în director. Dacă nu există suficient spațiu liber în director, acesta poate fi mărit cu încă un grup, acest fapt fiind reflectat în tabelul FAT. În cele din urmă, găsirea unui loc gol, sistemul de înregistrare umple un fișier nou câmp: numele și extensia, data și ora ultimei modificări, atribute. Dimensiunea și numărul primului grup sunt setate la zero, deoarece fișierul nu conține încă date.

În viitor, atunci când prima scrie în fișier, sistemul va găsi orice grup liber de masă de FAT, marca FAT ca ultima clusterul a fișierului, completați numărul de primul cluster în înregistrarea catalog, pentru a înregistra, și va aduce numărul de octeți scrise la dimensiunea fișierului terenului în catalog .

Când ștergeți un fișier, mai întâi de la intrarea în catalog, se verifică dacă poate fi șters (dacă atributul este "numai pentru citire") și apoi se fac două lucruri:

· Primul octet din numele fișierului șters este înlocuit cu un caracter special cu codul E516 (acesta este afișat ca litera rusesc „x“, probabil, FAT dezvoltatorii de sisteme de crezut că acest cod nu se poate întâlni în numele fișierului);







· Toate intrările din tabelul FAT care corespund clusterelor fișierului care este șters sunt umplut cu zerouri, adică clusterele sunt declarate libere.

După cum puteți vedea din procedura descrisă, atunci când ștergeți un fișier, datele sale nu sunt șterse de pe disc, dar informațiile despre locația fișierului sunt corupte. Dacă dimensiunea fișierului depășește un grup, nu există nicio garanție că acesta va fi recuperat în cazul ștergerii accidentale, chiar dacă utilizatorul o memorează imediat.

Lucrul cu fișiere în MS-DOS

Pentru a lucra cu fișiere și directoare ale sistemului FAT în MS-DOS oferă un set destul de bogat de funcții. Toate acestea sunt numite de comanda de întrerupere a programului int 21h, iar funcția specifică este determinată de numărul introdus în registrul AH. Aceste funcții permit, în special:

· Creați un fișier prin specificarea numelui său complet;

· Modificarea atributelor fișierului;

· Redenumiți fișierul sau mutați-l într-un alt director de pe același disc [5];

· Căutați într-un anumit director, toate fișierele ale căror nume se potrivesc cu un model dat (de exemplu, model de «XYZ C *.» Potrivire toate fișierele ale căror nume încep cu «XYZ», și să conțină exact 5 caractere, iar extensia începe cu «C» litere);

· Crearea și ștergerea directoarelor;

· Setați discul curent și directorul curent;

· Deschideți fișierul, accesați datele acestuia și închideți fișierul.

În MS-DOS, există două seturi diferite de funcții care vă permit să lucrați cu fișierele de date. Una dintre ele, bazată pe utilizarea unității de gestionare a fișierelor (FCB), este puțin probabil să fi fost folosită de oricine în ultimii 20 de ani, dar este reținută din motive de compatibilitate cu versiunea MS-DOS 1.0. Metoda comună de lucru cu fișiere se bazează pe utilizarea mânerelor [6].

Mânerul este un număr pe care sistemul îl întoarce la programul de utilizator când operația deschisă are succes sau când fișierul este creat. Valoarea acestui număr nu contează pentru program. Singurul lucru important este că în apelurile ulterioare către fișierul deschis, programul trebuie să transmită acest mâner sistemului ca indicator al acestui fișier.

MS-DOS oferă un set amplu de funcții pentru lucrul cu fișiere deschise. Aceasta include citirea și scrierea unui număr arbitrar de octeți, funcția de indicatorul în funcția de setare punct de fișier arbitrar și de a debloca fragmente de fișiere de curățare tampoane cache fișier forțat (curățenia, de obicei, se efectuează numai în cazul în care fișierul este închis sau în cazul în care lipsa funcției tampoane cm. P.2.6 .6; curățarea forțată asigură că modificările discului sunt salvate imediat).

Când apelați funcția de deschidere a fișierelor, puteți specifica numele oricărui dispozitiv de caractere, de exemplu "PRN:" în loc de numele fișierului. De asemenea, aceasta returnează un mâner cu care puteți efectua operații de scriere la fel ca și în cazul în care acest mâner a indicat un fișier de disc. Desigur, nu puteți deschide imprimanta pentru citire și nici nu puteți mișca cursorul înapoi.

Când executați orice program pe care le primește „un cadou“ din MS-DOS-cinci mânere deja deschise numerotate de la 0 la 4. Dintre acestea, cele mai importante sunt mânerul de la 0, care, prin definiție, se referă la intrarea standard a programului, iar mânerul 1 - standard de ieșire. Mânerul 2 este dispozitivul standard pentru afișarea mesajelor de eroare, mânerul 3 este un dispozitiv I / O standard serial (port COM), mânerul 4 este o imprimantă standard.

Mai sus, în clauza 2.2, a fost dată o altă definiție a intrărilor și ieșirilor standard, deoarece dispozitivele au fost utilizate "implicit". Nu există nici o contradicție aici. Compilerele limbajelor de programare, întâlnirile de apel la procedurile de intrare / ieșire fără a specifica un fișier, le traduc în apeluri către funcțiile sistemului MS-DOS cu mânere, respectiv 0 sau 1.

În cazul în care programul este rulat de la linia de comandă MS-DOS, acesta este de obicei mânerul de la 0 indică faptul că tastatura (sau mai precis, pe dispozitivul CON :) și mânerul 1 -. Pe ecranul (CON același dispozitiv, dar funcționează pe ieșire). Cu toate acestea, utilizatorul poate folosi caracterele de redirecționare de intrare standard ("<») и вывода (знаки «>"Și" >> "). De exemplu, un program a început cu comanda "MY_PROG" PRN "va folosi INFILE.TXT ca intrare standard, iar ieșirea standard va fi trimisă la imprimantă. Semnul ">>" înseamnă adăugarea de date la sfârșitul fișierului de ieșire standard, semnul ">" - fișierul este suprascris din nou. Sistemul se deschide fișierul specificat sau dispozitivul (la semnul „>>“ realizează, de asemenea, mișcarea cursorului la dosar) și asigură accesul la acesta din program pentru a rula printr-un mâner standard 0 sau 1. Astfel, pentru a efectua specificate de utilizator de redirecționare de intrare sau de ieșire standard de , programul care rulează nu știe deloc ce dispozitive sau fișiere sunt intrarea și ieșirea standard.

Redirecționarea intrărilor și ieșirilor standard poate fi efectuată și de programul de utilizator. De obicei, acest lucru se face înainte ca programul să înceapă orice alt program, trecând manualele standard redirecționate.

Structuri de date în memorie

Pentru a oferi acces la fișiere deschise, MS-DOS utilizează două tipuri de tabele de sistem.

Tabela SFT (Table System Table) conține intrări pentru toate fișierele deschise în prezent de programele utilizatorului și de sistemul de operare în sine. Acest tabel este stocat în memoria sistemului, numărul de intrări în el este determinat de parametrul FILES din fișierul de configurare CONFIG.SYS, dar nu poate depăși 255.

Dacă același fișier a fost deschis de mai multe ori (fie că este același program sau diferite programe), atunci vor fi mai multe intrări pentru acesta în SFT.

Fiecare intrare conține informații detaliate despre fișier, suficiente pentru a efectua operațiuni cu acesta. În special, înregistrarea SFT conține:

O copie a informațiilor despre catalog;

· Poziția curentă a indicatorului de citire / scriere;

· Modul de acces specificat în momentul deschiderii.

În plus, intrarea SFT conține valoarea numărului de referință pentru această înregistrare din toate tabelele JFT, care vor fi discutate mai jos. Când acest contor devine zero, intrarea SFT devine liberă, deoarece fișierul este închis.

Spre deosebire de un singur SFT, tabelele JFT (Job File Table) sunt create pentru fiecare program care se execută, astfel încât pot exista mai multe astfel de tabele în același timp. (Și în cazul în care în single-tasking MS-DOS poate lua mai multe programe de simplu răspuns este: Când un program lansează altul, memoria există două detalii, a se vedea punctul 4.4.3 ....) Tabelul JFT are o structură simplă: este alcătuită dintr-un fișier de intrări pe un singur octet , unde valoarea fiecărei înregistrări este un indice (număr de înregistrare) din tabelul SFT. Intrările neutilizate conțin valoarea FF16. Dimensiunea implicită a tabelului este de 20 de intrări (octeți), dar poate fi mărită la 255.

Acum, despre mânere. Aplicația utilizează mânere ca unele număr condiționată de fișiere deschise, valoarea specifică a unui mâner, în același timp, nu joacă nici un rol (cu excepția standardului evident mânere 0 - 4). De fapt, valoarea mânerului nu este nimic mai mult decât indicele record din tabelul JFT al acestui program. Prima înregistrare a tabelului corespunde mânerului 0.

În Fig. 3 # 8209; 3 arată relația dintre mânere, mese JFT, tabelul SFT și fișiere / dispozitive deschise.

În exemplul prezentat în figură, standard de mânere proces A este utilizat ca implicit face MS-DOS: mânere 0, 1 și 2 indică SFT înregistrare, dispozitiv consolă CON mâner 3 corespunzător - la intrarea dispozitivului COM1 mânerul 4 -Un înregistrare pe imprimantă. În procesul B ieșirea standard transmis la imprimantă, care se reflectă în valoarea elementului 1 JFT acest proces. Mânerele 3 și 4 pentru procedeul B nu sunt prezentate astfel încât să nu contravină desenului. Restul elementelor prezentate în Figura JFT ambele procese indică intrarea SFT care descrie fișierele deschise pe discuri.

Rețineți că două intrări din tabelul SFT sunt asociate cu fișierul PICTURE.BMP. Acest lucru înseamnă că acest fișier a fost deschis în fiecare proces separat (dar, evident, utilizând unul dintre modurile de partajare de fișiere).

Care este scopul unei astfel de scheme în două etape? Nu a fost mai ușor ca mânerul să indice direct înregistrarea SFT? Există cel puțin două argumente evidente în favoarea utilizării JFT.

· Utilizarea JFT face posibilă separarea conceptului logic al unui dispozitiv standard (în special, intrarea standard - mânerul 0 și ieșirea standard - mânerul 1) de la anumite dispozitive. Redirecționarea dispozitivelor standard se face prin modificarea valorilor elementelor JFT corespunzătoare.

Noi versiuni ale sistemului FAT

În Windows 95, a fost depășită o restricție nefericită în ceea ce privește lungimea numelui fișierului - celebra regulă "8 + 3". Se pare că, cu mărimea unei intrări de directoare de 32 de octeți, este dificil să se bazeze pe nume de fișiere lungi. Cu toate acestea, sa găsit o soluție amuzantă la această problemă.

dezvoltatorii Microsoft a observat că directorul de înregistrări, care îndeplinește atributul de model lipsit de sens de biți „sistem ascuns + + + read-only etichetă de volum“ este pur și simplu ignorate ca programele și utilităților comune altor dezvoltatori de sisteme MS-DOS. Acest lucru a făcut posibilă utilizarea înregistrărilor cu această combinație pentru a stoca un nume de fișier lung. Ca și înainte, pentru fiecare fișier în directorul are un record maestru în comun, formatul vechi care conține atributele de fișier, numărul de primul grup și obligatoriu „scurt“ numele. Cu toate acestea, în cazul în care utilizatorul atunci când creați fișierul specifică numele nu se încadrează în standardul „8 + 3“ sau conține litere mici, apoi, înainte de înregistrarea propriu-zisă va fi inserat în numărul dorit de înregistrări suplimentare rupte în bucăți „nume lung“ în codificarea unicode (2 octeți per caracter , care vă permite să utilizați orice alfabet cunoscut). Lungimea numelui, conform documentației, poate ajunge la 255 de caractere (de fapt, puțin mai puțin).

Începând cu Windows 98, a devenit posibilă utilizarea unui nou tip de sistem de fișiere - FAT-32. Acesta diferă de FAT-12 și FAT-16 nu este numai o capacitate mai mare a numărului de cluster (deși este foarte important pentru disc mare), dar, de asemenea, în faptul că Microsoft în cele din urmă a decis să utilizeze o rezervă de 10 octeți, care nu este cunoscut pentru orice obiectivele rămân neocupate în fiecare intrare din director. Datorită acestui fapt nu a existat posibilitatea de a adăuga la data / ora ultimei modificări a două ștampilă de timp: data creării / ora (de fapt, aceasta este data / ora ultimei modificări a înregistrărilor catalog) și data ultimului acces.







Articole similare

Trimiteți-le prietenilor: