Sunteți pe pagina 1din 26

Sistemul de operare MS-DOS

MS-DOS a fost primul sistem de operare utilizat de calculatoarele personale. Deoarece, la


momentul aparitiei sale, procesoarele ofereau foarte putine dintre facilitatile disponibile astazi,
MS-DOS a mostenit o serie de limitari care l-au impiedicat sa se adapteze cu succes la noile
cerinte impuse sistemelor de
operare. Practic, MS-DOS nu permite executia decat a unui singur program la un moment dat
(este deci monotasking) si, in plus, nu poate asigura stabilitatea sistemului in cazul executiei unor
programe cu erori. Daca la aceasta adaugam si modul de lucru mai dificil pentru utilizator decat
in cazul interfetelor grafice oferite (de exemplu) de Windows, esteexplicabil faptul ca acest
sistem este astazi tot mai putin folosit si seprevede chiar abandonarea sa definitiva intr-un viitor
destul de apropiat. Totusi, MS-DOS este inca destul de larg utilizat in tara noastra, iar
simplitateasa il recomanda drept un bun material de studiu in ceea ce priveste structura si
functionalitatea unui sistem de operare.
Organizarea logica a discului
Denumirea sistemului (DOS) este prescurtarea sintagmei "Disk Operating System", ceea
ce indica de la inceput preponderenta pe care o are gestiunea discurilor in filosofia sa de
functionare. MS-DOS a aparut intr-o perioada in care discurile abia aparusera ca mediu de
stocare, la acea vreme fiind foarte folosite alte periferice, mai ales benzile magnetice. Utilizarea
discurilor in sistemele de calcul a fost un mare pas inainte in gestionarea informatiei, aducand o
serie de avantaje:
- o viteza de acces mult mai mare la datele stocate - posibilitatea accesului direct la
oricare pozitie de pe mediul de stocare (in cazul benzilor, pentru a se ajunge intr-un anumit loc
trebuie parcursa toata banda pana in acel punct)
- ca o consecinta directa a punctului anterior, posibilitatea de a se organiza datele intr-o
forma logica, independenta de organizarea lor fizica, tinand cont de legaturile conceptuale dintre
aceste date si nu de ordinea temporala in care au fost memorate Sa privim mai in detaliu
organizarea logica a datelor pe un disc, asa cum a impus-o sistemul DOS, deoarece toate
sistemele de operare aparute ulterior, fara exceptie, au preluat aceasta idee. Facem aici si
observatia ca discurile flexibile si cele dure sunt tratate in acelasi mod. Din punct de vedere
logic, unitatea de memorare a informatiei pe disc este fisierul.
Putem defini un fisier ca fiind o secventa de octeti care servesc unui scop comun. Care
este exact acest scop nu prezinta importanta pentru sistemul de operare, care asigura memorarea
tuturor fisierelor in acelasi mod, fara a face nici o deosebire intre ele. Un fisier nu are o lungime
fixa, ci contine atatia octeti cati sunt necesari pentru scopul pe care il indeplineste.

Observatie:
Trebuie sa explicam o conventie care poate crea confuzii in explicatiile care urmeaza. Fie un
director A care contine un alt director B, iar acesta contine la randul sau un fisier C. In acest caz nu putem
spune ca directorul A contine fisierul C, deoarece un fisier (sau subdirector) nu este continut decat de
catre
directorul in care este declarat. Totalitatea fisierelor si directoarelor dintr-o asemenea structura
arborescenta formeaza un sistem de fisiere. Un sistem de operare poate contine unul sau mai multe
sisteme de fisiere si are rolul de a asigura gestiunea acestora.
Cum poate accesa utilizatorul un fisier anumit dintr-o structura de directoare?
Fiecare fisier are un nume; in cazul sistemului DOS, numele unui fisier consta din doua parti:
- numele propriu-zis, care consta din 1-8 caractere (litere, cifre etc.)
- extensia, care poate avea pana la 3 caractere sau poate lipsi In sistemul DOS nu se face diferenta intre
literele mari si cele mici.
De asemenea, numele directoarelor se formeaza in acelasi fel ca si numele fisierelor obisnuite. Nu
este permis ca intr-un director sa existe doua sau mai multe fisiere cu acelasi nume. In schimb, este
posibil sa existe mai multe fisiere avand acelasi nume, dar aflate in directoare diferite. Rezulta ca un fisier
este caracterizat in mod unic de numele sau complet, care consta din numele fisierului, precedat de lantul
de directoare prin care se poate ajunge la fisier pornind de la directorul radacina. Cand este scris un
asemenea lant (numit si cale), caracterul care separa intre ele numele directoarelor este simbolul "\". In
practica s-a constatat ca, de cele mai multe ori, utilizatorul lucreaza perioade lungi de timp in mod
preponderent cu fisierele dintr-un anumit director (ceea ce este normal, deoarece structura de directoare a
fost creata tocmai pentru a permite gruparea fisierelor dupa rolul lor). Intrucat este relativ greu de a scrie
de fiecare data numele unui fisier precedat de calea pe care se afla in sistemul de fisiere, s-a introdus
notiunea de director curent. Directorul curent are proprietatea ca toate fisierele (si subdirectoarele) pe care
le contine pot fi identificate prin numele lor, fara a mai trebui precizata si calea. Pentru a evita conflictele,
un sistem de fisiere nu are decat un singur director curent la un moment dat. Utilizatorul poate schimba
directorul curent in orice moment, dupa dorinta. Sa dam cateva exemple de nume de fisiere:
\programe\tp\turbo.exe
\dos\ansi.sys
\autoexec.batfisier1.txttemp\fisier1.aux
In primele trei exemple se observa ca primul caracter al caii este "\", ceea ce inseamna ca se
porneste din directorul radacina. Al treilea exemplu reprezinta un fisier aflat chiar in directorul radacina.
In ultimele doua exemple, deoarece primul caracter nu este "\", calea porneste din directorul curent. Asa
cum am afirmat, pot exista mai multe sisteme de fisiere la un moment dat.
In primul rand, orice calculator contine mai multe dispozitive de stocare - o unitate de disc
flexibil si unul sau mai multe discuri hard. In al doilea rand, un disc dur poate fi impartit in mai multe
zone independente una de alta (numite partitii), fiecare dintre acestea continand cate un sistem de fisiere,
de asemenea independent de celelalte. Trebuie deci gasita o forma de a diferentia fisierele aflate in
sisteme de fisiere diferite, deci in structuri de directoare diferite.Solutia adoptata de sistemul DOS este de
a denumi fiecare
sistem de fisiere printr-o litera urmata de simbolul ":". Astfel, unitatile de disc flexibil sunt desemnate prin
literele a: si respectiv b:, iar discurile dure si apoi unitatile CD-ROM, precum si alte dispozitive de
stocare, primesc literele c:, d: etc. Aceasta litera precede denumirea fisierului, precizand astfel in care
sistem de fisiere trebuie cautat fisierul respectiv. Din aceste motive, sistemele de fisiere se mai numesc

unitati de disc, iar literele asociate lor, litere de disc. Similar directorului curent, exista si o unitate de disc
curenta, avand un rol analog. Practic, toate numele de fisiere (precedate sau nu de calea de directoare
corespunzatoare) de pe unitatea curenta nu au nevoie de a preciza care este unitatea pe care se afla. Mai
mult, fiecare unitate are propriul director curent. Desigur, utilizatorul poate decide atat unitatea curenta,
cat si directoarele curente pe toate unitatile de disc.
Exemple:c:\files\fisier1.txt numele fisierului este precedat de litera unitatii de disc si de calea de
directoare\files\fisier1.txt se precizeaza o cale pe unitatea de disc curent a fisier1.txt fisierul este cautat in
directorul curent al unitatii curented:fisier2.doc fisierul este cautat in directorul curent al unitatii d:,
deoarece calea care urmeaza dupa litera de disc nu incepe cu simbolul "\", deci nu se porneste din
radacina.
Cum realizeaza sistemul de operare gestiunea sistemelor de fisiere, altfel spus, cum este regasit pe
disc un fisier despre care in prima instanta se cunoaste doar numele?
Pentru a raspunde la aceasta intrebare trebuie sa urmarim cum isi organizeaza sistemul de operare
informatia pe disc. Mai intai se impun cateva consideratii sumare legate de organizarea fizica a discului.
Intr-un mod destul de asemanator memoriei, fiecare octet de pe disc este identificat printr-o adresa.
Practic insa, discul este impartit in zone de date de dimensiuni mai mari, numite sectoare (care au
in cele mai multe cazuri 512 octeti). Din motive tehnologice, cautarea unui octet pe disc consta din doua
etape distincte:- cautarea sectorului din care face parte octetul dorit- cautarea octetului respectiv in
sectorul din care face parte In general, prima etapa are o durata mult mai mare. Daca tinem cont ca, in
orice program, cel mai adesea se acceseaza in mod repetat datele invecinate, rezulta ca este mult mai
rapid sa citim printr-o singura operatie un grup mai mare de octeti decat sa realizam cate o operatie de
citire pentru fiecare dintre acei octeti (desigur, la fel se intampla si la scriere).Din acest motiv, citirile si
crierile de date pe disc nu se fac la nivel de octet, ci la nivel de bloc de octeti. Dimensiunea unui
asemenea bloc variaza in functie de mai multi factori. Primul sector al uni disc hard contine tabela de
partitii. Asa cum am aratat anterior, un disc hard poate contine mai multe zone independente una de alta,
numite partitii. Numarul maxim de paritii care pot fi create pe disc este 4 (desi poate fi marit prin anumite
mijloace, care nu intereseaza aici), deci tabela are 4 elemente. Fiecare element poate contine informatii
despre una dintre partitii, in principal adresele primului si ultimului sector din partitia respectiva (evident,
pentru a nu complica prea mult structura, partitiile sunt zone continui de date pe disc). In plus, deoarece la
pornirea calculatorului sistemul de operare este incarcat de obicei de pe disc, este marcata partitia care
contine sistemul de operare, numita partitie activa. Deoarece dischetele nu pot avea decat o singura
partitie, ele nu au tabela de partitii, iar structura unei dischete este identica cu a unei partitii de pe discul
hard.Structura unei partitii este urmatoarea:
FAT 1 FAT 2
Sectorul de boot Tabelele de alocare a fisierelor Directorul radacina
Zona de date
Sectorul de boot (sau de autoincarcare) contine un mic program care realizeaza incarcarea in memorie a
fisierelor care formeaza sistemul de operare. Acest sector nu este utilizat decat in cazul partitiei active.
Tabelele de alocare a fisierelor (FAT - File Allocation Table) memoreaza modul de ocupare cu informatie
a zonei de date a partitiei si sunt identice nu numai in structura, ci si in continut. Sistemul DOS mentine
doua copii tocmai pentru a putea restabili informatia in cazul cand una dintre tabele este alterata din
diverse motive. Asa cum am vazut, informatia este transferata inspre si dinspre disc in blocuri. La randul
sau, sistemul de operare stocheaza fisierele pe disc utilizand ca unitate elementara clusterul, care
reprezinta o zona continua formata din unul sau mai multe sectoare, in functie de caracteristicile discului.

