Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» Sistemul de Operare MS-DOS. Probleme generale.


Sistemul de Operare MS-DOS. Probleme generale.


Sistemul de Operare MS-DOS. Probleme generale.

Sistemul exista din 1981. Este primul S.O. pentru microprocesoare pe 16 biti. In momentul de fata se considera ca este cel mai raspandit S.O. din lume, avand vandute cateva zeci de milioane de exemplare. Sistemul de operare constituie baza pentru cateva zeci de mii de aplicatii, ceea ce il situeaza pe primele locuri in lume.

MS-DOS versiunea 1.0 a aparut in august 1981. Aceasta versiune avea multe caracteristici in comun cu S.O. CP/M (care a fost folosit ca si model). Avea sistem de fisiere cu un singur nivel, ceea ce s-a corectat in martie 1983, la versiunea 2.0, care contine pentru prima data driver pentru discul winchester de 10Mb si sistem de fisiere ierarhic. In versiunea 2.0 se imprumuta de la UNIX modul de realizare a apelurilor sistem pentru lucrul cu fisiere.

In august 1984 apare versiunea 3.0 care este legata de introducerea calculatoarelor AT cu Intel 80286 si cu discuri fixe de 20Mb (arhitectura standard I.B.M.) si discuri flexibile de 1,2Mb. Versiunea 3.0 permite definirea de discuri virtuale in RAM si introduce posibilitatea de protectie a fisierelor (un fisier poate fi considerat read only).



In noiembrie 1984 apare versiunea 3.1 care permite lucrul in retea si posibilitatea ca in aceeasi retea sa se lucreze cu sisteme de fisiere diferite.

In 1986 s-a introdus versiunea 3.2 cu driver pentru discuri flexibile de 31/2 inch si cateva comenzi suplimentare intre care xcopy. De asemenea introduce un driver special care permite copierea pe aceeasi unitate de disc.

In 1987 este lansata versiunea 3.30 care adauga cateva functii cerute de utilizatori, pe noua familie de calculatoare numita PS/2. Se permit 4 porturi de comunicare, se permit dischete de 1.44Mb si se permit pe discuri fixe mai multe (4) partitii de maximum 32Mb fiecare.

In 1988 este introdusa versiunea 4.0 care permite lucrul cu discuri fixe cu capacitati de pana la 2Gb. Permite utilizarea de catre programe a memoriei expandate si introduce o interfata grafica cu utilizatorul, realizata conform specificatiilor T.B.M. numite C.U.A. (Common User Access). Versiunea 4.1 lansata spre sfarsitul lui 1988 corecteaza unele anomalii gasite la 4.0.

In primavara lui 1991 apare versiunea 5.0 care extinde interfata grafica in sensul unei apropieri de Windows.

Din 1993 este disponibila versiunea MS-DOS 6.0 iar din 1994 versiunea 6.2, care dispun de urmatoarele facilitati :

includerea unui utilitar pentru compresia datelor pe disc ce poate determina chiar dublarea capacitatii suportilor magnetici (DoubleSpace);

incorporarea unui program antivirus (MSAV si VSAFE);

inlocuirea comenzilor Backup-Restore cu un produs mai bun si posibilitatea eliminarii fragmentarilor de pe disc (DEFRAG);

incorporarea unei modalitati imbunatatite de gestionare a memoriei superioare (MemMaker);

determinarea in mod automat a programelor ce se pot executa in memoria superioara (DOS 6.0 ocupa 200K din totalul de 384K);

comanda MOVE care permite mutarea unui director cu intreg continutul;

comanda CHOICE, ce permite citiri de la tastatura in timpul executiei, inclusa in limbajul de comenzi al fisierelor batch.

Structura S.O. MS-DOS. Incarcarea sistemului.

Utilizarea si organizarea spatiului pe discuri.

Cand se instaleaza , sau se face upgrade la un sistem, o mare parte a lucrului implica manipularea si utilizarea discurilor. Pentru ca pe un disc sa se poata stoca fisiere, acesta trebuie pregatit in conformitate cu sistemul utilizat.

Principalii pasi in pregatirea discurilor sunt:

Formatarea discului. Acest proces implica mai multe operatii de pregatire, ca de exemplu cautarea de sectoare defecte. In prezent cele mai multe hard discuri nu necesita aceasta operatie, deoarece ele vin deja gata formatate de la producator. Acest proces mai este cunoscut si sub numele de Formatare Low Level.

Partitionarea hard discului, aceasta in cazul in care se doreste utilizarea lui pentru mai multe activitati care sa nu interfere unele cu altele. Un motiv pentru partitionare este folosirea unui singur disc pentru mai multe sisteme de operare. Un alt motiv este de a tine separat fisierele utilizatorilor de cele de sistem, aceasta simplificand back-up-urile si deasemenea ajuta la protejarea fisierelor sistem.

Crearea unui sistem de fisiere (de un tip potrivit) pe fiecare disc sau partitie. De obicei discurile, respectiv partitiile nu se pot utiliza pana cand nu se creeaza pe ele un sistem de fisiere. Acest proces mai este cunoscut si sub numele de Formatare High Level.

Pentru anumite sisteme, pentru ca sistemele de fisiere create sa se poata utiliza, ele trebuiesc montate sau automat sau manual. (UNIX). De obicei sistemele de fisiere montate manual trebuiesc demontate tot manual.

Hard discuri

In figura urmatoare se prezinta schematic partile importante ale unui hard disc.

Fig. 3.3-

