Document, comentariu, eseu, bacalaureat, liceu si facultate
Top documenteAdmitereTesteUtileContact
      
    


 


Ultimele referate adaugate

Adauga referat - poti sa ne ajuti cu un referat?

Politica de confidentialitate



Ultimele referate descarcare de pe site
  CREDITUL IPOTECAR PENTRU INVESTITII IMOBILIARE (economie)
  Comertul cu amanuntul (economie)
  IDENTIFICAREA CRIMINALISTICA (drept)
  Mecanismul motor, Biela, organe mobile proiect (diverse)
  O scrisoare pierduta (romana)
  O scrisoare pierduta (romana)
  Ion DRUTA (romana)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  Starea civila (geografie)
 

Ultimele referate cautate in site
   domnisoara hus
   legume
    istoria unui galban
   metanol
   recapitulare
   profitul
   caract
   comentariu liric
   radiolocatia
   praslea cel voinic si merele da aur
 
despre:
 
Structura de baza si componentele sistemului DOS
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 

1) DOS-BIOS

Aceasta componenta este memorata pe disk intr-un fisier cu numele l6q10qd
IBMBIO.COM (sau IBMIO.SYS sau IO.SYS, depinzind de furnizor.) Ea contine driverele pentru dispozitivele: CON (tastatura si display),
PRN (imprimanta), AUX (interfata seriala) si CLOCK (ceas). Deasemenea, sint continute drivere pentru floppy-disk-uri si pentru hard-disk.
Accesul la aceste drivere va implica apelul unor rutine din ROM-BIOS
(portiunea de BIOS aflata in ROM, care contine procedurile dependente de hardware.)

2) DOS-Kernel

Aceasta componenta este memorata pe disk in fisierul IBMDOS.COM (sau
MSDOS.SYS, depinzind de furnizor.) Contine functii de acces la fisiere, functii de I/O la nivel de caracter, etc. Aceste functii opereaza independent de hardware (e vorba de functiile DOS apelate prin instructiuni INT 21H.)

3) Interpretorul de comenzi (Shell) standard

Este memorat in fisierul COMMAND.COM. Acesta afiseaza prompter-ul la consola, acceptind si executind comenzi de la tastatura. Interpretorul de comenzi consta din 3 parti:

a) portiunea rezidenta b) portiunea tranzitorie c) rutina de initializare

a) Portiunea rezidenta
Contine handlere (rutine de tratare) pentru CTRL-Break (CTRL-C) si pentru erori critice (erori la disk sau la LPT). Erorile critice conduc la afisarea unor mesaje de forma (Abort, Retry, Fail ?)

b) Portiunea tranzitorie
Afiseaza prompter-ul (de exemplu C:\>), citeste comanda de la consola si o executa. Contine comenzile interne (DIR, TYPE, etc.) Cind un program executabil isi incheie executia, controlul revine la portiunea rezidenta, care verifica o suma de control, detectind astfel daca s-a modificat portiunea tranzitorie. Daca este asa, portiunea tranzitorie se reincarca de pe disk.

c) Rutina de initializare
Se incarca in decursul incarcarii sistemului DOS de pe disk. Cind operatia de incarcare s-a terminat, nu mai este necesara, deci spatiul respectiv va fi folosit in alte scopuri.




Comenzile acceptate de interpretorul standard sint de 3 tipuri:
-comenzi interne (COPY, DIR, RENAME, etc.)
-comenzi externe (fisiere disk de tip EXE sau COM), care sint incarcate in memorie in zona TPA (zona de procese tranzitorii)
-fisiere de comenzi indirecte (BAT), care sint fisiere text ce contin comenzi interne, externe sau alte nume de fisiere BAT.

Interpretorul testeaza intii daca linia introdusa de la tastaura este o comanda interna. Daca nu, cauta un fisier cu extensia COM, EXE sau
BAT (in aceasta ordine), intii in directorul curent, apoi in toate directoarele specificate in comanda PATH. Daca nu se gaseste nici un fisier adecvat, se tipareste mesajul:

Bad command or file name