In acest fel, un fisier va ocupa pe disc mai mult decat dimensiunea sa reala. De exemplu, pentru un disc
la care un cluster are 4 sectoare (deci 2048 octeti), un fisier de 9473 octeti va ocupa pe disc 5 clustere,
adica 10240 octeti. Tabela de alocare a fisierelor contine, pentru fiecare cluster de pe partitie, o valoare
care indica una din urmatoarele situatii:
- clusterul nu este alocat (nu contine nici un fel de informatie utila)
- clusterul este defect (eroare fizica pe disc)
- cluster rezervat pentru uzul sistemului de operare
- clusterul contine date ale unui fisier; in acest caz, valoarea din FAT
fie va reprezenta numarul clusterului care contine urmatoarele date ale aceluiasi fisier, fie va marca
(printr-o valoare speciala) faptul ca acest cluster contine finalul fisierului.Deci, pentru fiecare fisier exista
un lant de clustere care contin datele respectivului fisier. Practic, pentru a putea accesa un fisier in
intregime, trebuie cunoscuta numai adresa primului sau cluster si, utilizand informatiile din FAT, se pot
determina si clusterele urmatoare. Acest mod de memorare elimina necesitatea ca fisierele sa ocupe zone
continui de date pe disc, deoarece datele pot fi regasite si cand fisierul ocupa clustere aflate
in pozitii neinvecinate.
Urmatoarea zona o reprezinta directorul radacina. Acesta, ca si oricare alt director, este de fapt un
tabel ale carui elemente, numite si intrari in director, contin informatii despre cate un fisier sau
subdirector.
Aceste informatii sunt:
- numele fisierului
- numarul primului cluster ocupat de catre fisier
- dimensiunea fisierului
- data si ora cand a fost creat fisierul etc.
Pornind de la numele unui fisier, sistemul de operare il poate regasi pe disc. Sa luam ca exemplu
urmatorul nume (complet) de fisier:
c:\programe\bc\bin\bc.exe
In primul rand se identifica unitatea de disc pe care se face cautarea, in cazul de fata unitatea c:. Daca
unitatea de disc nu este precizata, sistemul cauta pe unitatea implicita. In continuare se observa ca,
deoarece calea incepe cu simbolul "\", autarea va porni din directorul radacina. In caz contrar, cautarea ar
porni din directorul curent al unitatii respective. Evident, este necesar sa fie cunoscuta pozitia pe disc a
directorului din care incepe cautarea. Asa cum am aratat, directorul radacina incepe de la o adresa fixa pe
disc, cunoscuta de sistem. In ceea ce priveste directorul curent, adresa de inceput a acestuia este retinuta
in permanenta de catre sistemul de operare. Deci, in oricare din cazuri, sistemul stie de unde sa inceapa
cautarea. Urmeaza inspectarea intrarilor din directorul radacina, pentru a gasi elementul corespunzator
subdirectorului programe. Daca nu exista un subdirector cu acest nume in directorul radacina, cautarea
este abandonata si sistemul de operare semnalizeaza esecul. Daca s-a gasit subdirectorul, se citeste adresa
primului sau cluster si, de la acea adresa, se incepe inspectarea
intrarilor sale pentru a gasi subdirectorul bc. Cautarea continua in acest fel pana cand se intalneste un caz
de eroare sau pana cand este gasit fisierul bc.exe. Din acest moment, folosind adresa primului cluster
ocupat de fisier si informatiile din FAT, fisierul poate fi accesat dupa dorinta.
Comenzi uzuale ale sistemului MS-DOS
Ca orice sistem ajuns la o anumita vechime, MS-DOS a cunoscut o serie de imbunatatiri de-a lungul
timpului, inclusiv adaugarea de noi instructiuni, practic fiecare versiune aducand ceva in plus in acest
sens. Totusi, numai cateva dintre aceste instructiuni sunt folosite cu adevarat frecvent. Datorita

importantei pe care o are sistemul de fisiere, majoritatea acestor comenzi uzuale se refera la manipularea
structurii de directoare si a continutului fisierelor. Iata o scurta prezentare a acestor comenzi:
litera_disc:
Schimba unitatea de disc curenta. Noua unitate curenta este cea a carei litera este inclusa in comanda.
Exemplu:
c: noua unitate de disc curenta este c:
dir
Afiseaza numele si eventual alte informatii despre fisierele si subdirectoarele din directorul curent de pe
unitatea curenta de disc sau dintr-un director precizat ca argument al comenzii. Daca se doreste precizarea
mai multor nume de fisiere simultan, se pot utiliza in construirea numelor de fisiere
si directoare asa-numitii specificatori de fisier, care sunt simboluri cu semnificatii speciale. Astfel,
simbolul "*" poate inlocui 0 sau mai multe caractere din numele unui fisier, iar simbolul "?" (mai rar
utilizat) poate inlocui 0 sau 1 caractere dintr-un nume. De asemenea, se pot folosi doua denumiri speciale
pentru directoare: "." reprezinta directorul curent al unitatii curente, iar ".." desemneaza directorul parinte
al directorului curent (adica directorul care il contine). Se observa ca aceste nume speciale nu pot fi
folosite in caile care pronesc din directorul radacina.

. Cand este scris un asemenea lant (numit si cale), caracterul care separa intre ele numele directoarelor
este simbolul "\". In practica s-a constatat ca, de cele mai multe ori, utilizatorul lucreaza perioade lungi de
timp in mod preponderent cu fisierele dintr-un anumit director (ceea ce este normal, deoarece structura de
directoare a fost creata tocmai pentru a permite gruparea fisierelor dupa rolul lor). Intrucat este relativ
greu de a scrie de fiecare data numele unui fisier precedat de calea pe care se afla in sistemul de fisiere, sa introdus notiunea de director curent. Directorul curent are proprietatea ca toate fisierele (si
subdirectoarele) pe care le contine pot fi identificate prin numele lor, fara a mai trebui precizata si calea.
Pentru a evita conflictele, un sistem de fisiere nu are decat un singur director curent la un moment dat.
Utilizatorul poate schimba directorul curent in orice moment, dupa dorinta. Sa dam cateva exemple de
nume de fisiere:
\programe\tp\turbo.exe
\dos\ansi.sys
\autoexec.batfisier1.txttemp\fisier1.aux
In primele trei exemple se observa ca primul caracter al caii este "\", ceea ce inseamna ca se porneste din
directorul radacina. Al treilea exemplu reprezinta un fisier aflat chiar in directorul radacina. In ultimele
doua exemple, deoarece primul caracter nu este "\", calea porneste din directorul curent. Asa cum am
afirmat, pot exista mai multe sisteme de fisiere la un moment dat.
In primul rand, orice calculator contine mai multe dispozitive de stocare - o unitate de disc flexibil si unul
sau mai multe discuri hard. In al doilea rand, un disc dur poate fi impartit in mai multe zone independente
una de alta (numite partitii), fiecare dintre acestea continand cate un sistem de fisiere, de asemenea
independent de celelalte. Trebuie deci gasita o forma de a diferentia fisierele aflate in sisteme de fisiere
diferite, deci in structuri de directoare diferite.Solutia adoptata de sistemul DOS este de a denumi fiecare
sistem de fisiere printr-o litera urmata de simbolul ":". Astfel, unitatile de disc flexibil sunt desemnate prin
literele a: si respectiv b:, iar discurile dure si apoi unitatile CD-ROM, precum si alte dispozitive de
stocare, primesc literele c:, d: etc. Aceasta litera precede denumirea fisierului, precizand astfel in care
sistem de fisiere trebuie cautat fisierul respectiv. Din aceste motive, sistemele de fisiere se mai numesc