Un hard disc consta dintr-unul sau mai multe platane circulare, care au una sau ambele fete acoperite cu o substanta magnetica, folosita pentru inregistrarea informatiilorr. (Platanele sunt de obicei construite dintr-o substanta mai dura, de ex. aluminiu, ceea ce le da si numele de discuri dure sau de masa - hard disc). Pentru fiecare suprafata exista un cap de citire/scriere care examineaza sau altereaza informatia inregistrata. Platanele se rotesc pe o axa comuna, cu o viteza tipica de 3600 rotatii pe minut, desi discurile de inalta performanta au o viteza de rotatie marita. Capetele se deplaseaza de-a lungul razei platanelor. Aceasta miscare combinata cu rotatia platanelor permite accesarea oricarei parti a suprafetei.

Procesorul si discul comunica printr-un controller de disc. Acesta separand restul computerului de sarcina de a controla efectiv discul.

Suprafetele, de obicei sunt divizate in inele concentrice, numite piste (tracks), iar acestea sunt divizate in sectoare (sectors). Aceasta impartire este folosita pentru specificarea unei anumite locatii de pe disc si pentru alocarea spatiului pentru fisiere. Astfel pentru a gasi un anumit loc pe disc se poate specifica : suprafata x, pista y, sectorul z. De obicei numarul de sectoare este acelasi pentru toate pistele, dar unele hard discuri au mai multe sectoare pe pistele exterioare si mai putine pe pistele interioare. Tipic, un sector va contine 512 octeti de date. Discul nu poate manipula o cantitate mai mica de date decat aceea a unui sector.

Fiecare suprafata este divizata in piste si sectoare in acelasi fel. Aceasta inseamna ca daca capul pentru o suprafata este pe o pista, capetele pentru celelalte suprafete sunt deasemenea pe pistele corespondente. Toate pistele corespondente luate impreuna poarta denumirea de cilindru. Mutarea capetelor de pe un cilindru pe altul dureaza un anumit timp, astfel plasand impreuna datele care sunt accesate des, astfel ca sa fie situate pe acelasi cilindru, nu este necesara operatia de mutare a capetelor pentru a citi toate aceste date. Aceasta inbunatateste performantele. Din pacate nu intotdeauna este posibil sa plasam astfel fisierele. Fisierele care sunt stocate in mai multe parti de pe disc se numesc fragmentate.

Numarul fetelor (sau capetelor), cilindrilor si sectoarelor variaza destul de mult. Specificarea numarului fiecaruia este numita geometria hard discului. Aceasta geometrie de obicei este memorata intr-o memorie speciala numita CMOS RAM.

Din pacate BIOS-urile mai vechi au o limitare in implementare, fiind imposibila specificarea unui numar de piste mai mare de 1024, in memoria CMOS, aceasta este insa prea putin pentru hard discurile mari. Pentru a depasi aceasta limitare, controllerele de disc comunica o geometrie falsa si translateaza adresele date de calculator astfel incat sa concorde cu realitatea. De exemplu un hard disc ar putea avea 8 capete, 2048 piste si 35 sectoare pe pista. In acest caz, o posibila translatare ar fi : 16 capete, 1024 piste si 35 sectoare pe pista. Aceasta translatare ar putea afecta performantele (vezi discutia despre fragmentare).

Translatarea este o problema doar pentru discurile IDE. Discurile SCSI utilizeaza o numerotare secventiala a sectoarelor.

Floppy discuri

Un disk floppy consta dintr-o membrana flexibila acoperita pe una sau ambele fete cu o substanta magnetica similara cu cea a hard discurilor. Un disc floppy corespunde unui platan dintr-un hard disc, dar este indepartabil din unitate, pe cand hard discurile constituie o unitate indivizibila.

Ca si un hard disc, un floppy este divizat in piste si sectoare (iar cele doua piste corespondente de pe fetele unui floppy formeaza un cilindru), dar sunt mult mai putine decat pe un hard disc.

O unitate de floppy discuri de obicei poate fi folosita cu mai multe tipuri de discuri, de exemplu o unitate de 31/2 inch poate fi utilizata atat cu dischete de 720KB cat si de 1,44MB.

Formatarea

Formatarea este procesul scrierii de marcaje pe mediul magnetic care sunt utilizate la marcarea pistelor si sectoarelor. Inainte ca un disc sa fie formatat, suprafata sa magnetica este un haos complet de semnale magnetice. Cand este formatata, se introduce o anumita ordine in acest haos, in principal prin "tragerea" de linii acolo unde vor fi pistele precum si acolo unde acestea sunt despartite in sectoare. Detaliile de implementare nu sunt relevante pentru acest curs. Ceea ce este insa important, este ca un disc nu poate fi folosit pana cand el nu este formatat.

Pentru discurile IDE si SCSI in prezent formatarea se face de catre producator, astfel incat aceasta nu mai trebuie facuta. Mai mult s-ar putea ca unele discuri sa necesite o formatare speciala, astfel o reformatare ar duce la scaderea performantelor hard discului.

Dicurile care totusi au nevoie de formatare necesita programe speciale care de obicei exista in BIOS, sau ca si programe executabile sub un anumit sistem de operare.

Partitii

Un hard disc poate fi impartit in mai multe partitii. Fiecare partitie se comporta ca si cum ar fi un hard disc separat. Ideea este accea ca exista doar un singur hard disc si se doreste instalarea a doua sisteme de operare, se poate imparti hard discul in doua parti. Fiecare sistem de operare folosind partitia sa cum doreste si ne atingandu-se de alte partitii. Fara partitii ar trebui ca pentru fiecare sistem de operare sa existe un hard disc separat.

