Fisierele si directoarele formeaza partea vizibila a unei componente complexe si foarte importante a MS-DOS si anume sistemul de gestiune al fisierelor (SGF) s7y22yq
Acesta este cel care da dischetelor si harddisk-urilor structura lor si face posibil accesul foarte simplu al utilizatorilor de PC-uri la continutul acestor purtatori de date.
SGF sta la baza structurii fizice a dischetelor sau a harddisk-urilor deoarece aceste doua tipuri de memorii de masa sunt structurate aproape identic. Discurile sunt divizate in sectoare cu dimensiunea de 512 octeti care au o pozitie fizica pe disc. Din aceasta cauza ele mai sunt denumite si sectoare fizice. Controller-ul harddisk-ului utilizeaza adresa fizica a fiecarui sector,
in timp ce MS-DOS lucreaza cu sectoare logice incepand de la 0.
Stuctura prezentata este produsa in urma procesului de formatare.In cazul sistemului de operare MS-DOS aceasta notiune are doua sensuri : fizica si logica
Formatare low-level sau formatare fizica se face cu un program special sau o procedura BIOS. Urmeaza apoi partitionarea cu comanda fdisk iar in final formatarea logica cu comanda format, creind structura logica necesara pentru
sistemul de operare MS-DOS.
Sectorul de boot
Toate datele care descriu formatul discului, si cu ajutorul carora sistemul de operare MS-DOS poate utiliza discul, sunt stocate in sectorul de
boot al partitiei in DPB (Disk Parameter Block). Este vorba despre descrierea structurii logice a discului. Numai cu ajutorul acestor date sistemul de operare poate
gasi primul director din partitie si numai prin accedarea primului director poate
MS-DOS sa gaseasca fisierele.
In sectorul de boot se gaseste pe langa DPB si procedura de incarcare, ce serveste la pornirea sistemului de operare.
ÚAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
³ Adresa(lung) ³ Continut ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +00 (3) ³ Instructiune de salt la rutina de boot ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +03 (8) ³ Producator si numar de versiune SO ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +0B (2) ³ Octeti pe sector ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +0D (1) ³ Sectoare pe cluster ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +0E (2) ³ Numarul sectoarelor rezervate ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +10 (1) ³ Numar de FAT-uri (File Allocation Table)³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +11 (2) ³ Numar de intrari in root(director princ)³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +13 (2) ³ Numar de sectoare in volum ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +15 (1) ³ Media descriptor ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +16 (2) ³ Numar de sectoare pe FAT ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +18 (2) ³ Sectoare pe cilindru ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +1A (2) ³ Numar de capete ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +1C (2) ³ Diferenta in sectoare dintre primul ³
³ ³ sector al volumului si al suportului ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +1E-1FF (482)³ Rutina boot ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAÙ fig 1
Sectorul de boot se termina cu octetii 55AAh ce constituie semnatura.
Pe harddisk-uri mai exista in sectorul de boot si o alta structura de date, tabela de partitionare.
ÚAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
³ Adresa(lung) ³ Continut ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +00 (1) ³ Stare 0=inactiva, 80h=activa ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +01 (3) ³ Primul sector fizic (cap,cil,sect) ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +04 (1) ³ Tip 1=DOS 12biti,4=DOS 16biti,5=DOS ³
³ ³ extins,6=DOS > 32M ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +05 (3) ³ Ultimul sector fizic (cap,cil,sect) ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +08 (4) ³ Numar de sectoare anterioare ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +0C (4) ³ Marimea partitiei in sectoare ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAÙ fig 2
Pentru zona de cap,cil,sector informatia este organizata astfel :
primul byte bitii 0-7 : cap 0-255 al 2-lea byte bitii 0-5 : sector 1-63
-"- biti 6,7 : partea high pt cil al 3-lea byte bitii 0-7 : partea low pt cil 0-1023
Se poate observa cum este impartit un harddisk in fig 3
ÚAAAAAAAAAAAAAAAAAAAAAAAA¿
³ Boot-sector de boot ³
AAAAAAAAAAAAAAAAAAAAAAAAAa
³ FAT 1 ³
AAAAAAAAAAAAAAAAAAAAAAAAAa
³ FAT 2 ³
AAAAAAAAAAAAAAAAAAAAAAAAAa
³ Root-director radacina ³
AAAAAAAAAAAAAAAAAAAAAAAAAa
³ Date-fisiere,directoare³
AAAAAAAAAAAAAAAAAAAAAAAAAÙ fig 3
Primul director este denumit root (radacina) deorace constitue baza structurii arborescente a directoarelor de pe disc. Legaturile dintre directoare si fisiere sunt continute in directoare. Fig. 4 arata cum este construita o astfel de intrare in director.
ÚAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
³ Adresa(lung) ³ Continut ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +00 (8) ³ Denumirea fisierului ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +08 (3) ³ Extensia fisierului ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +0B (1) ³ Atributul fisierului ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +0C (10) ³ Rezervat ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +16 (2) ³ Ora crearii ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +18 (2) ³ Data crearii ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +1A (2) ³ Primul cluster al fisierului ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ +1C (4) ³ Marimea fisierului ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAÙ fig 4
La inceputul intrarii se afla numele directorului, respectiv al fisierului.
Acest nume este constituit din 11 carctere, fara puncte intre nume si extensie.
Dupa nume urmeaza asa numitul atribut, care contine o informatie importanta:
cu ajutorul unui bit din acest byte se stabileste daca intrarea reprezinta un director sau un fisier.
bit 0 : 1=fisier read-only, 0=normal bit 1 : hidden bit 2 : system bit 3 : identificator volum bit 4 : subdirector bit 5 : arhivare
Tot in aceasta intrare sunt stocate date referitoare la dimensiunea fisierului si la data si ora crearii. Aceste date nu sunt necesare S.G.F.-ul, el le memoreaza dar nu le utilizeaza.
marime fisier=word1+65536 x word2
unde word1 reprezinta cei 16 biti inferiori iar word2 bitii superiori din dword-ul de la adresa 1Ch.
Dimpotriva, campul Primul cluster este deosebit de important pentru S.G.F.
MS-DOS. Un cluster este o unitate logica care consta dintr-unul sau mai multe sectoare fizice invecinate. Aceasta inseamna ca sectoarele sunt grupate in mici entitati denumite clustere. In mod obisnuit un cluster contine un sector
pe o discheta si patru-opt sectoare pe un harddisk.
Exista doua motive care justifica acesta grupare: pe deoparte timpul este mai eficient utilizat daca S.G.F. scrie mai multe sectoare odata. Acest
mod de lucru conduce insa la o risipa de spatiu de memorie. Astfel, de exem plu, fisier cu dimensiunea de doar 10 Byte ocupa un cluster, si deci 4 sectoare.
Al doilea motiv care justifica gruparea cintareste mai greu: MS-DOS nu poate trata mai mult de circa 65.000 de unitati (sectoare, respectiv clustere) de pe un harddisk. Cu aceasta la o dimesiune tipica de sector de
512 Byte dimensiunea maxima a unui harddisk este limitata de aproximativ de
32 MByte. Daca sectoarele sunt grupate in unitati mai mari, atunci se extinde si aceasta valoare limita. Cu patru sectoare per cluster dimensiunea maxima
a unui harddisk devine de 128 MByte.
La un harddisk de tip AT, un cluster este compus, de regula, din patru sectoare, exceptind cazul cind volumul depaseste capacitatea de 128 MBytes. Deoarece in
FAT sint rezervati maximum 16 biti pentru inscrierea unui cluster, pot fi gestionate maximum 65536 clustere. La patru sectoare pe cluster si 512 bytes pe sector,
rezulta exact acei 128 MBytes ca marime maxima a unui volum. MS-DOS gestioneaza
volume mai ample, prin faptul ca, in functie de marimea volumului, cuprinde
un numar crescut de sectoare intr-un cluster. Astfel de marimi intre 128 si 256
MBytes,
8, intre 256 si 512, 16, intre 512 MBytes si 1 GBytes, 32, iar intre 1 GByte
si
2 GByte, 64 de sectoare sint cuprinse intr-un cluster. Genialitatea acestui
procedeu consta in faptul ca structura FAT nu este influentata si in plus, ea poate fi
gestionata in toate cazurile, de aceeasi rutina. Formind clusterele, se evita
o fragmentare excesiva a fisierelor. In schimb, acest lucru nu poate fi evitat
la lucrul pe un disc pe care se creeaza si de pe care se sterg foatre des fisiere.
Atita timp cit volumul este proaspat creat, fisierele pot fi scrise pe un disc
unul dupa altul. Dupa prima stergere, golul produs trebuie completat. Daca fisierul
nou este mai mare decit cel vechi, trebuie fragmentat cel putin in doua parti. Ca
exemplu vom folosi un caz extrem, fara formare de clustere, la care un fisier de 100 de sectoare, este fractionat in 100 de sectoare fizic distantate intre
ele. Intirzierile care intervin numai din pozitionarea de 100 de ori a capului de citire sint inadmisibile. Deci prin formarea clusterelor se garanteaza totusi faptul ca, patru sectoare fiind citite consecutiv, capul trebuie pozitionat numai de 25 de ori. Cistigul de viteza este cu atit mai mare, cu cit numarul
de sectoare pe cluster este mai mare. Impartirea pe clustere are insa un dezavantaj: cu cresterea numarului de sectoare pe cluster creste risipa de spatiu. La un
fisier de 100 de bytes, cum ar fi "config.sys" fara clustere, se risipesc
412 bytes, deoarece un sector cuprinde 512 bytes iar cu patru sectoare pe cluster, se risipesc deja 3*512+412=1948, cu 64 de sectoare/cluster 63*512+412=32668
bytes.
Sa revenim la cimpul Primul cluster. Valoarea acestui cimp stabileste pozitia de inceput pe harddisk a fisierului. Cu toate ca de regula un fisier
ocupa mai multe clustere, in director nu exista memorat decit primul cluster.
Cum se regasesc celelalte clustere ale fisierului ?
Raspusul este dat de structura de date conceputa special pentru acest scop. Ea este denumita File Allocaton Table (tabela de alocare a fisierelor), mai scurt FAT. Aceasta structura este atit de importanta incit pe fiecare disc ea est stocata in dublu exemplar.
Sistemul de operare MS-DOS se ingrijeste ca ambele copii sa se gaseasca in aceasi stare, fapt care poate fi verificat cu comanda chkdsk. In sarcina
acestui program cade verificarea continutului celor doua FAT-uri, atit una fata de cealalta cit si in sine. Mesajele de eroare furnizate de chkdsk releva
date inconsistente sau eronate, in una sau in ambele copii FAT.
0 F8FF tipul discului-media descriptor
1 FFFF rezervat-lest
2 FFFF sfirsit pentru f2
3 0004 cluster urmator pentru f1
4 0008 cluster urmator pentru f1
5 0006 cluster urmator pentru f3
6 0007 cluster urmator pentru f3
7 FFFF sfirsit pentru f3
8 0009 cluster urmator pentru f1
9 000A cluster urmator pentru f1
A FFFF sfirsit pentru f1
B 0000 cluster liber
C 0000 cluster liber
D 0000 cluster liber fig 5
In fig 5 este dat un mic exemplu al unui FAT. Asa cum se poate observa, pentru fiecare cluster exista cite o intrare in FAT. Numarul clusterului serveste ca index in FAT. In functie de faptul daca, si cum, un cluster este ocupat intrarea ia diferite valori.
Valoarea 0 desemneaza un cluster liber care poate fi utilizat la crearea unui nou fisier, respectiv a unui nou director. Valorile de la FFF0h pina la
FFF6h sunt rezervate, iar valoarea FFF7h desemneaza un cluster defect in care
nu pot fi memorate date. Valorile de la FFF8h pina la FFFFh specifica faptul ca
este vorba de ultimul cluster al unui fisier. Toate celelalate valori au o semnificatie simpla: contin numarul urmatorului cluster al fisierului.
Daca intrarea in director are cimpul primului cluster memorind valoarea
0003h, in a treia intrare in FAT (fig 5) vom gasi valoarea 0004h. Aceasta inseamna ca al doilea cluster al fisierului f1 este clusterul numarului 4. In a patra
intrare in FAT vom gasi valoarea 0008h, deci clusterul numarul 8 este al treilea
cluster al fisierului. FAT-ul este parcurs in continuare pina cind este intilnita
valoarea FFFFh. Aceasta insemna ca ultimul cluster al fisierului este numarul
10.
Deci fisierul f1 consta din 5 clustere, numerele 3, 4, 8, 9 si 10, in aceasta
ordine.
Putem trage o concluzie asupra modului in care MS-DOS citeste un fisier.
Mai intii sistemul de operare cauta in director o intrare care sa contina numele fisierului dorit. Din acesta intrare este citit numarul primului cluster. Apoi
este citita tabela de alocare a fisierelor (FAT). Numarul primului cluster este utilizat ca index pentru citirea unei valori in tabel. Daca aceasta valoare
este mai mare decat FFF7h insemna ca fisierul a fost citit in intregime. Astfel valoarea citita da numarul urmatorului cluster care trebuie citit. Acest numar
va servi din nou ca index pentru urmatoarea valoare din FAT, si se continua
pana cand este gasit ultimul cluster.
Caracteristici speciale
S.G.F.MS-DOS are doua carcteristici speciale: un fisier poate fi sters foarte usor si poate fi recuperat la fel de usor. Pentru aceasta nu trebuie
modificate decat FAT-ul si intrarea in director. Datele propriu-zise nu sint distruse. Pentru a restaura un fisier sters nu trebuie decit sa se gaseasca
vechea intrare in director. Numarul primului cluster se afla inca nemodificat in acesta intrare cu toate ca intrarea este marcata ca "stearsa" (E5h primul
octet).
Pornind de la acest prim cluster, cu ajutorul FAT-ului pot fi regasite toate celelalte clustere. Singura conditie este ca dupa stergere nici unul din aceste clustere sa nu fi fost alocat altui fisier. Aceasta este tehnica
utilizata de utilitarele care recupereaza fisierele sterse.
Trebuie definite toate zonele de pe disc care sint la dispozitia sistemului. Daca in plus la pornirea calculatorului am vrea sa porneasca direct
de pe harddisk, este neaparat nevoie de "incarcatorul de partitii".
Acesta este un mic program fara de care pornirea "automata" a calculatorului nu
ar fi posibila.
Partitia este un domeniu continuu de pe harddisk, care fizic reprezinta toate sectoarele dintre doua adrese de pe harddisk. O adresa de harddisk este
formata dintr-un triplet de valori si anume numarul de cilindru, numarul de
cap si numarul de sector. Sectoarele de pe o pista se numeroteaza totdeauna incepind cu "1", iar capetele de citire/scriere precum si cilindrii se numeroteaza
totdeauna incepind cu 0 si terminind cu (numarul_maxim-1).
Hotaritor in partitionarea harddisk-ului este asa-numitul "articol de partitionare". El se gaseste pe aproape toate harddisk-urile si ocupa intotdeauna primul sector (absolut) de date (sectorul 1, cilindrul 0, capul
0).
Trebuie spus ca acesta este singurul articol de pe fiecare harddisk, a carui pozitie este cunoscuta. Pozitia tuturor celorlalte date (de exemplu cea a sectorului de boot, a tabelei de alocare si a fisierelor) este variabila.
Pozitia lor depinde direct, mai mult sau mai putin, de datele din "articolul de partitionare".
Marimea standard a sectorului la harddisk-urile PC-urilor compatibile
IBM este de 512 Byte. In ciuda acestei dimensiuni mai degraba mici, toate datele necesare articolului de partitionare pot fi depuse usor pe un singur
sector.
Dupa cum se poate observa din figura 2, articolul de partitionare se compune din trei parti. La inceput se afla incarcatorul de partitii, la deplasamentul constant 446 (1BC hex) se afla tabela de partitii (de 64 Byte) iar la sfirsit se afla marcajul de date de sistem (2 bytes - anume 55AAh).
Acest marcaj nu se gaseste doar in articolul de partitionare ci si in articolul de boot, si ocupa intotdeauna ultimii doi octeti.
Gratie acestui marcaj, programele sunt in stare sa determine repede si simplu, daca datele din cadrul acestui sector sunt - sau nu - interpretabile conform asteptarilor.
Daca de pilda la un articol de partitionare, altfel bun, se sterge acest marcaj, atunci, dupa pornirea sistemului de pe discheta, sistemul de operare DOS nu poate accede harddisk-ul. Nici pornirea sistemului de pe harddisk nu se poate face in aceste conditii.
Incarcatorul de partitii este un program in limbaj masina, lung de aproximativ 220 octeti, care joaca un rol scurt, dar important, la fiecare pornire a calculatorului de pe harddisk (pornire " la rece " sau "
la cald ").
O descriere generala a pornirii sistemului va ajuta la o intelegere mai buna a fenomenului.
De fiecare data cind un PC este pornit sau cind sa apasat tasta RESET, calculatorul se initializeaza. El se pune deci intr-o stare initiala diferita
.
Pentru aceasta procesorul executa rutinele POST (Power On Self Test) memorate
in ROM. POST este o componenta fixa, care se gaseste, pe toate PC-urile, in
BIOS (Basic Input Ouput System) si raspunde de faptul ca toate unitatile externe sa fie initializate si aduse in stare operationala (din punct de vedere al procesorului). Rutinele acestea cunosc toate cartelele de comanda (de exemplu "Timer", "Controller de harddisk", "Controler
de intreruperi", etc.).
Ele verifica functionalitatea fiecarei componente pentru ca apoi sa le aduca
intr-o stare initiala definita.
In momentul in care calculatorul este pe deplin operational, ceea ce inseamna ca toate resursele (cum ar fi RAM, harddisk-ul sau interfetele) sunt
operationale, intra in actiune asa-numitul "incarcator BOOTSTRAP".
Daca in acest moment in unitatea A se afla o discheta, aceasta citeste primul sector de pe
ea
(0, 0, 1) in memoria de baza (la adresa " 7C00 hex " ) si preda controlul
asupra procesorului, fara nici o alta verificare, codului citit de pe disc.
Daca este vorba de articolul de boot al unei dischete sistem, atunci acest sector porneste procedura de incarcare, iar incarcatorul de partitii nu mai intra in actiune. Deoarece dischetele nu pot fi partitionate, primul lor sector va contine intotdeauna articolul de boot. Deci, din punct de vedere logic o discheta este de fapt o partitie de sine statatoare, continand toate componentele specifice necesare sistemului de operare, dintre care primul este
totdeauna articolul de boot.
Daca in unitate nu se afla nici o discheta, incarcatorul de BOOTSTRAP citeste articolul de partitionare in memoria de baza (la adresa sa fixa 7C00h si preda incarcatorului de partitii controlul asupra procesorului. Acesta mai intii, se copiaza pe el insusi, cu tot cu tabela de partitii si marcajul
de date sistem de la adresa 7C00h la adresa 0600h (in memoria de baza), astfel
incit zona tampon de la adresa 7C00h sa se elibereze pentru alte date. In continuare, el cauta in tabela de partitii (care se afla la sfirsitul articolului de partitionare), o asa-numita "partitie activa". In momentul in care
in tabela gaseste o inregistare cu caracteristicile cautate, incarcatorul de partitii
extrage de aici adresa de inceput (pe harddisk) a partitiei respective, preluind exact un sector de la aceea adresa. Acest sector va fi depus in memoria de baza, la adresa 7C00h. Daca acest sector contine marcajul de date sistem, atunci incarcatorul de partitii presupune ca este vorba despre articolul de boot al
partitiei si ii preda acestuia controlul asupra procesorului.
Daca marcajul de date sistem lipseste sau nu exista partitie activa in tabela, atunci incarcatorul de partitii da un mesaj corespunzator la consola si apoi "opreste" calculatorul (lasind procesorul sa execute o bucla
infinita).
Predind controlul articolului de boot al partitiei active din tabela de partitii, incarcatorul de partitii initiaza incarcarea sistemului care se afla in cadrul acelei partitii. In cadrul partitiei se foloseste totdeauna un tip specific de gestiune a datelor, caracteristic unui anumit sistem de operare.
Din momentul in care articolul de boot obtine controlul, intre pornirea sistemului de operare de pe discheta si pornirea de pe harddisk nu exista diferente principale. Functie de datele inglobate in el, stabileste pozitia directorului radacina si verifica daca exista acolo cele doua fisiere constructive ale sistemului
de operare, IBMBIO.COM si IBMDOS.COM (respectiv, la MS-DOS, fisierele corespunzatoare
(IO.SYS si MSDOS.SYS). Daca le gaseste pe amindoua, atunci articolul de boot
calculeaza pozitia de inceput a zonei de date a partitiei pe harddisk si incarca de acolo fisierul IBMBIO.COM in memoria de baza. Acesta contine administrarea
fisierelor, incarca IBMDOS.COM, prelucreaza comenzile din CONFIG.SYS si incarca la sfirsit procesorul de comenzi COMMAND.COM. Acesta la rindul sau executa comenzile din fisierul AUTOEXEC.BAT, dupa care, in fine, pe ecran se afiseaza prompter-ul obisnuit - sistemul a pornit.
Si fisierul IBMBIO.COM citeste articolul de partitionare in memoria de baza, parcurgind tabela de partitii cu scopul de a disponibiliza , prin intermediul sistemului de operare, toate unitatile logice DOS (incepind cu C).
Nu trebuie sa mire faptul ca primele doua inregistrari din directorul radacina al unei partitii DOS incarcabile contin intotdeauna date referitoare
la cele doua fisiere amintite ale sistemului de operare si ca ele se afla intotdeauna la inceputul domeniului de date. Motivul este ca articolul de boot, avind de
regula doar 512 octeti, poate calcula, cu ajutorul datelor sale despre partitie, pozitia exacta de inceput a directorului radacina si a zonei de date, dar datorita marimii sale reduse, el nu poate sa gaseasca direct inregistrari de fisiere in directoare sau chiar fisiere din cadrul partitiei.
Pentru completare vom detalia pe scurt structura unei partitii DOS.
Exceptind raportul de marimi al celor patru componente importante, fiecare partitie DOS are aceeasi structura (vezi fig.3):
-articolul de boot
-tabela de alocare a fisierelor
-directorul radacina
-zona de date
Primul este intotdeauna sectorulul de boot.
El este urmat de tabela de alocare a fisierelor (File Allocation Table-FAT)
si copiile de siguranta ale acesteia. FAT reprezinta un fel de plan de ocupare
pentru administrarea fisierelor, iar marimea ei depinde direct de marimea totala a
partitiei.
Directorul radacina ocupa de regula 32 de sectoare de harddisk-uri, oferind
astfel loc pentru 512 inregistrari de fisiere (sau subdirectoare). In cazul dischetelor, de3 regula, numarul inregistrarilor din fisierul radacina este mai mic.
In sfirsit, zona de date cuprinde atat toate fisierele cat si toate subdirectoarele (care, sub DOS, sunt administrate ca niste fisiere).
Sa revenim acum la cea mai importanta parte a articolului de partitionare: tabela de partitii. In general ea are o marime de 64 bytes si se afla intotdeauna
imediat inaintea marcajului de date sistem, la sfarsitul inregistrarii. Tabelul ofera loc pentru exact 4 inregistrari a 16 octeti. Fiecare inregistrare reprezinta
datele cadru despre o partitie inchisa in sine. Acest lucru inseamna ca un singur harddisk pote gazdui pina la patru sisteme de operare diferite, fiecare cu propria lui administrare de date. Prin simpla mutare a indicatorului de "partitie activa" de la o inregistrare la alta in tabela, incarcatorul
de partitie va fi determinat sa incarce, la o noua pornire a sistemului, sistemul de operare din partitia nou aleasa. Se presupune ca partitia e bootabila, deci ca se poate incarca un sistem de operare de acolo.
Fig 2 arata structura unei inregistrari din tabela, identica pentru toate inregistrarile de acest fel. Fiecare inregistrare e compusa din urmatoarele componente (in prima coloana- spatiul ocupat):
* indicatorul de BOOT (1 Byte )
* adresa de inceput a partitiei (3 Byte)
* indicatorul de sistem (1 Byte)
* adresa de sfarsit a partitiei (3 Byte)
* sectoare rezervate (4 Byte)
* lungimea in sectoare a partitiei(4 Byte)
Cu ajutorul "indicatorului de BOOT", incarcatorul de partitii determina daca o partitie e "activa" sau nu. Valoarea inmagazinata acolo nu
contine insa doar o informatie binara, ci determina in plus si unitatea de disc pe care se
afla partitia.
Pentru o mai buna intelegere, sa explicam urmatoarea stare de lucruri: toate accesarile asupra unitatilor de harddisk si de discheta se fac intotdeauna prin BIOS, printr-o interfata definita. Aceasta e integrata in calculator deja de producatorul calculatorului, sub forma unor componente ROM.
Pentru a adresa un anumit sector sau o grupa de sectoare (pe harddisk sau pe discheta) sunt necesari intotdeauna 5 octeti. Un octet e folosit pentru determinarea unitatii, unul determina marimea blocului (in sectoare) si restul de 3 octeti sunt ocupati cu informatiile despre cilindru, cap si sector.
Unitatile de discheta se adreseaza intotdeauna incepand cu "0".Unitatea
A e adresata deci cu valoarea "0" si unitatea B cu "1".
Unitatile de harddisk
-din care pot fi mai multe pe un calculator- se adreseaza intotdeauna incepand cu "128" ("80 hex"). Un al doilea harddisk ar putea fi adresat
deci prin codul de unitate "129"("81 hex").
Incarcatorul de partitii distinge, in forma sa uzuala, doar valorile "0"
(nu e partitia activa) si "80 hex" (partitia activa de pe harddisk-ul
"1"), dar foloseste indicatorul de BOOT pentru incarcarea articolului de BOOT al respectivei
partitii. Astfel, cu cateva modificari in codul incarcatorului de partitii,
fara modificari hard de configuratie, se poate incarca un sistem de operare
de pe oricare din harddisk-urile instalate.
Adresa de inceput a partitiei descrie, sub forma unei combinatii
nr.cilindru + nr. cap + nr. sector,
adresa disc la care incepe partitia. Informatiile continute in cei trei octeti
nu sunt separate in intregime si corespund formatului in care trebuie sa fie
predate interfetei BIOS pentru incarcarea articolului de BOOT. Primul octet
contine nr. de cap, urmatoarele doua nr. cilindrului si al sectorului. Cei doi biti superiori ai nr.-lui de cilindru -format din 10 cifre binare - (e vorba
aici de sistemul "dual") se regasesc in bitii 6 si 7 ai octetului
numarului de sector, (nr. de sector fiind format din 6 cifre binare). Se deduce ca se pot
adresa prin intermediul BIOS-ului incorporat harddisk-uri cu o dimensiune maxima de 256 de capete (2^8), 1024 cilindri (2^10) si 64 de sectoare pe pista
(2^6) (max 8 Gb).
Indicatorul de sistem descrie pe un octet tipul partitiei , determina deci carui sistem de operare , respectiv carui tip de gestiune a datelor ii
apartine respectiva partitie. Valorile uzuale pentru partitiile DOS sunt:
* 1 = partitie DOS < 16 Mbyte, cu administrare FAT de 12 biti;
* 4 = partitie DOS intre 16 si 32 Mbyte si cu administrarea FAT de 16 biti;
* 5 = partitie DOS extinsa (Vezi mai jos) ;
* 6 = partitie DOS > 32 Mbyte cu administrare FAT de 16 biti.
Fiecare sistem de operare (CP/M, OS/2, Xenix, etc.) are identificatorul sau specific, cu ajutorul caruia poate determina foarte repede, in faza de BOOT daca partitia respectiva va fi sau nu recunoscuta (si odata cu ea administrarea
de fisiere aferenta) si daca va fi preluata in randul unitatilor logice disponibile.
Daca cautam articolul de partitionare cu ajutorul lui "Partition Table
Editor" din " Norton Utilities " si apasam de mai multe ori pe
tasta <SPATIU> in cimpul BOOT, se pot vizualiza toate tipurile de sistem posibile, in clar,
cu numerele aferente in modul hex .
Adresa de sfirsit a partitiei indica ultimul sector ce face parte din partitia respectiva si corespunde intru totul, ca structura, adresei de inceput a partitiei. Cimpul de patru octeti folosit pentru numarul de sectoare rezervate contine o valoare de 32 de biti (dublu cuvint) care indica
cite sectoare se afla intre inceputul harddisk-ului (adresa 0,0,1) si adresa de start a partitiei. Si lungimea partitiei este data de un dublu cuvint
care indica cite sectoare contine partitia respectiva. In fond aceasta informatie si adresa de sfirsit a partitiei ar fi redundante, dar ea foloseste programelor care au nevoie de aceasta informatie, scutindu-le de conversii de la un format
de date la altul .
In mod normal, dupa pornirea sistemului de operare de pe harddisk, ne aflam pe unitatea logica C si acolo in directorul radacina (vizualizat pe ecran prin prompterul " C: ") . Daca sistemul este boot-at de pe unitatea
de discheta, atunci unitatea A: devine unitatea logica curenta (asa numitul
"current drive" in terminologia DOS).
Mai mult : cele mai multe sisteme " cunosc " unitati logice suplimentare
.
Unitate B este de obicei cea de a doua unitate de dischete, iar harddisk-ul poate fi partitionat, la rindul lui, in mai multe unitati (logice).
Aceasta se selecteaza la pornirea sistemului de operare si se denumesc in ordine crescatoare, incepind cu litera "D:", "E:", "F:",
etc.
Partitia de boot devine intotdeauna unitatea logica C si nu poate cuprinde si
alte unitati logice. Toate celelalte unitati logice nu se afla intr-o partitie
proprie, ci sint adunate, in asa numita partitie extinsa .
Deci un sistem " curat " DOS nu va avea nevoie niciodata de mai mult de doua inregistrari in tabela de partitii. Indiferent de numarul de unitati
logice care exista in afara de C, ele se vor gasi toate intr-o singura partitie, deci intr-un domeniu de disc continuu. Din punct de vedere fizic, unitatile
logice de disc sint zone de disc succesive, care "intra" exact in limitele
partitiei extinse.
Unitatile logice incepind cu D: se pot imagina ca un sir de partitii
(extinse) incapsulate, fiecare partitie extinsa fiind formata (cu exceptia ultimei unitati logice) din domeniul de harddisk aferent unitatii logice si o alta partitie extinsa. Fiecare partitie extinsa poseda un "articol de
partitie extinsa" propriu, structura sa fiind identica cu cea a articolului de partitionare.
Fiecare dintre aceste articole de partitionare contine o inregistrare, ce caracterizeaza domeniul de disc aferent unitatii logice si tipul de gestiune a fisierelor aferent ei.
Atita timp cit nu este vorba de ultima unitate logica, exista o inregistrare suplimentara pentru o alta partitie extinsa. Dimensiunea acesteia corespunde exact marimii partitiei extinse "actuale", din care se
scade domeniul de disc corespunzator unitatii logice specificate in cealalta inregistrare a
tabelei.
Articolul de partitionare extinsa a ultimei unitati logice poseda desigur doar o singura inregistrare pentru domeniul sau de pe disc si incheie astfel incapsularea, deoarece a fost atins sfirsitul partitiei extinse initiale.
La un sistem tipic, cu un singur harddisk si o partitie primara DOS (unitate
C), o partitie extinsa DOS poate cuprinde pana la 23 de unitati logice (de la D
la Z).
Asa-numitele partitii non-DOS pot fi utilizate de alte sisteme de operare, cum
ar fi Novell Netware. In aceste cazuri, MS-DOS nu recurge la aceste partitii.
MS-DOS 4.0 si 5.0 permit unitati logice de pana la 2GByte. La aceasta capacitate o unitate fizica poate fi impartita in pana la 24 unitati logice, ceea ce simplifica
foarte mult lucrul.
La pornirea sistemului, DOS trece prin intregul lant de inregistrari si indicatoare. Dupa care este in masura sa ataseze fiecarei litere-unitate
logica un domeniu de harddisk exact definit.
Pentru a intelege mai bine explicatiile de mai sus vom da un mic exemplu: un harddisk contine 60 de cilindri si este impartit astfel: unitatea C ocupa
20 de cilindri, unitatea D tot 20, iar unitatile E si F cite 10 cilindri. In articolul de partitionare se afla la inceput 2 inregistrari: o partitie DOS
incepind de la cilindrul 20 pina la 49 si o partitie extinsa de la cilindrul 40 pina
la
59. Articolul de partitie extinsa contine in primul sector al cilindrului 40
din nou doua inregistrari. O partitie DOS de la cilindrul 40 pina la 59 si o partitie extinsa de la cilindrul 50 pina la 59. In ultimul articol de partitie
extinsa in primul sector al cilindrului 50 nu se gaseste decit o singura inregistrare : o partitie DOS de la cilindrul 50 pina la cilindrul 59. Mai ramine doar sa amintim ca articolul de partitionare este o componenta pasiva
a programului FDISK.EXE si el este copiat de acesta pe harddisk la initializare.
Daca bit-ul 4 din octetul atribuit este setat, intrarea din director este un subdirector. Acesta este gestionat dinamic de FAT (ca si datele de altfel) astfel incit, teoretic, poate deveni nelimitat de mare. La crearea unui subdirector
MS-DOS rezerva initial doar un cluster. Pe parcursul extinderii, se genereaza o inlantuire de clustere (cum s-a explicat mai sus) gestionate de FAT. Intrarea din directorul principal indica -exact ca la fisiere-primul cluster.Intrarile din subdirector au aceeasi structura cu cele din directorul principal. Fiecare subdirector contine semnele:"."pentru directorul actual si ".." pentru cel ierarhic
superior. Aceste intrari nu pot fi sterse cu comanda del. Domeniul propriu-zis al datelor, care
cuprinde si subdirectoarele, incepe dupa directorul principal. Numarul primului sector logic al domeniului datelor poate fi determinat prin urmatorul calcul:
nr.primului sector de date=nr.sectoare rezervate+nr.sectorFAT x nr.FAT-uri
+nr. de sectoare ale directorului principal
Cei trei termeni pot fi determinati pe baza innformatiilor din sectorul de
Boot astfel:numarul de sectoare din directorul principal se determina prin impartirea la 32 a numarului de intrari (adresa 11h), numarul de sectoare FAT prin inmultirea dintre informatia de la adresa 10h cu cea de la adresa 16h, iar numarul sectoarelor rezervate se gaseste la adresa 0Eh. Primul sector al unui fisier anume il puteti determina in felul urmator: se reduce cu doi numarul de clustere, deoarece primele doua cuvinte contin media-Descriptorul si "lest-ul", iar rezultatul
se inmulteste cu numarul de clustere. Deoarece acest numar nu se refera la primul sector din volum, ci la primul din domeniul datelor, mai trebuie adaugat aici numarul de
sector calculat mai sus.
Procedura la programarea directa, orientata pe sectoare, este deci relativ simpla.
Mai intii se citeste Boot-Sector-ul. Cu aceste informatii si cu celelalte ale directorului principal se poate apoi ajunge la orice sector de date. Programarea
utilizeaza functiile 00h din intreruperea BIOS 13h. Principalele functii sunt
02h (citirea sectoarelor), 03h (inregistrarea sectoarelor) si 04h (verificarea
sectoarelor). Numarul functiei se preda, ca de obicei, in registrul AH.
Celelalte registre sunt identice in cele trei cazuri. In registrul AL se preda
numarul de sectoare (1 pina la 128) care trebuie citite (inregistrate,verificate).
In registrul DL trebuie sa apara numarul harddisk-ului (80h pentru primul instalat pe PC, 81h pentru al doilea), iar in DH numarul capului de inregistrare/redare.
Registrul CH preia numarul cilindrului iar CL numarul primului sector care urmeaza a fi citit (inregistrat,verificat).
Rezulta faptul ca un harddisk poate avea mai mult decit 256 de cilindri, chiar daca intr-un registru de 8 biti pot fi inregistrate doar numere de a 0 la 255. Deoarece nici un cilindru nu contine mai mult de 63 sectoare, biti 7 si 8 pastreaza valoarea "0". De aceea le-au fost alocati bitii
8 si 9 ai unui numar de cilindru format din 10 biti. Pentru numarul de cilindru, lucrurile stau astfel:
Bitii 0-7:registrul CH, bitii 0-7
Bitii 8-9:registrul CL, bitii 6-7
Perechea de registri ES:BX trebuie sa indice intotdeauna memoria-tampon a
datelor
(buffer-ul). Iata doua example in acest sens. In primul exemplu urmeaza sa fie citite 20 sectoare, incepind cu cilindrul 999, sectorul 3, si capul 2 al primului harddisk instalat. In exemplul al doilea se inregistreaza cu date din memoria tampon 10 sectoare, incepind cu cilindrul 200, sectorul 20, capul 5 al celui de-al doilea harddisk. Daca operatia decurge fara greseala, toate functiile
intorc un CF pozitionat in 0. Daca apare o eroare, CF este pozitionat in 1,
iar registrul AH contine codul numeric al erorii.
;un program care citeste 20 de sectoare de pe harddisk.
data db 512 ;buffer date start: mov ah,02 ;cod pentru citire sector mov al,20 ;se citesc 20 sectoare mov dl,80h ;discul nr.1 mov dh,02 ;capul nr.2 mov ch,231 ;bitii 0-7 ai nr. de cilindru 999 mov cl,128+64+3 ;bitii 8-9 ai nr. de cilindru 999
;si numarul sectorului mov ds,es ;segmentul bufferului de date mov dx,offset data;offsetul buferului de date int 13h ;apelarea functiei
;un program care scrie 10 de sectoare pe harddisk.
data db 512 ;buffer date start: mov ah,02 ;cod pentru scriere sector mov al,10 ;se scriu 10 sectoare mov dl,81hex ;discul nr.2 mov dh,05 ;capul nr.5 mov ch,44 ;bitii 0-7 ai nr. de cilindru 300 mov cl,0+64+20 ;bitii 8+9 ai nr. de cilindru 300
;si numarul sectorului mov ds,es ;segmentul bufferului de date mov dx,offset data;offsetul bufferului de date int 13h; ;apelarea functiei