Daca s-a gasit un fiser COM sau EXE, interpretorul foloseste functia
EXEC (4bh) pentru a-l incarca si a-i da controlul. Functia EXEC construieste in memorie un bloc numit PSP (Program Segment Prefix), in zona de procese tranzitorii TPA (la prima adresa disponibila). Apoi se incarca programul (imediat dupa PSP) si se executa operatiile de relocare, adica de ajustarea a valorilor simbolilor care contin referinte de memorie, conform cu pozitia concreta de memorie unde s-a incarcat programul.

4) ROM-BIOS

Aceasta componenta contine partea de autotestare de la punerea sub tensiune (POST-Power On Self Test), programul de bootstrap, rutine de intrare/iesire de nivel scazut (dependente de hardware), initializari, etc.

II) Incarcarea sistemului DOS

La punerea sub tensiune, procesorul incepe sa execute instructiuni de la adresa fixa 0FFFF0H (care este in ROM). La aceasta adresa se gaseste o instructiune JMP FAR la o portiune de program din ROM-BIOS, numita POST (Power On Self Test). Acest cod executa teste hardware pentru CPU, memorie, periferice si scrie vectorii de intrerupere pentru intreruperile hardware externe.

Se trece apoi la executia unei zone de cod numita ROM-Bootstrap, care testeaza daca exista disketta in unitatile de floppy-disk. Daca nu, se trece la examinarea diskului hard. Se citeste apoi primul sector al discului (fie de pe floppy, fie de pe hard-disk). Acest sector este numit Boot-Sector si contine un program incarcator (numit Disk Bootstrap) si informatii despre organizarea diskului. Programul Disk Bootstrap este citit in memorie la nivel fizic si i se da controlul.

Trebuie remarcat ca in acest moment sistemul de operare nu este incarcat, deci nu se dispune de functii DOS, etc. Harta memoriei arata in acest moment astfel:

ÚAAAAAAAAAAAAAAAAAAAAAAAAA¿
³ ROM-Bootstrap ³
AAAAAAAAAAAAAAAAAAAAAAAAAAa
³ ³
AAAAAAAAAAAAAAAAAAAAAAAAAAa <--- Virf RAM
³ ... ³
AAAAAAAAAAAAAAAAAAAAAAAAAAa
³ Disk-Bootstrap ³
AAAAAAAAAAAAAAAAAAAAAAAAAAa <--- Punct de
³ ... ³ incarcare
AAAAAAAAAAAAAAAAAAAAAAAAAAa
00400H ³ Vectori intrerupere ³
00000H AAAAAAAAAAAAAAAAAAAAAAAAAAÙ

Programul incarcator citeste primul sector al directorului radacina, determinind daca primele doua fisiere sint (in ordine): IO.SYS (sau
IBMBIO.COM, sau IBMIO.SYS) si MSDOS.SYS (sau IBMDOS.COM), adica DOS BIOS-ul si DOS-kernelul. Daca aceste fisiere nu sint identificate, se da un mesaj de forma:

Non-System disk or disk error
Replace and strike any key when ready

Daca fisierele sint identificate, Disk-Bootstrap le citeste si transfera controlul la punctul de start al modulului IO.SYS.

DOS-BIOS-ul consta din doua module: BIOS-ul propriu-zis si modulul
SYSINIT. Harta memoriei este acum:

ÚAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
³ ROM-Bootstrap ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa <--- Virf RAM
³ Disk-Bootstrap ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ ³
AAAAAAAAA ..... AAAAAAAAAAAAa
AAAAAAAAA ..... AAAAAAAAAAAAa
³ DOS Kernel (MSDOS.SYS) ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa <--- Locatie
³ SYSINIT (din IO.SYS) ³ temporara
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ BIOS (din IO.SYS) ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
00400H ³ Vectori intrerupere ³
00000H AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAÙ

SYSINIT este apelat de catre partea de initializare a BIOS-ului. El determina dimensiunea memoriei continue si apoi se auto-realoca (adica se muta) la o adresa mare de memorie. Apoi muta MSDOS.SYS din locul unde a fost incarcat in pozitia sa finala, suprascriind vechiul
SYSINIT (incarcat initial la adrese mici) si alte portiuni initiale de cod continute in IO.SYS, care nu mai sint necesare.