Discurile floppy nu sunt partitionate. Nu exista nici un impediment tehnic pentru aceasta, dar deoarece ele sunt de capacitate relativ mica, partitiomarea lor nu ar ajuta aproape la nimic.

MBR-ul, sectoare boot si tabele de partitii

Informatia cu privire la modul in care un hard disc a fost partitionat este memorata in primul sector al acestuia (adica in primul sector al primei piste de pe prima fata). Primul sector este Master Boot Record-ul discului, acesta este sectorul pe care BIOS-ul il citeste si il lanseaza cand sistemul este pornit pentru prima data. MBR-ul contine un mic program care citeste tabela de partitii, cauta partitia activa (cea care este marcata ca si bootable) si citeste in memorie primul sector al acelei partitii, adica sectorul de boot al partitiei (MBR-ul este tot un sector de boot, dar are un statut special). Acest sector de boot contine un alt program care citeste in memorie prima parte a sistemului de operare care exista pe acea partitie si ii da controlul.

Partitionarea este doar o conventie urmata de cele mai multe sisteme de operare. Unele sisteme de operare suporta partitii, dar ele ocupa o singura partitie si folosesc o partitionare interna in cadrul acelei partitii. Aceste tipuri de sisteme de operare pot coexista cu alte sisteme de operare, dar un sistem de operare care nu suporta partitii nu poate coexista pe acelasi hard disc cu alte sisteme de operare.

Partitii extinse si logice

Schema originala de partitionare pentru hard discurile de PC-uri admite doar patru partitii. Pentru a depasi aceasta limitare au fost introduse partitiile extinse. Aceasta este un truc pentru a permite partitionarea unei partitii primare in subpartitii. O astfel de partitie primara, impartita in subpartitii se numeste partitie extinsa, iar subpartitiile sunt partitii logice. Acestea din urma se comporta ca si partitiile primare, dar sunt create intr-un mod diferit.

Structura de partitionare a unui hard disc ar putea arata ca in urmatoarea figura. Discul este divizat in trei partitii primare, a doua partitie fiind divizata in doua partitii logice. O parte a discului nu este partitionata deloc, deci nu este folosita. Discul ca si intreg si fiecare partitie primara are cate un sector de boot.

MBR

Boot sector

Date area

of partition

Boot sector

Unused boot sector

Date area

Unused boot sector

Date area

Unused boot sector

Boot sector

Date area


Primary partition


Logical Extended partition

partition

Logical

partition


Primary partition

Observatie: Aici ar trebui sa se completeze de la 3.2.3. (din curs) tabela de partitii si explicarea acesteia. Dupa aceea ar trebui continuat cu 3.2.2. cu cateva observatii de la 3.2.1.

Organizarea spatiului pe discuri.

Caracteristicile fizice ale discului.

In configuratia calculatoarelor personale compatibile IBM se intalnesc doua tipuri de floppy discuri (discuri flexibile) si hard disc (discuri fixe). Din punct de vedere fizic discurile sunt impartite pe fiecare fata in piste, iar fiecare pista in sectoare. Capacitatea standard pentru discurile flexibile a fost o perioada de 360 Kocteti ceea ce inseamna 40 piste 9 sectoare pe fiecare fata, dimensiunea unui sector fiind 512 octeti. S-a folosit si 720 Koceteti, ceea ce a facut sa se dubleze numarul de piste, dupa care dimensiunea standard pentru un disc de 51/4 a fost 1,2 Mocteti (80 de piste 15 sectoare).

Pentru discurile de 31/2 s-au folosit doua capacitati standard:

720 Kocteti (80 de piste 9 sectoare).

1,44 Mocteti (80 piste 18 sectoare).

Pentru discurile fixe capacitatile au fost de 10 Mocteti (20, 40, 80, 220, 300, 600, 1 Goctet, . ).

Se folosesc doua numerotari ale sectoarelor, o numerotare zisa BIOS si cealalta DOS. Numerotarea BIOS considera adresele unui sector prin trei componente : cap, pista si sector. Adresele DOS considera sectoarele numerotate in continuare fara a putea considera adresa fizica a sectorului. Numerotarea capetelor porneste de la 0, numerotarea pistelor de la 0, iar numerotarea sectoarelor de la 1.

In notatia DOS se porneste de la primul sector de pe pista 0 a fetei 0, dupa epuizarea ei se continua cu pista 0 a fetei 1. Numerotarea se face in ordinea cilindrilor.

Organizarea logica a discurilor.

In sistemul MS-DOS se foloseste o conventie materializata prin comanda format care imparte suprafata fizica a unui disc in patru zone :

sectorul de incarcare

tabela de alocare a fisierelor (FAT)

catalogul radacina

spatiul pentru date

Sector

incarcare

FAT

Catalog

radacina

Zona de

date

In cazul discurilor fixe exista un element suplimentar si anume tabela de partitii.

Sectorul de incarcare pe langa programul incarcator mai contine informatii despre structura sistemului de operare.

FAT are la inceput informatii generale despre structura discului si apoi evidenta alocarii sectoarelor pentru diferite fisiere si a spatiului liber. Pentru siguranta se pastreaza doua copii pentru FAT, fiecare avand o dimensiune in functie de capacitatea discului si este data de comanda FORMAT. Discurile flexibile au 4 16 sectoare pentru fiecare FAT.

