Tabel de partiționare a discurilor
Sectorul inițial al hard diskului conține înregistrarea principală a rădăcinilor, care este încărcată în memorie și executată.
Ultima parte a acestui sector conține o tabelă de partiții - o tabelă cu 4 elemente cu elemente de 16 octeți. Acest tabel este manipulat de programul FDISK (sau de un utilitar echivalent într-un alt sistem de operare).
În timpul încărcării, ROM-BIOS încarcă înregistrarea principală a rădăcinilor și transferă controlul la codul său. Acest cod citește tabela de partiții pentru a determina partiția marcată ca fiind activă. Apoi, sectorul rădăcină corect este citit în memorie și executat.
Tabelul 1. Structura principală a înregistrării rădăcinilor și a tabelei de partiții
Registrul rădăcinilor (MSB)
Descriptorul secțiunii 1 (a se vedea tabelul 2)
Secțiunea 2 Descriptor
Secțiunea 3 Descriptor
Secțiunea 4 Descriptor
Tabel cu partiții semnate (valoarea AA55h)
Tabelul 2. Structura mânerului secțiunii
Un semn al activității partiției (0 - inactiv, 80h - activ)
Numărul de suprafață al discului de pe care pornește partiția
Numărul cilindrului și numărul sectorului din care începe secțiunea
Codul secțiunii (a se vedea tabelul 3)
Numărul de suprafață al discului pe care se termină partiția
Numărul cilindrului și numărul sectorului pe care se termină secțiunea
Numărul absolut (logic) al sectorului inițial al partiției
Dimensiunea secțiunii (numărul sectoarelor)
Codul de partiție este folosit pentru a determina prezența și poziția partițiilor primare și extinse de pe disc. După găsirea partiției dorite, dimensiunea și coordonatele acesteia pot fi extrase din câmpurile descriptorilor corespunzători. Dacă se scrie 0 în câmpul codului secțiunii, atunci mânerul este considerat gol, adică nu definește nicio partiție pe disc.
Tabelul 3. Codurile de partiționare ale sistemului de operare Microsoft
Acestea sunt aranjate astfel încât atunci când încărcați CX cu o valoare pe 16 biți, este gata să apelați întreruperea INT 13h pentru a citi porțiunea dorită a discului. Astfel, după citirea înregistrării principale de boot în zona de memorie sect_buf. cod
va verifica dacă prima partiție este activă și codul
va încărca CX pentru a apela INT 13h pentru a citi sectorul rădăcină al partiției # 1.
Secțiunile încep cu un număr de cilindri egal, cu excepția primei secțiuni, care poate începe cu cilindrul 0, capul 0, sectorul 2 (deoarece sectorul 1 este ocupat de înregistrarea de boot master).
Atunci când rădăcina partiției devine controlată, DS: SI indică intrarea corespunzător tabelei de partiții.
Structura sectorului rădăcinilor
Tabelul 4. Formatul sectorului rădăcină al unei dischete sau al unei partiții pe hard disk
NEAR - trecerea la codul de descărcare
Numele companiei OEM și versiunea sistemului
numărul de octeți din sector (întotdeauna 512)
numărul de sectoare din grup
numărul de sectoare de rezervă (sectoare înaintea FAT # 1)
numărul de tabele FAT
numărul de elemente de 32 de octeți din directorul rădăcină (pentru FAT32 - 0)
numărul total de sectoare de pe mass-media (partiția DOS)
tipul de suport (același cu primul octet al FAT)
numărul de sectoare dintr-un singur FAT
număr de sectoare pe pistă
numărul de sectoare ascunse (utilizate în schemele de separare)
din toate sectoarele, dacă dimensiunea este> 32 MB
ID-ul volumului (numărul de serie)
ID sistem de fișiere (FAT12)
începutul descărcării codului și datelor
observații:
- Tipuri media:
- F0h - floppy disk, 2 fețe, 18 sectoare pe pistă;
- F8h - hard disk;
- F9h - floppy disk, 2 fețe, 15 sectoare pe pistă;
- FCh - dischetă, 1 parte, 9 sectoare pe pistă;
- FDh - floppy disk, 2 fețe, 9 sectoare pe pistă;
- FEh - floppy disk, 1 parte, 8 sectoare pe pistă;
- FFh - floppy disk, 2 fețe, 8 sectoare per pistă.
Tabelul parametrilor floppy
Tabelul 5. Formatul tabelului cu parametrii dischetei
Prima specificație byte:
biți 0-3 - timpul de încărcare a capetelor;
biții 4-7 - lungimea treptei capetelor
Tabela de alocare a fișierelor (FAT)
Mărime fișier se poate schimba în timp. Dacă presupunem un fișier de stocare numai în sectoarele conexe, cu o creștere a dimensiunii fișierului sistemului de operare trebuie să-l rescrie complet într-un alt volum adecvat zonă (liber) a discului. Pentru a simplifica și accelera funcționarea adăugarea de noi date într-un fișier, sistemul de operare folosit în tabelul moderne de alocare a fișierelor (File Allocation Table, abreviat ca FAT), care vă permit să stocați un fișier într-un non-contigue.
Când se utilizează FAT, zona de date a discului logic este împărțită în secțiuni de aceeași dimensiune - grupuri. Un cluster poate fi format dintr-unul sau mai multe sectoare localizate secvențial pe un disc. Numărul de sectoare din cluster trebuie să fie mai mare de 2 N și poate avea valori de la 1 la 64 (dimensiunea clusterului depinde de tipul de FAT utilizat și de volumul discului logic).
Fiecărui grup i se atribuie un element propriu al tabelului FAT. Primele două elemente FAT sunt rezervate - dacă există clustere de date K pe disc, numărul elementelor FAT va fi K + 2. Tipul FAT este determinat de valoarea lui K.- dacă K <4085 - используется FAT12;
- dacă 4084> K <65525 - используется FAT16;
- dacă 65524> K este utilizat de FAT32.
Tipuri de nume FAT sunt derivate din dimensiunea elementului. Astfel, elementul FAT12 are o dimensiune de 12 biți, FAT16 - 16 biți, FAT32 - 32 biți. Rețineți că FAT32 superioară patru biți sunt rezervate și ignorate în timpul funcționării sistemului de operare (de exemplu, sunt semnificative numai șapte junior cifre hexazecimale elementului).
FAT este o listă coerentă pe care OS o folosește pentru a urmări locația fizică a datelor pe disc și pentru a căuta o memorie liberă pentru fișierele noi.
Directorul de fișiere (cuprinsul) pentru fiecare fișier conține numărul elementului inițial din tabelul FAT corespunzător primului grup din lanțul de distribuție a fișierelor. Elementul FAT corespunzător indică fie sfârșitul lanțului, fie se referă la elementul următor, etc. exemplu:
Această diagramă ilustrează conceptele de bază ale FAT. Arată că:- MYFILE.TXT ocupă 10 clustere. Primul cluster este clusterul 08, ultimul cluster este 1Bh. Lanțul de clustere este 08h, 09h, 0Ah, 0Bh, 15h, 16h, 17h, 19h, 1Ah, 1Bh. Fiecare element indică următorul element al lanțului, iar ultimul element conține un cod special (a se vedea tabelul 7).
- Clusterul 18h este marcat ca fiind defect și nu intră în lanțul de distribuție.
- Clusterele 06h, 07h, 0Ch-14h și 1Ch-1Fh sunt goale și sunt disponibile pentru distribuire.
- Un alt lanț începe cu clusterul 02h și se termină cu clusterul 05h. Pentru a afla numele fișierului, trebuie să găsiți cuprinsul cu numărul de cluster inițial 02h.
Tabelul 7. Valorile elementelor FAT
Numărul cluster al elementului următor din lanț
FAT începe, de obicei, cu sectorul logic 1 în partiția DOS (adică se poate citi prin INT 25h cu DX = 1). În general, trebuie mai întâi să citiți root_ectorul (DX = 0) și să faceți decalajul de 0Eh. Acesta indică câte sectoare de rădăcină și rezerve se confruntă cu FAT. Apoi folosiți acest număr (de obicei 1) ca conținut al DX. Pentru a citi FAT prin INT 25h.
Pot exista mai multe copii ale FAT. De obicei, sunt acceptate două copii identice. În aceste cazuri, toate copiile sunt situate direct unul lângă celălalt.
observaţie:
- Concepția greșită generală se crede că 16 biți DOS FAT nu permite sa lucreze cu discuri mai mari de 32 MB. De fapt, limitele pe care INT 25h / 26h este în imposibilitatea de a lucra cu acest sector, care mai mult de 65,535 camere Deoarece dimensiunea sectorului este de obicei 512 bytes, kilobytes, sau pe jumătate, ea dictează limita de 32-megabyte. Pe de altă parte, nimic nu împiedică să aibă o mai mare sectoare, astfel încât, teoretic, DOS poate lucra cu orice discuri.
observaţie:
- Un element pe 12 biți poate traversa granițele a două sectoare, deci aveți grijă dacă citiți un sector al FAT.
Elementele pe 16 biți sunt mai simple - fiecare element conține o decalare pe 16 biți (de la începutul FAT) a următorului element din lanț.
Elemente pe 32 de biți - fiecare element conține o decalare pe 32 de biți a elementului următor din lanț.
Programele scrise în limbaj de asamblare pentru efectuarea de multiplicare de 3 în loc MUL comenzi utilizate frecvent algoritmul de „schimbare și adăugarea“: numărul iskhrodnoe este copiat pe numărul de copiere este schimbare efectuată lăsată de un bit (înmulțirea cu 2) și apoi sunt formate ambele numere (x + 2x = 3x). În loc de a folosi trecerea DIV la dreapta cu o cifră.
Discheta (sau partiția pe hard disk) este structurată după cum urmează:- rădăcină și rezerve;
- FAT # 1;
- FAT # 2;
- director rădăcină (nu există în FAT32);
- zona de date.
Fiecare secțiune din această structură are o lungime variabilă, iar pentru conversia corectă a numărului de cluster la numărul sectorului, este necesar să se cunoască lungimea fiecărei secțiuni.
Pentru a obține numărul sectorului de start al unui grup de număr de cluster ClustNum (citește din câmpul corespunzător în intrarea de director și lanțul FAT), puteți utiliza funcția nedocumentat 32h OS sau de a citi sectorul rădăcină și se aplică următoarea formulă:
kornevyh_sektorov = (RootSiz * 32) / 512 nachalo_dannyh = ResSecs + (FatSize * FatCnt) + = kornevyh_sektorov nach_sektor nachalo_dannyh + ((ClustNum - 2) * ClustSiz).
unde valorile variabilelor sunt: RootSiz. ResSecs. FatSize. FatCnt. ClustSiz este extras din sectorul rădăcinilor sau din BPB (vezi Tabelul 4).
Setați DX = start_ector înainte de a citi INT 25h sau INT 26h.
Director de fișiere
Directorul de fișiere este o serie de elemente de 32 de octeți - descriptori de fișiere. Din punctul de vedere al sistemului de operare, toate directoarele (cu excepția directorului rădăcină din sistemele FAT12 și FAT16) arată ca fișiere și pot conține un număr arbitrar de înregistrări.
Directorul rădăcină (directorul rădăcină) este directorul principal al unității din care începe arborele subdirectoarelor. Pentru directorul rădăcină din FAT12 și FAT16 din zona de sistem a discului logic, este alocat un loc special de dimensiune fixă (16 KB), conceput pentru stocarea a 512 elemente. În sistemul FAT32, directorul rădăcină este un fișier de dimensiune arbitrară.
Tabelul 8. Structura elementului director
La crearea fișierelor, datele sunt contorizate de la începutul erei MS-DOS, adică de la 01/01/1980. Numărul 9-15 conține numărul anului minus 1980 (valoarea este de la 0 la 127).
Nume lungi de fișiere
Începând cu Windows 95, fișierul poate fi atribuit (pe lângă numele scurt) așa-numitul nume lung. Pentru a stoca un nume lung, sunt utilizate intrări de agende goale, adiacente elementului principal - descriptorul fișierului. Prezența unităților în biți de 0-3 octeți de atribute este un semn că elementul liber al directorului este folosit pentru a stoca o secțiune a unui nume de fișier lung (pentru manipulatorii de fișiere și directoare, o astfel de combinație este imposibilă). Numele de fișiere scurte și lungi sunt unice; Nu vă întâlniți de două ori în același director.
Numele lung este scris nu în caractere ASCII, ci în format Unicode, unde fiecare alfabet național corespunde unui set de coduri. Costul versatilității Unicode este o scădere a densității de stocare a informațiilor - fiecare caracter ocupă două octeți (cuvânt de 16 biți). În înregistrările goale din director, un nume lung este scris în forma tăiată în bucăți (vezi Tabelul 9).
Tabelul 9. Structura elementului de director stocând un fragment al unui nume lung de fișier
Prima secțiune a fragmentului de nume
Sumă de verificare a unui nume scurt
A doua secțiune a fragmentului numelui
Numărul primului grup (trebuie să fie 0)
Al treilea segment al fragmentului numelui
Numele lung este scris mai întâi în director și fragmentele sunt aranjate în ordine inversă, începând cu ultima:
Ultimul fragment al numelui lung
Al doilea fragment al numelui lung
Primul fragment al numelui lung
Descriptor de fișiere standard
Blocul informațiilor despre disc este format din funcția UNDOCUMENTED a DOS 32h.
Tabelul 10. Diagrama blocului de informații despre discuri
Numărul discului (0 = A, 1 = B, etc.)
Numărul sub-dispozitiv din antetul dispozitivului (un driver poate gestiona mai multe discuri)
Dimensiunea sectorului în octeți
Numărul de sectoare pe grupul -1 (sectorul maxim din grup)
Schimbarea clusterului în sector (cluster = 2 sectoare) (sectoare pe cluster în puteri de 2: 2 pentru 4, 3 pentru 8)
Numărul de sectoare de rezervă (rădăcină, începutul rădăcinii og.) (N din primul sector al FAT)
Numărul de tabele FAT