Se da controlul apoi la partea de initializare a lui DOS-Kernel. Sint initializate tabelele interne si zonele de lucru ale sistemului, se seteaza vectorii de intrerupere pe nivelele 20H...2FH (adica functiile
DOS) si se initializeaza driverele rezidente de periferice (disk, consola, etc.) Controlul revine apoi la SYSINIT.

In acest moment, sistemul DOS este operational, deci SYSINIT poate apela functii DOS. El incearca sa deschida fisierul CONFIG.SYS, care contine diverse comenzi specifice prin care se poate configura sistemul (aici se specifica ce drivere suplimentare (numite drivere instalabile) se vor incarca, mumarul de buffere pentru disk, numarul maxim de fisiere care pot fi deschise simultan, numele fisierului care contine interpretorul de comenzi, etc.) Daca acest fisier este gasit in directorul radacina, el este incarcat in memorie si se executa fiecare comanda (linie) din el. Imaginea memoriei este acum:

ÚAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
³ ROM-Bootstrap ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa <--- Virf RAM
³ SYSINIT ³
AAAAAAAAA ...... AAAAAAAAAAAa
AAAAAAAAA ...... AAAAAAAAAAAa
³ Drivere instalabile ³
³ FCB-uri ³
³ Buffere disk ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ DOS Kernel (MSDOS.SYS) ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa <--- Locatie
³ BIOS ³ finala
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
00400H ³ Vectori intrerupere ³
00000H AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAÙ

Dupa ce toate driverele instalabile au fost incarcate, SYSINIT inchide toate fisierele (dispozitivele) folosite si apoi redeschide consola
(CON), imprimanta (PRN) si interfata seriala (AUX), asociindu-le handler-ele de fisiere 0 (standard input), 1 (standard output), 2
(standard error), 3 (standard list) si 4 (standard auxiliary).
Handler-ele 0,1,2 sint asignate la CON, 3 este la PRN iar 4 la AUX, dar ele pot fi reasignate prin apeluri de functii sistem adecvate.

In final, SYSINIT apeleaza functia DOS EXEC pentru a incarca si executa interpretorul de comenzi. Odata interpretorul incarcat, el afiseaza prompter-ul specific si asteapta introducerea de comenzi de la tastatura. Portiunea tranzitorie din COMMAND.COM este incarcata peste SYSINIT, care nu mai este necesar. Imaginea finala a memoriei este urmatoarea:

ÚAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
³ ROM-Bootstrap ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa <--- Virf RAM
³ Parte tranzitorie din COMAND.COM ³
AAAAAAAAA ........ AAAAAAAAAa
³ Zona de Procese Tranzitorii ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ Parte rezidenta din COMMAND.COM ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ Drivere instalabile ³
³ FCB-uri ³
³ Buffere disk ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
³ DOS Kernel (MSDOS.SYS) ³
³ BIOS ³
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
00400H ³ Vectori intrerupere ³
00000H AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAÙ

III) Strucura Blocului PSP (Program Segment Prefix)

La lansarea unui program, DS:0000 si ES:0000 indica inceputul blocului
PSP al programului. PSP-ul este construit de catre functia EXEC la incarcarea programului de pe disk. Structura PSP-ului (care ocupa 256 de octeti) este:


Offs Dim Continut
--------------------------------------------------------------------- ÚAAAAAAA¿
+0 2 ³INT 20H³ Pr. EXE pot face JMP sau RET la PSP:0 pentru iesire
AAAAAAAAa
+2 2 ³MemTop ³ Virf memorie (in paragrafe)
AAAAAAAAÙ
+4 1 ³ ³ (rezervat)
AAAAAAAAAAAAAAAAAAAA¿
+5 5 ³CALL offset segment³ CALL FAR la dispecerul de functii DOS
AAAAAAAAAAAAAAAAAAAAÙ
+0aH 4 ³offset segment³ Adresa tratare terminare (INT 22H)
AAAAAAAAAAAAAAAAa
+0eH 4 ³offset segment³ Adresa tratare Ctrl-Break (INT 23H)
AAAAAAAAAAAAAAAAa
+12H 4 ³offset segment³ Adresa tratare erori critice (INT 24H)
AAAAAAAAAAAAAAAAAAAA¿
+16H 16H ³ rezervat ³
AAAAAAAAAAAAAAAAAAAAÙ
+2cH 2 ³EnvSeg ³ Adr. segment environment
AAAAAAAAAAAAAAAAAAAA¿
+2eH 2eH ³ rezervat ³
AAAAAAAAAAAAAAAAAAAAa
+5cH 10H ³ param. 1 formatat ³ implicit FCB pt. primul parametru
AAAAAAAAAAAAAAAAAAAAa al comenzii
+6cH 14H ³ param. 2 formatat ³ implicit FCB pt. al 2-lea parametru
AAAAAAAAAAAAAAAAAAAAÙ al comenzii
+80H 1 ³len³ contor de caractere de la offset 81H
AAAAAAAAAAAAAAAAAAAAAAAA¿
+81H 7fH ³Zona param. neformatati³ caractere din linia de comanda
AAAAAAAAAAAAAAAAAAAAAAAAÙ (fara cele de redirectare)