Catalogul radacina : are o dimensiune fixa, in functie de capacitatea discului (la discurile fixe este intre 7 14 sectoare) si este compus din intrari care descriu cate un fisier. In catalogul radacina se pot descrie doar un numar limitat de fisiere. O intrare de catalog contine numele fisierului si numarul intrarii din tabela de alocare a fisierelor (FAT), care corespunde primei zone de date alocate acestui fisier.

Zona de date contine informatii propriu-zise inregistrate in fisere, unele dintre aceste fisiere pot sa fie cataloage.

A. Sectorul de incarcare.

Primii trei octeti ai sectorului de incarcare in MS-DOS contin un salt neconditionat la adresa 2Eh, de la aceasta adresa incepe de fapt programul incarcator. Incepand cu al patrulea octet al sectorului este inregistrat aici blocul de parametri BIOS.

La sfarsitul sectorului de incarcare, ultimii doi octeti, exista o informatie specifica numita semnatura DOS, 55 AAh.

Deplasament

Lungime

Descriere

03

0B

0D

0E

10

11

13

15

16

18

1A

1C

8

2

1

2

1

2

2

1

2

2

2

2

Identificatorul sistemului (DOS 4.0)

Numar octeti / sector

Numar sectoare / grupa (cluster)

Numar sectoare rezervate la inceputul discului

Numar copii FAT

Numar intrari in catalogul radacina

Numar total de sectoare / disc

Identificator de format

Numar sectoare / FAT

Numar sectoare / pista

Numar fete

Sectoare speciale

B. Tabela de alocare a fisierelor.

Exista doua structuri pentru FAT :

tabele FAT in care intrarea are 12 biti

tabele in care intrarea are 16 biti.

Continutul unei intrari in FAT este de fapt un numar de grupa. Alocarea spatiului pentru fisiere facandu-se la nivel de grupa de sectoare.

Dimensiunea unei grupe este 1 8 sectoare (se alege in functie de capacitatea discului).

Daca dimensiunea intrarii este 12 biti T valoarea maxima 0FFFh (4095) T 4096 de valori T putem descrie discuri cu capacitatea 4096 / 2 Kocteti 20 Mocteti.

Daca dimensiunea intrarii este de 16 biti T 0FFFFh T 65535 valori.

Prin numerele de grupa care se inregistreaza prin intrarile FAT se formeaza liste simplu inlantuite ale grupelor alocate fiecarui fisier. Inceputul fiecarei liste este pastrata in intrarea de catalog a fisierului.

Exista valori rezervate ale intrarilor in FAT :

0 - corespunde unei grupe libere.

F peste tot - sfarsit de lista.

(F)FF7 - marcheaza zone defecte pe disc.

0

1

2

3

4

5

6

7

200

000

206

000

205

000

208

206

800

208

21A

000

000

000

20D

FFF

000

000

210

000

000

000

FFF

000

000

000

000

218

000

000

FFF

0

0

0

0

0

Cand se sterge un fisier toate intrarile FAT corespunzatoare spatiului marcat de acel fisier vor fi marcate ca disponibile. Nu e afectat fisierul in zona sa de date. Spatiul alocat unui fisier creste odata cu cresterea dimensiunii fisierului. La crearea unui fisier nu se aloca spatiu peste necesarul din acel moment pentru fisier.

C. Catalogul radacina.

Fiecare intrare de catalog are lungimea de 32 octeti, deci un sector de pe disc contine 16 intrari de catalog (7 sectoare pentru un catalog T 112 fisiere). In subcataloage, dimensiunea nu este limitata. Numarul de intrari din catalogul radacina este limitat la 256 (16 sectoare). O intrare are 8 campuri. Formatul unei intrari de catalog este :

Deplasament

Dimensiunea

Format

Descriere

00h

8

ASCII

Numele fisierului

08h

3

ASCII

Extensia fisierului

0Bh

1

Binar

Atributele fisierului

0Ch

10

----

Rezervat

16h

2

Binar

Timp

18h

2

Binar

Data

1Ah

2

Binar

Prima intrare FAT

1Ch

4

Binar

Dimensiunea fisierului (in octeti)

Numele fisierului, daca este mai scurt de opt caractere, se completeaza la dreapta cu blancuri. Intre caractere nu sunt recomandate blancuri. Deasemenea nu se recomanda utilizarea caracterelor '*' si '?' ce au o semnificatie speciala pentru interpretorul de comenzi. Deasemenea caracterul '.'.

MS-DOS nu face deosebirea intre litere mari si litere mici. In primul octet al campului de nume dintr-o intrare de catalog pot aparea trei combinatii binare, care au semnificatie speciala.

00h - ca aceasta intrare de catalog nu a fost folosita;

E5h - fisierul respectiv a fost sters.

2Eh - se considera ca si cod special: punctul '.' pentru intrarile speciale, si '..', care exista in fiecare subcatalog, '.' descrie catalogul insusi si al doilea catalogul parinte.

Prima intrare a catalogului radacina este deasemenea rezevata pentru a inregistra eticheta de volum (care poate fi un sir de maxim 11 caractere).

Extensia se poate completa la dreapta cu blancuri. Combinatia care se foloseste ca extensie da o anumita informatie despre continutul fisierului.

Octetul de atribute foloseste fiecare bit din octet pentru a preciza unele caracteristici ale fisierelor :

Cod hexa

Semnificatie

01

RO    (pentru citire)

02

Atributul de fisier ascuns (Nu il listeaza comanda DIR)