unitati de disc, iar literele asociate lor, litere de disc. Similar directorului curent, exista si o unitate de disc
curenta, avand un rol analog. Practic, toate numele de fisiere (precedate sau nu de calea de directoare
corespunzatoare) de pe unitatea curenta nu au nevoie de a preciza care este unitatea pe care se afla. Mai
mult, fiecare unitate are propriul director curent. Desigur, utilizatorul poate decide atat unitatea curenta,
cat si directoarele curente pe toate unitatile de disc.
Exemple:c:\files\fisier1.txt numele fisierului este precedat de litera unitatii de disc si de calea de
directoare\files\fisier1.txt se precizeaza o cale pe unitatea de disc curent a fisier1.txt fisierul este cautat in
directorul curent al unitatii curented:fisier2.doc fisierul este cautat in directorul curent al unitatii d:,
deoarece calea care urmeaza dupa litera de disc nu incepe cu simbolul "\", deci nu se porneste din
radacina.
Cum realizeaza sistemul de operare gestiunea sistemelor de fisiere, altfel spus, cum este regasit pe disc un
fisier despre care in prima instanta se cunoaste doar numele?
Pentru a raspunde la aceasta intrebare trebuie sa urmarim cum isi organizeaza sistemul de operare
informatia pe disc. Mai intai se impun cateva consideratii sumare legate de organizarea fizica a discului.
Intr-un mod destul de asemanator memoriei, fiecare octet de pe disc este identificat printr-o adresa.
Practic insa, discul este impartit in zone de date de dimensiuni mai mari, numite sectoare (care au in cele
mai multe cazuri 512 octeti). Din motive tehnologice, cautarea unui octet pe disc consta din doua etape
distincte:- cautarea sectorului din care face parte octetul dorit- cautarea octetului respectiv in sectorul din
care face parte In general, prima etapa are o durata mult mai mare. Daca tinem cont ca, in orice
program, cel mai adesea se acceseaza in mod repetat datele invecinate, rezulta ca este mult mai rapid sa
citim printr-o singura operatie un grup mai mare de octeti decat sa realizam cate o operatie de citire pentru
fiecare dintre acei octeti (desigur, la fel se intampla si la scriere).Din acest motiv, citirile si crierile de date
pe disc nu se fac la nivel de octet, ci la nivel de bloc de octeti. Dimensiunea unui asemenea bloc variaza
in functie de mai multi factori. Primul sector al uni disc hard contine tabela de partitii. Asa cum am aratat
anterior, un disc hard poate contine mai multe zone independente una de alta, numite partitii. Numarul
maxim de paritii care pot fi create pe disc este 4 (desi poate fi marit prin anumite mijloace, care nu
intereseaza aici), deci tabela are 4 elemente. Fiecare element poate contine informatii despre una dintre
partitii, in principal adresele primului si ultimului sector din partitia respectiva (evident, pentru a nu
complica prea mult structura, partitiile sunt zone continui de date pe disc). In plus, deoarece la pornirea
calculatorului sistemul de operare este incarcat de obicei de pe disc, este marcata partitia care contine
sistemul de operare, numita partitie activa. Deoarece dischetele nu pot avea decat o singura partitie, ele nu
au tabela de partitii, iar structura unei dischete este identica cu a unei partitii de pe discul hard.Structura
unei partitii este urmatoarea:
FAT 1 FAT 2
Sectorul de boot Tabelele de alocare a fisierelor Directorul radacina
Zona de date
Sectorul de boot (sau de autoincarcare) contine un mic program care realizeaza incarcarea in memorie a
fisierelor care formeaza sistemul de operare. Acest sector nu este utilizat decat in cazul partitiei active.
Tabelele de alocare a fisierelor (FAT - File Allocation Table) memoreaza modul de ocupare cu informatie
a zonei de date a partitiei si sunt identice nu numai in structura, ci si in continut. Sistemul DOS mentine
doua copii tocmai pentru a putea restabili informatia in cazul cand una dintre tabele este alterata din
diverse motive. Asa cum am vazut, informatia este transferata inspre si dinspre disc in blocuri. La randul
sau, sistemul de operare stocheaza fisierele pe disc utilizand ca unitate elementara clusterul, care
reprezinta o zona continua formata din unul sau mai multe sectoare, in functie de caracteristicile discului.

In acest fel, un fisier va ocupa pe disc mai mult decat dimensiunea sa reala. De exemplu, pentru un disc
la care un cluster are 4 sectoare (deci 2048 octeti), un fisier de 9473 octeti va ocupa pe disc 5 clustere,
adica 10240 octeti. Tabela de alocare a fisierelor contine, pentru fiecare cluster de pe partitie, o valoare
care indica una din urmatoarele situatii:
- clusterul nu este alocat (nu contine nici un fel de informatie utila)
- clusterul este defect (eroare fizica pe disc)
- cluster rezervat pentru uzul sistemului de operare
- clusterul contine date ale unui fisier; in acest caz, valoarea din FAT
fie va reprezenta numarul clusterului care contine urmatoarele date ale aceluiasi fisier, fie va marca
(printr-o valoare speciala) faptul ca acest cluster contine finalul fisierului.Deci, pentru fiecare fisier exista
un lant de clustere care contin datele respectivului fisier. Practic, pentru a putea accesa un fisier in
intregime, trebuie cunoscuta numai adresa primului sau cluster si, utilizand informatiile din FAT, se pot
determina si clusterele urmatoare. Acest mod de memorare elimina necesitatea ca fisierele sa ocupe zone
continui de date pe disc, deoarece datele pot fi regasite si cand fisierul ocupa clustere aflate
in pozitii neinvecinate.
Urmatoarea zona o reprezinta directorul radacina. Acesta, ca si oricare alt director, este de fapt un tabel
ale carui elemente, numite si intrari in director, contin informatii despre cate un fisier sau subdirector.
Aceste informatii sunt:
- numele fisierului
- numarul primului cluster ocupat de catre fisier
- dimensiunea fisierului
- data si ora cand a fost creat fisierul etc.
Pornind de la numele unui fisier, sistemul de operare il poate regasi pe disc. Sa luam ca exemplu
urmatorul nume (complet) de fisier:
c:\programe\bc\bin\bc.exe
In primul rand se identifica unitatea de disc pe care se face cautarea, in cazul de fata unitatea c:. Daca
unitatea de disc nu este precizata, sistemul cauta pe unitatea implicita. In continuare se observa ca,
deoarece calea incepe cu simbolul "\", autarea va porni din directorul radacina. In caz contrar, cautarea ar
porni din directorul curent al unitatii respective. Evident, este necesar sa fie cunoscuta pozitia pe disc a
directorului din care incepe cautarea. Asa cum am aratat, directorul radacina incepe de la o adresa fixa pe
disc, cunoscuta de sistem. In ceea ce priveste directorul curent, adresa de inceput a acestuia este retinuta
in permanenta de catre sistemul de operare. Deci, in oricare din cazuri, sistemul stie de unde sa inceapa
cautarea. Urmeaza inspectarea intrarilor din directorul radacina, pentru a gasi elementul corespunzator
subdirectorului programe. Daca nu exista un subdirector cu acest nume in directorul radacina, cautarea
este abandonata si sistemul de operare semnalizeaza esecul. Daca s-a gasit subdirectorul, se citeste adresa
primului sau cluster si, de la acea adresa, se incepe inspectarea
intrarilor sale pentru a gasi subdirectorul bc. Cautarea continua in acest fel pana cand se intalneste un caz
de eroare sau pana cand este gasit fisierul bc.exe. Din acest moment, folosind adresa primului cluster
ocupat de fisier si informatiile din FAT, fisierul poate fi accesat dupa dorinta.
Sa dam cateva exemple de nume de fisiere:
\programe\tp\turbo.exe
\dos\ansi.sys
\autoexec.batfisier1.txttemp\fisier1.aux
In primele trei exemple se observa ca primul caracter al caii este "\", ceea ce inseamna ca se porneste din