IV Structura programelor COM

Programele COM corespund modelului tiny (un singur segment si toate adresele si procedurile de tip near). Fisierul disk contine exclusiv modulul care se incarca, fara alte informatii suplimentare, ca in cazul fisierelor EXE.

Imaginea memoriei este:

CS:0000 ÚAAAAAAAAAAAAAAAAAAA¿
³ PSP ³
CS:0100 AAAAAAAAAAAAAAAAAAAAa <- Punct fix de start
³ . ³
³ . ³
³ . ³
AAAAAAAAAAAAAAAAAAAAa
CS:FFFE SP -->³ 0 ³
AAAAAAAAAAAAAAAAAAAAÙ

Programele COM au punct fix de start (100H) iar SP este plasat la adresa FFFE (ultimul cuvint). Acest cuvint e initializat cu 0. Ele se pot termina prin:

-apel INT 21H (functia 4cH)
-apel INT 20H
-prin RETN (daca SP contine valoarea initiala implicita). In acel cuvint de stiva fiind 0, RETN va da controlul la adresa (offset) 0, adica la primul octet din PSP. Acolo insa se gaseste codul unei instructiuni INT 20H (care provoaca revenirea in DOS).

Nu se face relocarea pentru programele COM (adresele sint offset-uri in cadrul unicului segmant).

Sablonul de dezvoltare pentru programele COM este:

_TEXT segment para 'CODE'
ORG 100H
ASSUME CS:_TEXT, DS:_TEXT, ES:_TEXT, SS:_TEXT start: jmp init
;
; Aici se pun definitii de date
; init:
;
; Aici se pune codul propriu-zis
; mov ax,4C00H int 12H
_TEXT ENDS end start

Uneori e necesara reducerea la minim a memoriei rezervate, si atunci sablonul de dezvoltare este:

_TEXT segment para 'CODE'
ORG 100H
ASSUME CS:_TEXT, DS:_TEXT, ES:_TEXT, SS:_TEXT start: jmp init
;
; Aici se pun definitii de date
; main proc near
;
; Aici se pune codul propriu-zis
; mov ax,4C00H int 12H main endp
;
; Aici se pun alte proceduri (daca e cazul)
; init: mov ah, 4AH ;Apel functie redimensionare memorie mob bx, offset end_mem ;Limita pina unde se pastreaza mov cl, 4 ;Calcul in shr bx, cl ;paragrafe (/16) inc bx ;plus unul de siguranta int 21H ;Apel propriu-zis mov sp, offset end_mem ;Initializare sp jmp main

init_mem label near db (512 - (init_mem - init)) dup (?) ;Stiva de 512 octeti
;
; Se folosesc si octetii dintre init si init_mem, care contin
; partea de initializare (nu mai este necesara pe durata executiei
; programului. Lungimea permisa a stivei va fi 512 octeti.
; end_mem label near
_TEXT ENDS end start

V) Structura header-ului fisierelor EXE