04

Fisier sistem

08

Descrie eticheta de volum

10

Intrarea subcatalog (este subdirector)

20

Arhiva

40

Rezervat

80

Rezervat

Campul pentru timp :


Depl 17h Depl 16h

h h m m x x

5cb 6cb 5cb

Campul pentru data :

Depl 19h Depl 18h

y y m m d d

7cb 4cb 5cb

In campul pentru an 0 luna zi

pentru luna 0

pentru zi 0

Campurile de data si timp se pot folosi impreuna cu un intreg lung fara semn (4 octeti) la operatii de comparare. Pentru fisierele care au fost create fara a avea spatiu alocat si intrarea care descrie eticheta de volum, pentru acest camp avem 0.

Campul pentru dimensiunea fiserului. Valoarea lui corespunde in mod real cu dimensiunea fisierului. La fisierele create prin editoare de texte se poate intampla ca valoarea inregistrata aici sa depaseasca valoarea reala, deoarece acestea salveaza cate un buffer odata. Sfarsitul real al fisierului in acest caz va fi identificat prin codul ^Z (1Ah).

D. Zona de date.

Unitatea de alocare este grupa, de obicei alocarea se face la prima grupa disponibila, cu toate ca se pot aplica algoritmi de selectie a grupelor astfel incat spatiul unui fisier sa fie intr-o zona cat mai restransa a discului. Daca un fisier ajunge sa fie fragmentat, adica ajunge sa aiba grupe din zone diferite ale discului, se reduc performantele de transfer, deoarece creste numarul de deplasari ale capetelor de citire-scriere.

Partitionarea discurilor fixe.

Este un nivel superior de gestionare al spatiului in sensul ca inainte ca un disc sa poata fi utilizat spatiul sau este impartit intr-un numar de sectiuni logice numite partitii, fiecare comportandu-se ca o unitate specifica distincta. Conventia adoptata la MS-DOS este aceea ca numarul maxim de partitii este patru.

Este permis ca in partitii diferite sa se gaseasca sisteme de operare diferite cu propriile sale organizari ale spatiului din partitia rezervata. Aceasta divizare in partitii a fost impusa si de imposibilitatea unor resurse MS-DOS de a gestiona spatii mai mari de 32 Mocteti.

Fiecare partitie consta dintr-o zona contigua de cilindri si are o dimensiune data de utilizator. Numarul si dimensiunea partitiilor se pot modifica, dar doar prin distrugerea vechiului continut al partitiei.

Primul sector al discului fix va contine informatii despre partitionare, iar prima partitie va incepe cu primul sector de pe fata a doua a discului. Deasemenea in primul sector se mai gaseste un program de initializare, care verifica tabela de partitii, deduce care este partitia activa si determina incarcarea partitiei active.

Tabela de partitii ocupa ultima parte a sectorului, patru intrari de cate 16 octeti. Aceasta tabela incepe la octetul cu deplasamentul 1BEh, pentru ca ultimii doi octeti ai sectorului trebuie sa contina semnatura sistemului.

O intrare a tabelei de partitii :

Deplasament

Lungime

Descriere

0

1

Partitie activa / inactiva

1

1

Adresa cap inceput de partitie

2

1

Adresa sector inceput de partitie

3

1

Adresa cilindru inceput de partitie

4

1

Identificator sistem

5

1

Adresa cap sfarsit de partitie

6

1

Adresa sector sfarsit de partitie

7

1

Adresa cilindru sfarsit de partitie

8

2

Numar sectoare care preced partitia (LOW WORD)

A

2

Numar sectoare care preced partitia (HIGH WORD)

C

2

Numar sectoare ocupate de partitie (LOW WORD)

E

2

Numar sectoare ocupate de partitie (HIGH WORD)

Sistemul de intreruperi in MS-DOS.

In arhitectura calculatoarelor personale compatibile IBM semnalele de intrerupere pot fi generate de trei categorii de surse :

intreruperi hardware interne - sunt generate chiar in procesor, intr-una din urmatoarele situatii :

instructiunea precedenta provoaca o depasire a capacitatii registrelor procesorului (frecvent datorita unei impartiri cu 0).

in registrul de stare program este pozitionat fanionul de deviere (TRAP), ceea ce face ca dupa fiecare instructiune sa se genereze o intrerupere.

instructiunea precedenta a fost INTO (interrupt overflow) si este pozitionat fanionul de depasire OF (overflow flag).

intreruperi hardware externe - sunt generate de surse exterioare procesorului si ajung direct sau prin intermediul controllerului programabil de intreruperi la pinii corespunzatori ai procesorului.

intreruperi software - sunt generate prin instructiuni speciale prevazute in programe (INT), argumentul acestei instructiuni fiind nivelul pe care se genereaza intreruperea. Acestea se folosesc in mod normal pentru a apela diverse servicii oferite de S.O.

In arhitectura 80x86 sunt prevazute 256 de nivele de intrerupere. Nivelul de intrerupere are rolul de a permite selectarea unei anumite rutine de tratare. In procesor nu se definesc prioritati intre aceste nivele. Adresele rutinelor de tratare (exprimate pe cate 4 octeti) se gasesc intr-o tabela de vectori de intreruperi, situata in primul kilooctet de RAM (0 3FF). Nivelul de intrerupere este folosit ca indice in aceasta tabela. Atunci cand se ia in considerare un semnal de intrerupere, procesorul executa urmatoarele operatii :

Salveaza in stiva registrul fanioanelor (registrul stare program).