directorul radacina. Al treilea exemplu reprezinta un fisier aflat chiar in directorul radacina. In ultimele
doua exemple, deoarece primul caracter nu este "\", calea porneste din directorul curent. Asa cum am
afirmat, pot exista mai multe sisteme de fisiere la un moment dat.
In primul rand, orice calculator contine mai multe dispozitive de stocare - o unitate de disc flexibil si unul
sau mai multe discuri hard. In al doilea rand, un disc dur poate fi impartit in mai multe zone independente
una de alta (numite partitii), fiecare dintre acestea continand cate un sistem de fisiere, de asemenea
independent de celelalte. Trebuie deci gasita o forma de a diferentia fisierele aflate in sisteme de fisiere
diferite, deci in structuri de directoare diferite.Solutia adoptata de sistemul DOS este de a denumi fiecare
sistem de fisiere printr-o litera urmata de simbolul ":". Astfel, unitatile de disc flexibil sunt desemnate prin
literele a: si respectiv b:, iar discurile dure si apoi unitatile CD-ROM, precum si alte dispozitive de
stocare, primesc literele c:, d: etc. Aceasta litera precede denumirea fisierului, precizand astfel in care
sistem de fisiere trebuie cautat fisierul respectiv. Din aceste motive, sistemele de fisiere se mai numesc
unitati de disc, iar literele asociate lor, litere de disc. Similar directorului curent, exista si o unitate de disc
curenta, avand un rol analog. Practic, toate numele de fisiere (precedate sau nu de calea de directoare
corespunzatoare) de pe unitatea curenta nu au nevoie de a preciza care este unitatea pe care se afla. Mai
mult, fiecare unitate are propriul director curent. Desigur, utilizatorul poate decide atat unitatea curenta,
cat si directoarele curente pe toate unitatile de disc.
Exemple:c:\files\fisier1.txt numele fisierului este precedat de litera unitatii de disc si de calea de
directoare\files\fisier1.txt se precizeaza o cale pe unitatea de disc curent a fisier1.txt fisierul este cautat in
directorul curent al unitatii curented:fisier2.doc fisierul este cautat in directorul curent al unitatii d:,
deoarece calea care urmeaza dupa litera de disc nu incepe cu simbolul "\", deci nu se porneste din
radacina.
Cum realizeaza sistemul de operare gestiunea sistemelor de fisiere, altfel spus, cum este regasit pe disc un
fisier despre care in prima instanta se cunoaste doar numele?
Pentru a raspunde la aceasta intrebare trebuie sa urmarim cum isi organizeaza sistemul de operare
informatia pe disc. Mai intai se impun cateva consideratii sumare legate de organizarea fizica a discului.
Intr-un mod destul de asemanator memoriei, fiecare octet de pe disc este identificat printr-o adresa.
Practic insa, discul este impartit in zone de date de dimensiuni mai mari, numite sectoare (care au in cele
mai multe cazuri 512 octeti). Din motive tehnologice, cautarea unui octet pe disc consta din doua etape
distincte:- cautarea sectorului din care face parte octetul dorit- cautarea octetului respectiv in sectorul din
care face parte In general, prima etapa are o durata mult mai mare. Daca tinem cont ca, in orice
program, cel mai adesea se acceseaza in mod repetat datele invecinate, rezulta ca este mult mai rapid sa
citim printr-o singura operatie un grup mai mare de octeti decat sa realizam cate o operatie de citire pentru
fiecare dintre acei octeti (desigur, la fel se intampla si la scriere).Din acest motiv, citirile si crierile de date
pe disc nu se fac la nivel de octet, ci la nivel de bloc de octeti. Dimensiunea unui asemenea bloc variaza
in functie de mai multi factori. Primul sector al uni disc hard contine tabela de partitii. Asa cum am aratat
anterior, un disc hard poate contine mai multe zone independente una de alta, numite partitii. Numarul
maxim de paritii care pot fi create pe disc este 4 (desi poate fi marit prin anumite mijloace, care nu
intereseaza aici), deci tabela are 4 elemente. Fiecare element poate contine informatii despre una dintre
partitii, in principal adresele primului si ultimului sector din partitia respectiva (evident, pentru a nu
complica prea mult structura, partitiile sunt zone continui de date pe disc). In plus, deoarece la pornirea
calculatorului sistemul de operare este incarcat de obicei de pe disc, este marcata partitia care contine
sistemul de operare, numita partitie activa. Deoarece dischetele nu pot avea decat o singura partitie, ele nu
au tabela de partitii, iar structura unei dischete este identica cu a unei partitii de pe discul hard.Structura

unei partitii este urmatoarea:


FAT 1 FAT 2
Sectorul de boot Tabelele de alocare a fisierelor Directorul radacina
Zona de date
Sectorul de boot (sau de autoincarcare) contine un mic program care realizeaza incarcarea in memorie a
fisierelor care formeaza sistemul de operare. Acest sector nu este utilizat decat in cazul partitiei active.
Tabelele de alocare a fisierelor (FAT - File Allocation Table) memoreaza modul de ocupare cu informatie
a zonei de date a partitiei si sunt identice nu numai in structura, ci si in continut. Sistemul DOS mentine
doua copii tocmai pentru a putea restabili informatia in cazul cand una dintre tabele este alterata din
diverse motive. Asa cum am vazut, informatia este transferata inspre si dinspre disc in blocuri. La randul
sau, sistemul de operare stocheaza fisierele pe disc utilizand ca unitate elementara clusterul, care
reprezinta o zona continua formata din unul sau mai multe sectoare, in functie de caracteristicile discului.
In acest fel, un fisier va ocupa pe disc mai mult decat dimensiunea sa reala. De exemplu, pentru un disc
la care un cluster are 4 sectoare (deci 2048 octeti), un fisier de 9473 octeti va ocupa pe disc 5 clustere,
adica 10240 octeti. Tabela de alocare a fisierelor contine, pentru fiecare cluster de pe partitie, o valoare
care indica una din urmatoarele situatii:
- clusterul nu este alocat (nu contine nici un fel de informatie utila)
- clusterul este defect (eroare fizica pe disc)
- cluster rezervat pentru uzul sistemului de operare
- clusterul contine date ale unui fisier; in acest caz, valoarea din FAT
fie va reprezenta numarul clusterului care contine urmatoarele date ale aceluiasi fisier, fie va marca
(printr-o valoare speciala) faptul ca acest cluster contine finalul fisierului.Deci, pentru fiecare fisier exista
un lant de clustere care contin datele respectivului fisier. Practic, pentru a putea accesa un fisier in
intregime, trebuie cunoscuta numai adresa primului sau cluster si, utilizand informatiile din FAT, se pot
determina si clusterele urmatoare. Acest mod de memorare elimina necesitatea ca fisierele sa ocupe zone
continui de date pe disc, deoarece datele pot fi regasite si cand fisierul ocupa clustere aflate
in pozitii neinvecinate.
Urmatoarea zona o reprezinta directorul radacina. Acesta, ca si oricare alt director, este de fapt un tabel
ale carui elemente, numite si intrari in director, contin informatii despre cate un fisier sau subdirector.
Aceste informatii sunt:
- numele fisierului
- numarul primului cluster ocupat de catre fisier
- dimensiunea fisierului
- data si ora cand a fost creat fisierul etc.
Pornind de la numele unui fisier, sistemul de operare il poate regasi pe disc. Sa luam ca exemplu
urmatorul nume (complet) de fisier:
c:\programe\bc\bin\bc.exe
In primul rand se identifica unitatea de disc pe care se face cautarea, in cazul de fata unitatea c:. Daca
unitatea de disc nu este precizata, sistemul cauta pe unitatea implicita. In continuare se observa ca,
deoarece calea incepe cu simbolul "\", autarea va porni din directorul radacina. In caz contrar, cautarea ar
porni din directorul curent al unitatii respective. Evident, este necesar sa fie cunoscuta pozitia pe disc a
directorului din care incepe cautarea. Asa cum am aratat, directorul radacina incepe de la o adresa fixa pe
disc, cunoscuta de sistem. In ceea ce priveste directorul curent, adresa de inceput a acestuia este retinuta
in permanenta de catre sistemul de operare. Deci, in oricare din cazuri, sistemul stie de unde sa inceapa

cautarea. Urmeaza inspectarea intrarilor din directorul radacina, pentru a gasi elementul corespunzator
subdirectorului programe. Daca nu exista un subdirector cu acest nume in directorul radacina, cautarea
este abandonata si sistemul de operare semnalizeaza esecul. Daca s-a gasit subdirectorul, se citeste adresa
primului sau cluster si, de la acea adresa, se incepe inspectarea
intrarilor sale pentru a gasi subdirectorul bc. Cautarea continua in acest fel pana cand se intalneste un caz
de eroare sau pana cand este gasit fisierul bc.exe. Din acest moment, folosind adresa primului cluster
ocupat de fisier si informatiile din FAT, fisierul poate fi accesat dupa dorinta.
Comenzi uzuale ale sistemului MS-DOS
Ca orice sistem ajuns la o anumita vechime, MS-DOS a cunoscut o serie de imbunatatiri de-a lungul
timpului, inclusiv adaugarea de noi instructiuni, practic fiecare versiune aducand ceva in plus in acest
sens. Totusi, numai cateva dintre aceste instructiuni sunt folosite cu adevarat frecvent. Datorita
importantei pe care o are sistemul de fisiere, majoritatea acestor comenzi uzuale se refera la manipularea
structurii de directoare si a continutului fisierelor. Iata o scurta prezentare a acestor comenzi:
litera_disc:
Schimba unitatea de disc curenta. Noua unitate curenta este cea a carei litera este inclusa in comanda.
Exemplu:
c: noua unitate de disc curenta este c:
dir
Afiseaza numele si eventual alte informatii despre fisierele si subdirectoarele din directorul curent de pe
unitatea curenta de disc sau dintr-un director precizat ca argument al comenzii. Daca se doreste precizarea
mai multor nume de fisiere simultan, se pot utiliza in construirea numelor de fisiere
si directoare asa-numitii specificatori de fisier, care sunt simboluri cu semnificatii speciale. Astfel,
simbolul "*" poate inlocui 0 sau mai multe caractere din numele unui fisier, iar simbolul "?" (mai rar
utilizat) poate inlocui 0 sau 1 caractere dintr-un nume. De asemenea, se pot folosi doua denumiri speciale
pentru directoare: "." reprezinta directorul curent al unitatii curente, iar ".." desemneaza directorul parinte
al directorului curent (adica directorul care il contine). Se observa ca aceste nume speciale nu pot fi
folosite in caile care pronesc din directorul radacina.
Exemple:
dir afiseaza numele tuturor fisierelor si subdirectoarelor din directorul curent
dir . la fel ca si comanda anterioara
dir ..\.. afiseaza numele tuturor fisierelor si subdirectoarelor din directorul parinte al directorului parinte al
directorului curent
dir fis1.txt afiseaza numele fisierului fis1.txt din directorul curent, daca acesta exista
dir fis*.bak afiseaza numele tuturor fisierelor din directorul curent al caror nume incepe cu fis si care au
extensia bak
dir fisier.t? afiseaza numele tuturor fisierelor din directorul curent care au numele fisier si a caror extensie
incepe cu litera t, urmata de cel mult inca un caracter
dir c:\programe\bc afiseaza numele tuturor fisierelor si subdirectoarelor din directorul c:\programe\bc
dir programe\bc\*.exe afiseaza numele tuturor fisierelor cu extensia exe din directorul programe\bc, unde
programe este un subdirector al directorului curent
Comnada dir, la fel ca si majoritatea celorlalte, are si o serie de optiuni care controleaza
informatiile despre fisiere care sunt afisate; in general insa, modul implicit de afisare ne ofera suficiente
informatii, astfelincat nu ne vom opri asupra optiunilor.
mkdir (md)