Offs Dim Continut
------------------------------------------------------------------- ÚAAAAAAA¿
+0 2 ³4Dh 5aH³ semnatura fisiere .EXE ('MZ')
AAAAAAAAa
+2 2 ³PartPag³ lungime fisier modulo 512
AAAAAAAAa
+4 2 ³PageCnt³ lungime in pagini de 512 octeti, inclusiv header
AAAAAAAAa
+6 2 ³ReloCnt³ numar de elemente din tabela de relocare
AAAAAAAAa
+8 2 ³HdrSize³ dimensiune header in paragrafe de 16 octeti
AAAAAAAAa
+0aH 2 ³MinMem ³ necesar min. de memorie peste sfirstul programului
AAAAAAAAa (in paragrafe de 16 octeti)
+0cH 2 ³MaxMem ³ necesar max. de memorie peste sfirsitul programului
AAAAAAAAa (in paragrafe de 16 octeti)
+0eH 2 ³ReloSS ³ deplasament segment stiva (folosit la incarcare SS)
AAAAAAAAa
+10H 2 ³ExeSP ³ valoare SP la lansare in executie
AAAAAAAAa
+12H 2 ³ChkSum ³ suma de control (minus suma tuturor cuvintelor
AAAAAAAAa din fisier)
+14H 2 ³ExeIP ³ valoare IP (adresa de start)
AAAAAAAAa
+16H 2 ³ReloCS ³ deplasament segment cod (folosit la incarcare CS)
AAAAAAAAa
+18H 2 ³TablOff³ pozitia in fisier a tabelei de
AAAAAAAAa relocare (uzual 01ch)
+1aH 2 ³Overlay³ indice de overlay (0 pentru module de baza)
AAAAAAAAÙ
+1cH
ÚAAAAAAAAA AA AAAAAAAA¿ Tabela de relocare.
+ ? 4*? ³offs seg³  ³off seg³ Incepe la poz. TablOff (vezi a18Hi).
AAAAAAAAAAAAAAAAAAAAAAÙ Are ReloCnt (vezi a6i) elem.
Ocupa ReloCnt*4 octeti
+ ? ? caractere pina la limita de paragraf (multiplu de 16)
+ ? ? inceputul programului

Deoarece un program EXE poate fi incarcat la orice adresa de segment, toate referirile la adrese de segment (in instructiuni ca JMP/CALL FAR sau MOV reg,data_seg) trebuie ajustate ca sa indice locatiile de memorie unde s-a incarcat modulul respectiv. Functia EXEC (4bh) executa urmatorul algoritm:

1. Creeaza un PSP cu functia DOS 26H.

2. Citeste 1cH octeti din fisierul EXE (portiunea formatata a header-ului) intr-o zona locala de memorie.

3. Determina lungimea modulului = ((PageCnt*512)-(HdrSize*16)) PartPag

4. Determina deplasament in fisier al modulului = (HdrSize * 16)

5. Selecteaza adr. de segment, START_SEG, (uzual PSP + 100H)

6. Citeste modulul in memorie la adresa START_SEG:0000

7. Seteaza pozitie in fisier la inceputul tabelei de relocare
(TablOff)

8. Pentru fiecare element al tabelei (ReloCnt): a. citeste elementul din tabela ca 2 cuvinte (I_OFF,I_SEG) b. determina RELO_SEG = (START_SEG + I_SEG) (adresa de memorie a elementului care trebuie relocat) c. citeste cuvintul de la adresa (RELO_SEG:I_OFF) (elemetul) d. aduna START_SEG la acest cuvint (ajusteaza adresa de segment) e. depune valoarea calculata inapoi la adresa(RELO_SEG:I_OFF)

9. Aloca memorie pentru program conform MaxMem si MinMem

10. Initializeaza registrele si da controlul programului: a. ES = DS = PSP b. SS = START_SEG + ReloSS, SP = ExeSP c. CS = START_SEG + ReloCS, IP = ExeIP

Ultima actiune (c.) se realizeaza printr-o secventa:

PUSH seg
PUSH offset
RETF


Colt dreapta
Creeaza cont
Comentarii:

Nu ai gasit ce cautai? Crezi ca ceva ne lipseste? Lasa-ti comentariul si incercam sa te ajutam.
Esti satisfacut de calitarea acestui document, eseu, cometariu? Apreciem aprecierile voastre.

Nume (obligatoriu):

Email (obligatoriu, nu va fi publicat):

Site URL (optional):


Comentariile tale: (NO HTML)


Noteaza documentul:
In prezent fisierul este notat cu: ? (media unui numar de ? de note primite).

2345678910

 
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite
Colt dreapta