Dezactiveaza temporar intreruperile hardware prin stergerea fanioanelor corespunzatoare din registrul de stare program (TF si IF).

Salveaza in stiva adresa instructiunii urmatoare din programul in curs (CS:IP).

Citeste din tabela de vectori de intrerupere adresa corespunzatoare nivelului pe care a sosit intreruperea si efectueaza salt la aceasta adresa.

Rutinele de tratare a intreruperilor se termina cu o instructiune de revenire speciala IRET, care provoaca urmatoarele operatii :

Extrage din stiva IP si CS.

Extrage din stiva registrul fanioanelor.

Astfel se provoaca implicit reluarea programului suspendat cand a aparut intreruperea.

Fig. 3.5-

Initializarea continutului tabelei vectorilor de intrerupere se face la incarcarea sistemului de operare, partial de rutinele din BIOS si partial de rutinele de initializare din IO.SYS si MSDOS.SYS.

Intreruperi hardware.

Se numesc astfel nivelele de intrerupere din prima grupa de 16 : 00h 0Fh.

Utilizarea lor este urmatoarea :

nivelul 00h - impartire la 0 si ofera posibilitatea tratarii printr-o rutina a acestei situatii. La incarcarea S.O., vectorul pentru acest nivel este initializat din BIOS sa indice spre o instructiune IRET. Sistemul MS-DOS nu ofera implicit o tratare a impartirii cu 0.

nivelul 01h - este nivelul de executie pas cu pas. Aici sunt dirijate intreruperile care se genereaza dupa fiecare instructiune de program, cand este pozitionat TF. Acest vector este deasemenea initializat de BIOS spre o instructiune IRET.

nivelul 02h - pe acest nivel se trateaza intreruperile nemascabile (de exemplu aparitia unei erori de paritate in memorie). Acest vector este initializat la fel ca cele de mai sus.

nivelul 03h - este nivelul pentru intreruperile de test, prin care se fixeaza puncte de control (breakpoints) in program. Initializat la fel ca mai sus.

nivelul 04h - pe acest nivel se semnaleaza intreruperea de depasire, cea produsa de instructiunea INTO; se foloseste tot in scopuri de depanare. Initializat la fel ca mai sus.

nivelul 05h - tiparirea continutului ecranului (print screen). Aici exista un vector spre o rutina adevarata. Rezultatul executiei rutinei de intrerupere este memorat intr-un octet de stare care se gaseste la adresa de paragraf 0050:0. Daca este : 0 atunci tiparirea s-a efectuat corect, 1 atunc este in curs de tiparire, FF atunci a aparut o eroare la tiparire.

nivelul 06h - nu este folosit de MS-DOS.

nivelul 07h - nu este folosit de MS-DOS.

nivelul 08h - intreruperea de ceas - este o intrerupere hardware externa. Semnalele de intrerupere pe acest nivel sosesc de la un circuit de tip 8259 de pe canalul 0. Intreruperile de ceas la PC-uri sunt generate de circa 18,2 ori pe secunda, iar tratarea acestor intreruperi consta in incrementarea unui contor. Contorul este situat in memorie la adresa 0046:C. In rutina de tratarese face apel si la rutina de tratare a nivelului 1Ch, pe care programatorii pot include programe cu actiune dependenta de timp.

nivelul 09h - intrerupere de la tastatura (se produce la apasarea si la eliberarea unei taste). In esenta rutina care trateaza aceste intreruperi asigura preluarea de la tastatura a codului de scanare a tastei apasate. Rutina asigura transformarea codului de scanare si in cod ASCII si impreuna cele doua coduri se memoreaza in tamponul pentru tastatura, utilizat de BIOS. Acest tampon se gaseste la adresa 40:1E in asa zisa zona de date ROM-BIOS. Tot aceasta rutina mai asigura si recunoasterea unor configuratii speciale de taste, cum ar fi : CTRL-ALT-DEL, CTRL-Break.

nivelul 0Ah - este tot pentru intreruperile de ceas, dar de pe canalul 2 al lui 8259.

nivelul 0Bh - nu este folosit de MS-DOS.

nivelul 0Ch - nu este folosit de MS-DOS.

nivelul 0Dh - este nivelul pe care sosesc intreruperile externe de la unitatile de discuri. Acestea sunt dirijate pe canalul 5 al lui 8259.

nivelul 0Eh - nu este folosit de MS-DOS.

nivelul 0Fh - nu este folosit de MS-DOS.

Intreruperi BIOS.

Aceste intreruperi sunt generate prin software, cu ajutorul instructiunii INT xx, unde xx este nivelul intreruperii.

Caracteristic tuturor intreruperilor generate prin software este faptul ca sunt generate sincron cu programul in executie. Majoritatea au rolul de a apela servicii de sistem asa incat intrerupera trebuie sa fie insotita de informatii incarcate in registre care sa precizeze serviciul dorit si eventual infomatii necesare acelui serviciu.

Utilizarea intreruperilor BIOS este urmatoarea :

nivelul 10h - serveste la apelarea serviciilor de ecran, cum ar fi fixarea modului de lucru, a formei cursorului, afisarea unui caracter, a unui sir, defilarea ecranului etc.

nivelul 11h - furnizeaza informatii despre configuratia hardware a sistemului.

nivelul 12h - serveste pentru obtinerea dimensiunii memoriei

nivelul 13h - serveste pentru apelarea serviciilor de lucru la nivel fizic cu discuri : initializare, citirea starii, pozitionari, citiri, scrieri etc.