Dupa cum se observa, comanda are doua forme, identice in ceea ce priveste comportamentul.
Efectul comenzii este crearea unui nou director, ale carui nume si pozitie in structura de directoare sunt
precizate de catre utilizator printr-un argument obligatoriu.
Exemple:
mkdir temporar creaza directorul temporar ca un subdirector al directorului curent
md \programe\tp creaza directorul tp ca un subdirector al directorului programe, aflat in directorul
radacina al unitatii curente; directorul programe trebuie sa existe deja md d:\document\situatii creaza
directorul situatii ca un subdirector al directorului d:\document, care trebuie sa existe deja
rmdir (rd)
Sterge (elimina din structura de directoare) directorul al carui nume este dat ca argument al comenzii.
Acest director nu va putea fi sters decat daca nu contine nimic (nici fisiere, nici subdirectoare).
Posibilitatile de precizare a numelui directorului de sters sunt aceleasi ca in cazul comenzii anterioare.
chdir (cd)
Schimba directorul curent; altfel spus, desemneaza ca director curent acel director care este precizat ca
argument al comenzii. Daca nu este precizat nici un argument, comanda afiseaza litera de disc, calea si
numele directorului curent.
Exemple:
cd .. noul director curent al unitatii curente va fi directorul parinte al actualului director curent
cd tmp noul director curent va fi directorul tmp, care este un subdirector al actualului director curent
cd \programe\bc\bin noul director curent va fi \programe\bc\bin
cd d:\document\texte schimba directorul curent al unitatii d:, fara a schimba si unitatea de disc curenta
copy
Copie unul sau mai multe fisiere in acelasi director sau in altul, eventual aflat pe o alta unitate de disc.
Fisierele destinatie pot pastra numele fisierelor initiale sau pot primi nume noi. Comanda nu realizeaza si
copiereadirectoarelor.
copy a.txt \docs\f.txt copie fisierul a.txt din directorul curent in directorul \docs, intr-un fisier numit f.txt
copy *.bat c:\dos copie toate fisierele cu extensia bat din directorul curent in directorul c:\dos, pastrandule numele
copy d:\programe\bc\*.* copie toate fisierele din directorul d:\programe\bcin directorul curent (aceasta
este destinatia implicita, deci nu mai trebuie precizata)
copy c:\config.sys a:\ copie fisierul c:\config.sys in directorul radacina al discului a:
del (erase)
Sterge unul sau mai multe fisiere.
Exemple:
del fisier.aux sterge fisierul cu numele fisier.aux din directorul curent del *.bak sterge toate fisierele cu
extensia bak din directorul curent del c:\document\*.* strege toate fisierele din directorul c:\document
ren
Redenumeste un fisier, dandu-i un nume nou, precizat ca argument al comenzii.
Comanda nu poate redenumi mai multe fisiere simultan si nici nu poate muta fisierul in alt
director.
Exemple:
ren a.txt b.txt schimba numele fisierului a.txt din directorul curent in b.txt
ren c:\files\f1.txt f2.txt schimba numele fisierului c:\files\f1.txt in f2.txt, lasandu-l in acelasi director
Incarcarea sistemului MS-DOS. Fisiere sistem

Asa cum se afirma adesea, sistemul de operare este incarcat de pe disc - uneori de pe o discheta,
cel mai adesea de pe discul hard. Trebuie insa sa existe un program care sa realizeze aceasta operatie,
program care sa fie apelat la pornirea calculatorului. In continuare vom urmari pasii pe care ii executa
sistemul de calcul la punerea sub tensiune.
1. In primul pas se executa un program care este stocat intr-un circuit de memorie nevolatila, de
tip ROM, existent in calculator. Aceasta memorie, numita ROM-BIOS, contine si alte informatii, fiind
vitala pentru functionarea sistemului. Deoarece procesorul poate accesa memoria in mod direct, fara
ajutorul unor programe specializate (asa cum este necesar in cazul accesului la periferice), acest program
poate fi executat direct.
De unde stie insa procesorul chiar de la punerea sub tensiune sa execute acest program, altfel spus
cum ajunge sa execute instructiuni incepand chiar de la adresa unde se gaseste programul? Orice procesor
este astfel construit incat la punerea sub tensiune sa inceapa sa execute instructiunile aflate in memorie
incepand de la o anumita adresa, care este fixa. De exemplu, toate procesoarele firmei Intel, indiferent de
generatia din care fac parte, pornesc de la aceeasi adresa; acesta este unul dintre
aspectele compatibilitatii intre procesoare diferite. Sarcina constructorului calculatorului este sa plaseze
circuitul de memorie care contine programul in cauza astfel incat programul sa inceapa de la adresa de
start a procesorului. Acest program nu este necesar sa fie modificat in timp, de aceea nu este o problema
stocarea sa intr-o memorie de tip ROM, al carei continut nu poate fi schimbat. Programul respectiv
realizeaza mai intai o testare a componentelor calculatorului, iar daca intalneste erori blocheaza
calculatorul. In general erorile detectate de acest program sunt grave, astfel incat intr-un asemenea
caz va fi necesara cel mai adesea inlocuirea unor componente. Dupa trecerea cu succes a autotestului,
progarmul realizeaza anumite initializari ale sistemului, apoi cauta un disc de pe care se poate incarca
sistemul de operare. In general este testata mai intai unitatea de discheta si abia dupa aceea discul hard,
dar ordinea poate fi schimbata la calculatoarele mai noi. Daca exista o discheta in unitate, va fi explorat
primul sector al dischetei. In cazul discului hard este citita intai tabela de partitii, pentru a se determina
care este partitia activa, apoi este accesat primul sector al acelei partitii. Din acest moment lucrurile se
desfasoara la fel atat pentru discheta, cat si pentru discul hard.
2. In primul sector al discului se gaseste un program de incarcare caracteristic sistemului MSDOS. Acest incarcator este adus in memorie si lansat in executie. Prima sa actiune este de a incarca de pe
disc fisierul IO.SYS, care contine informatii cu ajutorul carora se poate realiza accesarea corecta a
peirfericelor. In plus, fisierul IO.SYS contine un alt program de incarcare, care se va executa in
continuare. Acest incarcator este mai avansat decat cel anterior, intrucat, o data cu initializarile facute
cu ajutorul informatiilor din fisierul IO.SYS, este posibila utilizarea structurii logice a discului pentru a-l
accesa.
Observatie:
Asa cum se poate constata, la momentul incarcarii fisierului IO.SYS nu este posibila accesarea
structurii logice a discului. Pentru a putea fi totusi gasit, fisierul IO.SYS trebuie plasat pe disc la o
anumita adresa
fizica fixa. Din acest motiv, la instalarea sistemului DOS pe un disc, fisierul IO.SYS (la fel ca si
MSDOS.SYS, care va fi prezentat in continuare) nu poate fi transferat prin comanda copy, care lucreaza
cu discul la nivel logic, ci prin comanda sys.
3. Incarcatorul din IO.SYS citeste in memorie fisierul MSDOS.SYS, care contine nucleul
sistemului MS-DOS. Din acest moment, sistemul de operare este aproape complet functional, etapele care
urmeaza realizand doar anumite initializari care sunt foarte utile, dar nu indispensabile.

4. Este citit continutul fisierului CONFIG.SYS, care indica incarcarea unor dirvere de dispozitiv
suplimentare. Spre deosebire de fisierele prezentate anterior, CONFIG.SYS poate lipsi si, in plus, poate fi
modificat de catre utilizator.
5. Este incarcat si lansat un program numit interpretor de comenzi, care are sarcina de a asigura
comunicarea (interfata) intre sistem si utilizator. Concret, interpretorul de comenzi asteapta primirea unei
comenzi de la tastatura si lanseaza respectiva comanda in executie, apoi, la terminarea executiei comenzii,
asteapta o noua comanda. Acest proces este reluat pe toata durata functionarii calculatorului. Interpretorul
de comenzi implicit este continut in fisierul COMMAND.COM, dar utilizatorul poate impune utilizarea
altui interpretor, care trebuie declarat in CONFIG.SYS.
6. Este citit fisierul (optional) AUTOEXEC.BAT; daca exista, acest fisier contine o serie de
comenzi despre care utilizatorul doreste sa fie executate intotdeauna la pornirea calculatorului, inaintea
oricarei comenzi date de la tastatura. Din acest moment, incarcarea sistemului de operare este completa,
iar
toata functionarea calculatorului se rezuma la executia comenzilor date de utilizator.
Lansarea comenzilor in executie
In sistemul de operare DOS exista mai multe tipuri de comenzi:
- comenzi interne interpretorului de comenzi, pe care acesta le executa direct; toate comenzile rezentate in
subcapitoul 3.2 sunt comenzi interne interpretorului COMMAND.COM
- programe continute in fisiere avand una din extensiile com sau exe; asemenea fisiere sunt de obicei
obtinute prin compilarea unor programe scrise in diverse limbaje de programare (Pascal, C etc.)
- secvente de comenzi, continute in fisiere cu extensia bat; un asemenea fisier poate fi realizat cu ajutorul
oricarui editor de text si contine mai multe comenzi de orice tip (inclusiv alte fisiere bat), intr-o anumita
ordine; aceste fisiere sunt utile atunci cand trebuie sa executam in mod repetat anumite secvente de
comenzi si dorim sa simplificam lansarea de la tastatura.
Exemplu: Consideram ca avem un program, memorat intr-un fisier numit screen.exe, care
afiseaza anumite date pe ecran. Din anumite motive, pentru a putea vizualiza in mod optim informatiile
afisate de respectivul program, trebuie sters ecranul inainte de lansarea programului respectiv.
Pentru stergerea ecranului exista comanda interna cls. In plus, dupa terminarea sa, programul lasa
in directorul curent o serie de fisiere cu extensia tmp, care sunt inutile si trebuie sterse. Deci, de fiecare
data cand dorim sa lansam programul, trebuie de fapt sa tastam trei comenzi:
cls
screen.exe
del *.tmp
Daca dorim sa evitam a scrie de fiecare data aceste comenzi, putem realiza un fisier text, numit de
exemplu afis.bat, al carui continut va consta exact din cele trei linii de mai sus. Din acest moment, putem
lansa o singura comanda, avand efectul dorit, si anume:
afis.bat
Pentru a simplifica si mai mult sarcina utilizatorului, in cazul fisierelor executabile, la lansarea in
executie este suficienta precizarea numelui fisierului respectiv, fara a fi neaparat necesara extensia. Astfel,
pentru exemplu de mai sus, se poate lansa mai simplu comanda:
afis
iar continutul fisierului poate fi urmatorul:
cls
screen

del *.tmp
Exista insa si o problema datorata acestei simplificari: daca exista, de exemplu, doua fisiere
executabile cu numele screen.exe si screen.com, care dintre acestea va fi lansat in executie cand se
tasteaza comanda screen? Mai general, se pune problema de a identifica in structura de directoare fisierul
care trebuie lansat in executie atunci cand este data o comanda.
In afara comenzilor interne, care pot fi executate intotdeauna, o comanda nu se poate executa decat daca
fisierul in care este memorata se gaseste in directorul curent sau daca este precizata pozitia sa exacta in
structura de directoare.
Exemple:
screen.exe se lanseaza in executie fisierul screen.exe din directorul curent c:\programe\screen.exe se
lanseaza in executie fisierul screen.exe din directorul c:\programe
Un asemenea mod de lucru este insa foarte incomod: ar trebui ca, de fiecare data cand lansam in executie
un program care nu se afla in directorul curent, sa indicam si calea pe care poate fi gasit acesta. Pentru a
veni in ajutorul utilizatorului, sistemul DOS a introdus o comanda numita path, care se apeleaza in modul
urmator:
path nume_director1;nume_director2;...
Ca efect, orice fisier lansat in executie este cautat nu doar in directorul curent, ci si in directoarele
din lista data ca argument comenzii path.Aceste directoare trebuie obligatoriu precedate de litera unitatii
de
disc careia ii apartin si de calea pe care se afla.
Exemplu:
path c:\dos;c:\windows;c:\programe\bc\bin
Putem acum da un raspuns complet la problema de la care am pornit: se da o comanda de la tastatura, sub
forma unui sir de caractere, si trebuie sa se determine ce program se va executa. Pasii sunt urmatorii:
- se verifica daca exista o comanda interna al carei nume este chiar sirul de caractere dat de la tastatura;
daca raspunsul este afirmativ, comanda este executata de catre interpretorul de comenzi; in caz contrar
trebuie cautat un fisier executabil pe disc;
- se determina directoarele in care se va face cautarea: daca sirul de caractere contine o cale de directoare,
cautarea se va face numai in directorul cu care se termina acea cale; in caz contrar, cautarea se va face
intai in directorul radacina, apoi (daca mai este necesar) in directoarele precizate in comanda path, in
ordinea in care acestea au fost indicate
- daca numele fisierului precizat in sirul de caractere contine si o extensie (com, exe sau bat), se cauta in
directoarele determinate anterior un fisier avand numele si extensia respective; daca este gasit, este lansat
in executie
- daca numele fisierului nu contine nici o extensie, se parcurg pe rand directoarele determinate anterior,
cautandu-se un fisier avand numele dat prin comanda si extensia com, exe sau bat, in aceasta ordine;
primul asemenea fisier gasit este lansat in executie;
- daca nu s-a gasit nici un fisier care sa corespunda cerintelor, se afiseaza un mesaj de eroare si se asteapta
o noua comanda.

Programarea in fisierele de tip BAT (*.bat)


Vreau sa incep prin a spune ca va voi arata cateva smecherii legate de programarea in
BAT.Acest capitol este destinat , cum sa spun ? ..hai sa zicem , avansatilor in domeniul
informaticii.Celor care nu stiu ce e ala Ms-DOS , ce inseamna un fisier , la ce foloseste , ce e
extensia un fisier , ce e aia programare si utilizare , ce-s fisierele sistem si care sunt ,etc. le
propun sa stea deoparte si sa nu incerce sa citeasca ce am scris mai jos.Vreau sa mentionez ca am
avut parte de multi lameri care se laudau pe un fond gol ; oamenii astia ma dezgusta , pur si
simplu imi strica ziua si vad ca se cam inmultesc.
Pentru a putea programa in BAT trebuie sa stapanesti foarte bine utilizarea sistemului MsDos . Fisierele de tip bat (*.bat) nu sunt altceva decat un set de comenzi Dos care sunt executate
pe rand in ordinea scrierii lor.Formatul fisierelor BAT este identic celor de tip text (*.txt) , pot fi
modificate oricand cu orice editor de texte. Pe fiecare rand al fisierului bat se poate scrie cate o
comanda dos , nu mai multe . ( exceptie cand se foloseste "|" )
La rularea fisierelor de tip bat , "command.com" intra in modul batch (batch mode) unde
incepe sa citeasca comenzile linie cu linie . Deci "command.com" deschide fisierul bat si citeste
prima linie , apoi inchide fisierul dupa care executa comanda citita. Dupa executarea comenzii
redeschide fisierul pentru a citi linia urmatoare ,si tot asa pana la ultima linie , dupa care iese din
batch mode.
Dupa cum am spus mai sus , fisierele de tip bat pot fi create in orice editor de texte , insa
sa le salvati cu extensia "BAT" . Ex. de fisiere bat : "ovivo.bat" , "nume.bat" , "blabla.bat" .
Simplu pana acum ...
Ok ! Sa incepem cu un exemplu de creeare a celui mai simplu program bat.
Problema : Sa se creeze un fisier bat care in urma executiei sa-mi creeze in radacina directorul
Ovivo , iar in directorul Ovivo sa-mi creeze un fisier de tip txt cu numele ovivo care sa contina
textul : "Aici se afla Ovivo".
Rezolvare: Imi place dos-ul asa ca voi intra in Dos si voi icepe sa butonez :
copy con rezolv.bat
c:
cd\
md Ovivo

cd Ovivo
echo Aici se afla Ovivo > ovivo.txt

Incredibil : Nu ?? dupa ce voi executa fisierul rezolv.bat voi observa ca a aparut in radacina
directorul ovivo cu fisierul ovivo.txt.
Acum ca stiti cam ce-s fisierele bat , hai sa trecem la comenzile specifice numai lor :
1) REM (Remark command) - adauga comentarii in interiorul fisierului fara ca acesta sa fie
afectat.
2) ECHO - afiseaza un text pe ecran ( un fel de writeln in Pascal)
3) @ECHO OFF - aceasta comanda se scrie la inceputul fisierului pentru ca in urma executarii
de comenzi dos sa nu apara mesajele lor iformative in legatura cu ce s-a intamplat.
Obs1 : se poate folosii si numai semnul @ in fata oricarei comenzi dos dar e prea multa munca .
Obs2 : s-ar putea sa vreti sa afisati pe ecran un rand gol si veti scrie doar echo . Daca veti face
asa ,in loc de un rand gol, va aparea mesajul Echo is off/on. Comanda corecta pentru acest lucru
este "Echo." .
4) PAUSE - sa zicem ca ai scris un text care vrei sa fie afisat dar acest lucru sa intampla prea
repede ca cititorul sa-l citeasca . Aici si in alte parti de foloseste aceasta comanda.
Un mic exemplu :
@ECHO OFF
REM acesta este un exemplu de fisier bat cu cele 4 comenzi de pana acum
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO Ovivo te anunta sa fi atent
ECHO.
ECHO.
ECHO.
PAUSE

Da ! Stiu ca pare banala comanda FOR . Puteam sa nu ma complic si sa scriu directECHO %3


%2 %1 in loc de FOR %%a IN (%3 %2 %1 ) DO ECHO %%a , dar combinata cu alte comenzi
poate fi foarte folositoare si chiar periculoasa.
Comanda IF
Comanda IF este foarte utila . Ea seamana si are cam aceleasi roluri ca si-n celelalte limbaje de
programare.
IF conditie comanda
In general ,in limbajul de programare BAT, ea este folosita pentru a se verifica existenta anumitor
fisiere de pe hard.
Ex. sintaxe:
IF EXIST fisier comanda
IF NOT EXIST fisier comanda
Mai jos aveti un mic exemplu prin care se face verificarea la win.com
@ECHO OFF
ECHO.
ECHO Ok ! Vom verifica daca ai fisierul win.com din Windows
ECHO.
ECHO Apasa o tasta si iti voi spune daca il ai.
ECHO.
PAUSE
IF EXIST c:\windows\win.com ECHO Da ! Exista !
IF NOT EXIST c:\windows\win.com ECHO Hopa ! Nu exista !
PAUSE
Sau alt exemplu
IF EXIST c:\drvspace.bin IF EXIST c:\msdos.sys ECHO Amandoua exista.
Hei! Dar ce facem daca vrem sa verificam daca exista un director ? Nimic mai simplu : Adaugam
la numele directorului terminatia "\nul". Priviti aici un exemplu prin care verific daca exista
directorul Windows.
@ECHO OFF
ECHO.
ECHO Ok ! Vom verifica daca ai directorul Windows in radacina
ECHO.
ECHO Apasa o tasta si iti voi spune daca il ai.

ECHO.
PAUSE
IF EXIST c:\windows\nul ECHO Da ! Exista !
IF NOT EXIST c:\windows\nul ECHO Hopa ! Nu exista !
PAUSE
Obs : Orice director gol sau plin are fisierul cu numele "nul"
Cu IF , deobicei se mai fac comparatii intre siruri text.
Ex. sintaxe :
IF sir1==sir2 comanda
IF NOT sir1==sir2 comanda

Comenzile sistemului de operare Ms-Dos 6.xx


Append
= Permite specificarea directoarelor in care vor fi cautate fisierele de date care nu se
afla in directorul curent de catre programele corespunzatoare.
Attrib

= Permite afisarea , modificarea atributelor fisierelor si directoarelor.

Break
<C>.

= Comanda valideaza/invalideaza testarea apasarea combinatiei de taste <Ctrl> ,

Buffers
= Permite alocarea unei zone de memorie formata dintr-un numar de zone tampon
( buffers ) destinate operatilor de citire/scriere de pe unitatile de disc ale sistemului.
Call
= Directiva call permite apelarea unui fisier de comenzi dintr-un altul. Dupa
executarea celui de al doilea fisier de comenzi se va rveni in primul , continuindu-se executarea
comenzilor din acesta.
Chcp
= Comanda chcp permite afisarea si schimbarea paginii de cod curente (setul
curent de caractere ) pentru procesorul de comenzi COMMAND.COM.
Chdir (cd) = Permite schimbarea directorului.
Chkdsk

= Comanda permite verificarea starii unui disc si afisarea unui raport de stare.

Choice
= Comanda afiseaza un prompt specific si permite utilizatorului alegerea unei
variante in cadrul unui fisier de comenzi. Se poate utiliza numai in cadrul fisierelor de comenzi.

Cls

= Sterge ecranul.

Command =
Copy

Comanda command lanseaza o noua instanta a interpretorului de comenzi.

= Comanda permite urmatoarele operatii :

copiere de fisiere

concatenare de fisiere

copierea iesirii unui dispozitiv intr-un fisier sau alt dispozitiv

copierea unui fisier la un dispozitiv .

Country

= Permite utilizarea conventilor internationale pentru :

specificarea modului in care se realizeaza afisarea timpului , datei , monedei

determinarea ordinii de sortare a caracterelor

alegerea caracterelor care vor putea fi utilizate in nume de fisiere

configurarea sistemului pentru a recunoase setul de caractere si conventiile de punctuatie


utilizate
Ctty
= Comanda permite schimbarea dispozitivului de intrare , iesire standard al
sistemului. De obicei se foloseste pentru trecerea de la consola standard la una auxiliara.
Date

Comanda permite vizualizarea si modificarea datei curente a sistemului.

Dblspace = Comanda dblspace este destinata comprimarii datelor pe suport magnetic


(discuri fixe , flexibile) si configurarii unitatilor de disc care lucreaza cu aceste discuri.
Programul a fost inlocuit incepand cu versiunea 6.22 a sistemului de operare cu un program
similar DiveSpace. Principala diferenta intre aceste doua programe de compresie consta in faptul
ca utilizeaza algoritmi si metode de compresie diferite , formatele nefiind interschimbabile.
Defrag
= Comanda lanseaza un program care realizeaza reorganizarea structurii fisierelor
pe discul specificat in vederea optimizarii performantelor . Utilizarea versiunii Dos a comenzii
Defrag sub Windows este interzisa poate cauza pierderi.
Del (erase) = Permite stergerea de fisiere.
Deltree

Permite stergerea unui director si a continutului sau (subdirectoare si fisiere)

Device
= Comanda permite icarcarea in memoria conventionala a unei interfete software
(Driver). Aceasta comanda poate fi lansata numai printr-o linie de comanda a
fisierului Config.sys.

Devicehigh = Permite incarcarea in zona de memorie inalta a unei interfete software (driver).
Daca zona de memorie nu este disponibila , are acelasi efect ca si comanda device. Comanda
poate fi lansata numai printr-o linie de comanda a fisierului Config.sys.
Dir

Comanda dir afiseaza :

lista fisierelor si subdirectoarelor specificate ale unui director incluzand extensile ,


dimensiunea in octeti si data ultimei modificari

Numarul total de fisiere listate si dimensiunea in octeti si data ultimei modificari

Numarul total de fisiere listate si dimensiunea lor totala

Spatiul liber ramas pe disc

Eticheta de volum si numarul sau serial

Diskcomp = Compara continutul a doua discuri felxibile pista cu pista , fara considerarea
alocarii fisierelor pe disc.
Diskcopy = Copiaza continutul unui disc flexibil sursa pe un disc flexibil destinatie. Discul
destinatie poate fi neformatat inaintea inceperii copierii. Comanda distruge informatia existenta
anterior pe discul destinatie.
Dos
= Precizeaza daca sistemul de operare va mentine o legatura cu zona de memorie
inalta (HMA - High Memory Area). Comanda poate fi utilizata numai in fisierul CONFIG.SYS.
Doskey = Incarca programul de tip TSR (Terminate and Stay Resident ) Doskey in
memorie. Programul permite o serie de functii de reluare si editatre a comenzilor lansate anterior
de la promptul Ms-Dos.
Dosshell = Lanseaza o interfata grafica MS-Dos Shell. A fost eliminat din versiunea 6.22 a
sistemului de operare Ms-Dos.
Drivparm = Permite redefinirea parametrilor necesari dispozitivelor bloc (unitati de disc sau
banda)
Drvspace = Lanseaza un program de compresie a datelor pe suport magnetic. A fost introdusa
incepand cu versiunea 6.22 a sistemului de operare.
Echo
=
Permite inhibarea afisarii pe ecran a comenzilor Ms-Dos incluse intr-un fisier de
comenzi in momentul executiei lor.
Edit

Editor de texte.

Emm386 =
Comanda permite gestionarea memoriei expandate si a
coprocesorului Weitek pe sisteme care au la baza microprocesoare 80386 sau superioare. De
asemenea realizeaza gestionarea si disponibilizarea blocurilor libere ale zonei de memorie inalta
(HMA)
Exit
= Realizeaza parasirea interpretorului de comenzi si revenirea la programul care a
lansat interpretorul de comenzi
Expand = Realizeaza decompresia unui fisier comprimat de pe discurile de instalare ale
sistemului de operare.
Fasthelp = Permite accesul rapid la descrierea modului de utilizare , a parametrilor si
optiunilor comenzilor sistemului de operare.
Fastopen = Permite imbunatatire performantelor de viteza ale sistemelor cu directoare de
dimensiuni mari.
Fc
= Permite compararea binara a doua fisiere si afisarea diferentelor intre ele , sau
pentru fisiere de text in format ASCII compararea la nivel de cuvinte.
Fcbs
= Permite specificarea numarului maxim de blocuri de control a fisierelor care pot fi
deschise simultan de catre sistemul de operare (se insereaza in fisierul Config.sys).
Fdisk
= Comnda lanseaza programul fdisk care permite configurarea unui disc fix pentru
utilizarea lui sub sistemul de operare Ms-Dos.
Files
= Specifica numarul de fisiere care pot fi accesate simultan de catre sistemul de
operare (numai in config.sys)
Find
=
Permite cautarea unui sir specificat in unul sau mai multe fisiere de tip
ASCII. Dupa realizarea operatiei comanda afiseaza linile de text care contin sirul specificat.
For
=
comanda.

Lanseaza comanda specificata pentru fiecare fisier din setul specificat in linia de

Format = Realizeaza urmatoarele operatii de pregatire ale discurilor in vederea utilizarii lor
sub sistemul de operare Ms-Dos:

Formateaza discul din unitatea specificata sau inplicita la un format acceptat de sistemul
de operare,

Analizeaza intregul disc pentru detectarea pistelor defecte

Creaza si initializeaza directorul radacina , tabele de alocare a fisierelor

Copiaza fisierele sistem la locatia necesara pe discul respectiv

Goto = Executarea unui salt la linia marcata prin eticheta specificata in linia de comanda
corespunzator directivei.
Graphics = Incaraca in memoria sistemului un program destinat tiparirii continutului unui
ecran al unui monitor care utilizeaza un adaptor color sau grafic (CGA , EGA ,VGA). Comanda
mareste dimensiunea sistemului de operare rezident.
Help

Lanseaza programul care ofera informatii despre comenzile S.O.

If

Permite exectia conditionata a unei comenzi intrun fisier de comenzi.

Include = Permite introducerea continutului unui bloc de configurare din


fisierul CONFIG.SYS intr-un altul.
Install = Permite incarcarea unui program rezident in memoria sistemului la
inceputul sesiunii de lucru (se foloseste in config.sys.).
Interlnk =

Permite legarea a doua sisteme intre ele prin intermediul porturilor.

Intersvr = Permite lansarea si configurarea sistemului utilizat ca server in cadrul


interconectarii a doua sisteme prin intermediul programului Interlink. Configurarea server-ului
consta in precizarea unitatilor de disc care vor putea redirerctate si a porturilor utilizate pentru
conectarea sistemului client.
Keyb

= Permite configurarea tastaturii pentru utilizarea a diferitor limbi.

Label

= Permite crearea , modificarea , stergerea etichetei de volum a unui disc.

Lastdrive = Permite specificarea numarului maxim de unitati de disc care pot fi accesate de
sistem.
Loadhigh ( LH) = Comanda permite incarcarea programelor in zona de memorie inalta ,
disponibilizand astfel memoria conventionala.
Loadfix = Verifica incarcarea unui program in zona de memorie superioara primilor 64
Kocteti si apoi il lanseaza in executie.
Mem
= Afiseaza un raport al memoriei utilizate si libere a sistemului , modul de alocare
a memoriei conventionale si inalte.
Memmaker = Realizeaza optimizarea utilizarii memoriei sistemului prin incarcarea
corespunzatoare a interfetelor si programelor TSR in zona de memorie inalta. Cerinte
microprocesor 8386 sau ulterior , nu se poate utiliza sub mediul grafic windows.

Menucolor = Permite specificarea culorilor textului si ecranului pentru meniul de lansare a


sistemului prin intermediul fisierelor Config.sys si autoexec.bat (se utilizeaza numai in
config.sys)
Menudefault = Permite specificarea optiunii impicite in cadrul ecranului de lansare a
sistemului si a intervalului de timp dupa care aceasta optiune va fi executata. (utilizata in
config.sys)
Menuitem
= Permite definirea numelui unei optiuni corespunzatoare unui bloc de
configurare declarat in fisierul config.sys. Comanda poate fi utilizata numai in cadrul unui bloc
de configurare declarat in fisierul config.sys.
Mkdir (md)

Permite crearea unui subdirector.

Mode
= Permite configurarea dispozitivelor sistemului : imprimanta , portul serial ,
alegerea paginilor de cod , alegerea modului de operare a monitorului. Poate fi folosita la
prompter-ul Dos sau inserat in autoexec.bat.
More
= Comanda introduce o pauza dupa afisarea fiecarui ecran de informatie.
Comanda functioneaza ca un filtru citind datele obtinute ca urmare a unei redirectari , fiind
utila in cazul vizualizarii fifierelor lungi.
Move

= Permite mutarea , redenumirea fisierelor , precum si redenumirea directoarelor.

Msav

Msbackup

= Programul este destinat salvarii si restaurarii fisierelor de pe un disc pe altul.

Program antivirus.

Mscdex
= Permite accesul la unitatile de CD-ROM ale sistemului. Pentru utilizarea
unitatii de CD-ROM este necesara incarcarea in memorie a interfetei software livrata impreuna
cu unitatea printr-o comanda device sau devicehigh in fisierul config.sys.
Msd
= Analizeaza si afiseaza un raport asupra structurii hardware si
configuratiei software a sistemului.
Nlsfunc
= Un program de tip TSR care permite specificarea , utilizarea
informatilor extinse de tara si schimbarea paginii de cod. Comanda poate fi utilizata de la
promptul MS-Dos sau in cadrul fisierului CONFIG.SYS
Numlock = Comanda permite setarea cheii NumLock la lansarea sistemului (se utilizeaza
in config.sys).
Path
= Permite specificarea cailor in care sistemul de operare va cauta in mod
implicit fisierele executabile la lansarea acestora (daca ele nu sunt gasite pe calea specificata sau

in directoul curent). In general comanda este utilizata in cadrul fisierului autoexec.bat. Insa
poate fi lansat si de la prompterul Dos.
Pause

Suspenda executarea unui fisier de comenzi.

Power
= Permite configurarea utilitarului de gestiune a conservarii energiei electrice
sau afisarea starii de configurare a acestuia. Programul este util in cazul sistemelor de tip
laptop functionand pe baza de baterii.
Print
=
calculator.

Tipareste fisiere text la imprimanta in timp ce se executa alte comenzi pe

Prompt

Permite definirea sau modificarea prompt-ului sistem.

Qbasic

= Programul Ms-Dos Qbasic.

Rem

Permite includerea unor mesaje in fisiere de comenzi.

Rename (ren) = Permite modificarea numelui fisierelor. Nu poate redenumi directoare.


Replace
= Comanda inlocuieste selectiv fisiere de pe unitatea destinatie cu fisiere cu
acelasi nume pe unitatea sursa. Poate fi utilizata pentru adaugarea selectiva a fisierelor de pe
uniatea sursa pe unitatea destinatie.
Restore = Restaureaza unul sau mai multe fisiere care au fost arhivate prin
comanda backup.
Rmdir (rd) = Permite stergerea unui director specificat. Nu pot fi sterse decat directoarele
care contin fisiere.
Scandisk = Destinat analizei si repararii discurilor. Programul poate fi utilizat si pe
unitati de disc comprimate prin intermediul programelor : DoubleSpace , DriveSpace , Stacker ,
etc . Probramul verifica si corecteaza din punct de vedere fizic si logic erori din urmatoarele
zone ale discului :

Tabela de alocare a fisierelor - FAT

Structura sistemului de fisiere (unitati de alocare pierdute , fisiere cu lgaturi incrucisate crosslinked);

Structura arborescenta a directoarelor

Suprafata fizica a discului (unitati de alocare defecte - bad sectors)

Antetul de volum DoubleSpace sau DriveSpace (MDBPB)

Structura compresiei (DoubleSpace sau DriveSpace)

Semnaturile volumelor DoubleSpace sau DriveSpace

Sectorul de incarcare a sistemului de operare

Set

Permite afisarea , configurarea si stergerea variabilelor de mediu.

Setver
= Afiseaza tabela de versiuni sau afiseaza numarul versiunii corespunzatoare unui
program sau interfata software (daca aceasta este anterioara versiunii curente a sistemului
de operare).
Share
= Ofera suport pentru partajarea fisierelor si protectia unitatilor de disc in retea (se
laseaza prin intermediul comenzii install in fisierul config.sys).
Shell
= Precizeaza numele si locatia interpretorului de comenzi care va fi utilizat de
sistemul de operare. Comanda poate fi utilizata pentru instalarea unui interpretor de comenzi
particular , diferit de command.com. Comanda poate fi lansata numai prin
intermediul fisierului config.sys.
Shift

Permite modificarea pozitiei parametrilor dintr-un fisier de comenzi.

Smartdrv = Incarca in memorie sau configureaa programul smartdrive . Se creaza o zona de


memorie cache in memoria extinsa a sistemului , zona de
memorie tampon destinata optimizarii transferului de date cu unitatile de disc. In acest caz
comanda se va lansa de la prompt-ul Ms-Dos sau prin intermediul fisierului autoexec.bat.
Programul poate fi utilizat si pentru rezolvarea problemelor de compatibilitate intre anumite
controlere de disc si programul EMM386 sub mediul Windows 3.11 . Pentru acesata
programul se va incarca in memorie printr-o comanda device in fisierul config.sys.
Sort
= Este un filtru care citeste date de la echipamentul standard de intrare ,
soreaza datele , apoi scrie datele sortate la echipamentul standard de iesire.
Stacks
= Permite specificarea numarul si dimensiunea stivelor dinamice de date utilizate
de catre sistem pentru geestionarea cererilor de intreruperi. Lansata prin intermediul lui
config.sys.
Submenu = Defineste o intrare in cadrul listei din meniul de configurare a sistemului care ,
la lansare , afiseaza un set secundar de optiuni (config.sys).
Subst
= Permite utilizarea unui identificator de unitate diferit pentru a denumi o
unitate sau o cale. Litera de unitate care va fi asociata va reprezenta o unitate de disc viruala ,
putand fi utilizata in comenzi ca orice alta unitate.
Switches = Permite specficarea unor optiuni speciale de configurae a sistemului de operare
(in config.sys)

Sys
= Permite crearea unui disc sistem (fisierele : IO.SYS , MSDOS.SYS ,
COMMAND.COM ) discul putand apoi fi utilizat pentru lansarea sistemului.
Time

= Permite afisarea , modificarea orei curente a sistemului.

Tree
= Afiseaza structura directoarelor pe discul specificat si optional , numele
fisierelor din fiecare subirector.
Type

Afiseaza continutul fisierului specificat la dispozitivul satndard de iesire.

Undelete = Permite in unele cazuri (cand zona de memorie nu sa suprainscris de un alt


program) refacerea fisierelor sterse cu comanda del.
Unformat = Permite refaecrea unui disc sters prin comanda format sau restructurat prin
comanda recover . Poate fi utilizata sipentru refacerea tabelei de partitii deteriorat al unui disc
fix. Comanda poate fi utilizata numai pentru unitati de disc locale .
Ver

Afiseaza versiunea sistemului de operare.

Verify

Permite verificarea corectitudinii scrierii informatilor pe disc.

Vol

Afiseaza eticheta de volum a discului din unitaea specificata.

Vsafe

Program antivirus de tip TSR Urmareste in permanenta aparitia virusilor.

Xcopy
fisiere)

Permire copierea de directoare impreuna cu continutul lor (subdirectoare si

S-ar putea să vă placă și