nivelul 14h - este prevazut pentru apelarea serviciilor de lucru cu interfata seriala : initializare, emisia sau receptia unui caracter, fixarea regimului de transmisie etc.

nivelul 15h - acest nivel se foloseste pentru comanda altor periferice si pentru raportarea evenimentelor de intrare/iesire.

nivelul 16h - permite realizarea de operatii asupra tamponului tastaturii.

nivelul 17h - permite controlul interfetei paralele, la care de regula este conectata o imprimanta.

nivelul 18h - intrerupere rezervata, folosita pentru declansarea interpretorului de BASIC din ROM.

nivelul 19h - intreruperea pentru incarcarea la cald.

nivelul 1Ah - intreruperea pentru citirea si pozitionarea timpului.

nivelul 1Bh - intreruperea la care se ataseaza rutina de tratare a combinatiei CTRL-C.

nivelul 1Ch - intreruperea care se leaga de nivelul 08h si da posibilitatea activarii unui program la momente determinate in timp.

nivelul 1Dh - nu contine o adresa de rutina, ci contine o adresa la care se gasesc parametri pentru initializarea ecranului.

nivelul 1Eh - contine adresa unui bloc de parametri pentru lucrul cu discurile.

nivelul 1Fh - contine adresa tabelei folosita pentru generatorul de caractere pentru codurile ASCII extinse.

Intreruperi DOS.

Intreruperile DOS sunt cele cu nivelele 20h 3Fh. Si acestea au evoluat fata de primele versiuni ale sistemului DOS, prin concentrarea majoritatii serviciilor oferite pe nivelul 21h. Pe acest nivel sunt prevazute si servicii apelabile prin intermediul intreruperilor BIOS.

Utilizarea intreruperilor DOS este urmatoarea (vor fi enumerate doar cele mai folosite):

nivelul 20h - este intreruperea pentru terminarea programului curent. Generarea unui astfel de intreruperi face ca executia programului sa se termine si controlul sa revina programului care a lansat acel program.

nivelul 21h - pe acest nivel sunt concentrate functiile MS-DOS.

nivelul 22h - vectorul de pe acest nivel este adresa rutinei care se apeleaza la terminarea programului in curs, dupa un INT 20h sau INT 27h sau dupa apelarea unor functii sistem (ca de exemplu : 00h, 4Ch si 31h).

nivelul 23h - contine adresa la care se transfera controlul pentru combinatia de taste CTRL-Break.

nivelul 24h - este intreruperea de tratare a erorilor critice de intrare-iesire.

nivelul 25h - foloseste pentru citirea de pe disc, localizarea sectoarelor facandu-se prin adrese DOS.

nivelul 26h - foloseste pentru scrierea pe disc, localizarea sectoarelor facandu-se prin adrese DOS.

nivelul 27h - intreruperea TSR (Terminate and Stay Resident), se termina executia programului dar nu se elibereaza memoria corespunzatoare lui.

nivelul 2Fh - intreruperea pentru gestionarea proceselor. Acest serviciu este disponibil numai de la versiunea 3.0 si permite ca anumite programe atasate pe acest nivel sa se desfasoare in paralel cu programele de aplicatie (de exemplu comanda print).

Formatul fisierelor executabile. Prefixul segmentului de program.

In sistemul de operare MS-DOS exista doua formate de fisiere executabile care sunt tratate in mod diferit. Identificarea tipului de format executabil se face prin extensia numelui de fisier (.COM si .EXE).

Structura fisierelor .COM.

Aceste fisiere au dimensiunea limitata la 64KB. Astfel intr-un singur segment se gaseste atat codul cat si datele programului. In fisier se gaseste imaginea pura a unui program (toate adresele din program se vor pune in legatura cu adresele fizice numai relativ la continutul registrului CS). Atunci cand un fisier .COM este adus in memorie, sunt identificate doua zone in portiunea de memorie rezevata programului. O prima zona de 256 octeti numita PSP care contine informatii generale, valabile pentru orice program si o a doua zona care cuprinde codul si datele, aduse direct din fisier. PSP-ul este construit de S.O. pentru fiecare program executabil adus in memorie.

Incarcarea unui program are loc in doua etape :

Gasirea unei zone de memorie si construirea PSP.

Incarcarea programului imediat in continuarea PSP.

Fig. 3.6-

Structura PSP este prezentata in urmatorul tabel :

Nr.

camp

Depl.

Lung.

Semnificatie

00h

INT 20h

02h

Dimensiunea memoriei (in paragrafe)

04h

nefolosit

05h

CALL FAR

0Ah

Vector INT 22h

0Eh

Vector INT 23h

12h

Vector INT 24h

16h

CS pentru programul apelant (de ex. COMMAND.COM)

18h

rezervat

2Ch

Pointer spre ambianta

2Eh

Adresa stivei pentru functii DOS

32h

rezervat

50h

INT 21h urmat de RETF

53h

rezervat

5Ch

FCB1

6Ch

FCB2

7Ch

rezervat

80h

DTA

Tabelul 3.6-

In campul 1 este prevazuta instructiunea INT 20h care constituie unul din modurile de terminare a executiei unui program. In program va apare un salt neconditionat la locatia respectiva. O justificare a acestei solutii ar fi ca daca intr-un program care face referiri externe ramane o referinta nerezolvata aceasta ar aparea ca apel la adesa 0.

Campul 2 arata cata memorie este disponibila pentru program, precizand adresa de paragraf a sfarsitului memoriei accesibile programului.

Campul 4 se foloseste la apelarea serviciilor DOS din prima versiune (00h 24h).

In campurile 5, 6, 7 se salveaza la inceputul executiei programului vectorii pentru nivelele de intreruperi indicate (22h, 23h, 24h). Vectorii vor fi instalati la sfarsitul executiei. Este posibil ca pe durata programului acesta sa foloseasca alti vectori pentru nivelele respective, fara a perturba functionarea altor programe.

Campul 10 este adresa de segment care indica spre zona in care apar sub forma de siruri de caractere variabilele sistem si valorile lor.

Campul 13 contine instructiuni pentru apelarea functiilor sistem mai recente.

Campurile 15 si 16 servesc la prelucrarea fisierelor in stilul CP/M.

Campul 18, in timpul executiei programului acest camp serveste ca tampon pentru operatiile cu discuri, daca programul apeleaza functii care necesita un astfel de tampon si nu este prevazuta o zona corespunzatoare in cadrul programului. Inainte de inceperea propriuzisa a programului, aici se gasesc parametrii din linia de comanda sub forma unui sir de caractere. Se precizeaza ca intre parametri nu se gasesc numele programului si eventualele informatii de redirectare ale intrarii sau iesirii.

Structura fisierelor .EXE.

Programele care se pastreaza in fisiere .EXE pot avea orice dimensiune, dar nu putem lansa in executie un program mai lung decat zona disponibila de memorie RAM.

Un fisier cu extensia .EXE consta din doua parti, prima contine antetul si tabela de relocare iar a doua contine programul propriu-zis si datele aferente acestuia. Antetul incepe cu primul octet al fisierului. In antet se gasesc informatii folosite in procesul de incarcare al programului in memorie.

Nr. camp

Depl.

Dim.

Continut

00h

4Dh, 5Ah - semnatura fisier .EXE

02h

ExtraBytes - numar octeti din ultimul sector alocat fisierului

04h

Pages - numar de sectoare alocate fisierului

06h

RelocItems - numar intrari in tabela de relocare

08h

HeaderSize - dimensiunea antetului in paragrafe

0Ah

MinAlloc    - numarul minim de paragrafe solicitate de program dincolo de sfarsitul programului

0Ch

MaxAlloc - numarul maxim de paragrafe pe care il solicita programul

0Eh

InitSS - valoarea initiala pentru SS

10h

InitSP - valoarea initiala pentru SP

12h

CheckSum - suma de control = suma negativa a tuturor cuvintelor din codul programului fara a lua in considerare antetul, ci doar partea executabila

14h

InitIP - valoarea initiala pentru IP

16h

InitCS - valoarea initiala pentru CS

18h

RelocTable - deplasamentul tabelei de relocare fata de inceputul fisierului (01Ch)

1Ah

Overlay - numarul de suprapuneri

Tabelul 3.6-

Campurile MinAlloc si MaxAlloc se completeaza la editarea de legaturi. Daca nu se precizeaza, valoarea lui MaxAlloc va fi completata cu 0FFFFh ceea ce inseamna ca programul solicita toata memoria disponibila. Daca ambele sunt zero atunci programul se va incarca la capatul superior al memoriei disponibile.

Pentru a incarca un program .EXE, MS-DOS-ul mai intai citeste antetul fisierului pentru a determina semnatura precum si pentru a calcula dimensiunea imaginii programului. Dupa aceasta incearca sa aloce memoria necesara. Mai intai aduna dimensiunea imaginii programului cu dimensiunea PSP-ului si cu cantitatea de memorie specificata in campul MinAlloc. Daca aceasta suma depaseste dimensiunea celui mai mare bloc de memorie disponibil, se opreste incarcarea programului si se intoarce un cod de eroare. Altfel se aduna dimensiunea imaginii programului cu dimensiunea PSP-ului si cu cantitatea de memorie specificata in campul MaxAlloc. Daca aceasta a doua suma este mai mica decat dimensiunea celui mai mare bloc de memorie disponibil, MS-DOS aloca respectiva cantitate de memorie. Altfel se aloca cel mai mare bloc de memorie disponibil.

Dupa alocarea memoriei, se determina adresa de segment, numita adresa segment de start, la care se va incarca imaginea programului. Daca ambele campuri MinAlloc si MaxAlloc sunt diferite de 0, imaginea va fi incarcata imediat in continuarea zonei rezervate PSP-ului.

Urmatorul pas este citirea inregistrarilor din tabela de relocare si ajustarea tuturor adreselor de segment specificate de pointerii de relocare. Pentru fiecare pointer din tabela de relocare se cauta adresa segmentului relocatabil corespunzator din imaginea program si se aduna la aceasta adresa segment de start. Odata ajustate, adresele de segment indica spre segmentele de memorie unde sunt incarcate codul si datele programului.

Fig. 3.6-

Dupa acestea se construieste PSP-ul in partea inferioara a memoriei alocate. MS-DOS-ul foloseste valorile din antetul fisierului pentru a seta registrii SP si SS si se ajusteaza registrul SS prin adunarea la aceasta a adresei segment de start. Deasemenea se seteaza registrii ES si DS sa indice adresa de segment a PSP-ului.

In final se citesc valorile initiale pentru CS si IP, tot din antetul fisierului, ajustandu-se valoarea registrului CS la fel ca si SS-ul, adunandu-se la aceasta adresa segment de start si se transfera controlul programului aflat la adresa ajustata.





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate