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:
 
Programarea lui Extended Memory - sisteme de operare
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 

 

Din pacate sistemul de operare DOS, data fiind conceperea sa pentru procesorul i1y6yn
8086/8088 folosit in PC-uri, nu poate adresa decit 1Mb de memorie. Deoarece din acesta, 384 kb sunt rezervati pentru memoria ecran a cartelelor grafice, BIOS si extensiile BIOS, DOS are la dispozitie numai 640 kb.
Pentru a trece granita de 640 kb, specifica MS-DOS-ului, exista doua procedee. Pe de-o parte asa-numita Expanded Memory, dupa standardul LIM-EMS, elaborat impreuna de Lotus, Intel si Microsoft, iar pe de alta, Extented Memory, care rezulta inevitabil din constructia unui PC-AT. Expanded Memory extinde memoria aflata la dispozitia MS-DOS-ului, utilizind portiunile nefolosite ale domeniului de memorie rezervata (cei 384 kb). Procedeul EMS intercaleaza in pozitii neocupate din interiorul memoriei, asa-numite "pagini de memorie", avind marime de cite 16 KB.
Desigur acest lucru se realizeaza cu placi EMS speciale, care lucreaza cu o logica de comanda deosebita, pentru a putea intercala si apoi scoate paginile de memorie in si din spatiul de memorie dorit. Administrarea paginilor de memorie este preluata de un driver EMM, care pune la dispozitie mai multe functii prin intermediul
INT 67h. Expanded Memory poate fi insa si simulata. Pentru aceasta exista emulatoare
EMS speciale, care translateaza Expanded Memory, in EMS software compatibil pe harddisk sau in memoria extinsa. Deoarece procesoarele > 80286 a unui AT, in contrast cu 8086/8088, poate adresa 16MB de memorie, iar procesorul 808386 poate adresa 4GB, pe aceste clase de computere poate fi instalata memorie suplimentara. Aceasta trece dincolo de granita de 1MB si se numeste Extended Memory (XMS). De fapt XMS este prevazuta pentru sisteme de operare care nu sunt limitate la cei 640 KB ai lui MS-DOS, cum sunt de exemplu OS/2, XENIX sau UNIX, care fiecare pot gestiona
16 MB de memorie.
Oricum, cu limitarile de rigoare, se poate accesa si sub DOS, domeniul de memorie de deasupra limitei de 1Mb. In mod fundamental, DOS poate fi folosit numai intr-un singur mod, care poate adresa maximum 1 Mbyte de memorie.
La procesorul 8086/8088, aceasta mai este inca de inteles, deoarece el nu poate adresa mai multa memorie cu circuitele sale. Dar pentru >80286, MS-DOS poate fi manevrat numai in Real Mode, care emuleaza cu multa precizie numai proprietatile lui 8086/8088. In principiu, un >80286 in Real Mode nu sunt altceva decit un
8086/8088 deosebit de rapid, astfel incit nici aici nu se poate face o adresare peste limita 1 MByte.
Astfel stau lucrurile in asa-numitul Protected Mode, care a fost adaugat la >80286. Acest mod de functionare este de fapt noutatea, in comparatie cu procesorul
8086/8088. Protected Mode permite izolarea logica a domeniilor de adrese pentru mai multe programe. Printr-un schimb rapid intre aceste programe, este posibila rularea simultana (mai bine zis aparent simultana) a mai multe programe.
In Protected Mode, pot fi folosite 24 (la 80286) respectiv 32 (la 386,486) de linii de adresa. Astfel pot fi adresati pina la 16 MBytes, respectiv 4 GBytes de memorie de lucru. Deci in Protected Mode, accesul la XMS nu pune nici un fel de probleme;aici pot fi adresati, in plus fata de domeniul convential de memorie, mai multi MBytes. Cum pot fi folosite aceste capacitati, cand MS-DOS functioneaza totusi numai in Real Mode? Acest lucru este posibil, prin faptul ca prin MS-DOS puteti comuta si in Protected Mode, pozitionind un status bit special (flag), in cuvintul de stare al masinii. Prin aceasta puteti accesa memoria extinsa dupa cum doriti si apoi sa reveniti inapoi in Real Mode. Acest procedeu functioneaza intr-adevar, folosirea sa fiind insa, mult mai greoaie decit la prima vedere.
Cea mai simpla sarcina este comutarea in modul protejat. Pentru aceasta, 80286 si 80386 au la dispoziti instructiunea "Imsw", prin care comutarea se face mai lejer. Greutatile apar atunci cind aceasta instructiune nu este cea din urma de executat. Daca incercati comutarea in Protected Mode numai prin "Imsw", de regula computerul va "cadea". Aceasta se datoreste faptului ca multi registri si multe structuri de date, care nu aveau nici o importanta in Real Mode, pot fi de mare importanta pentru executia programului in Protected Mode.
Daca se trece peste acest hop, ne aflam in fata problemei accesului propriu-zis la memoria extinsa. Acest lucru nu mai este dificil cind dispunem de suficiente cunostinte de programare ale lui 80286 si 80386.
O problema reala este insa ultimul pas: revenirea in Real Mode (pentru a duce mai departe MS-DOS-ul) pentru ca, spre deosebire de comutatia din Real in Protected Mode, pentru 80286 nu exista instructiune care sa determine revenirea din modul protejat. Cind s-a dezvoltat 80286 s-a pornit de la ideea ca nimeni nu se va gindi la asa ceva, cu toate ca modul protejat ofera mult mai multe posibilitati decat cel real. Abia la dezvoltarea lui 80386 s-a revenit asupra acestei omisiuni, prin faptul ca a fost implementata o noua instr. pentru comutarea din modul protejat in cel real. Totusi singura metoda care permite o intoarcere din Protected in
Real la 80286, este oarecum "brutala": procesorul trebuie supus unui reset, deoarece dupa un reset, procesorul porneste intodeauna in Real Mode. Dar dupa un reset, computerul incepe de fiecare data cu autotestul, care in acest caz este de nedorit. Mai degraba, ar trebui ca programul sa se intoarca nemijlocit in locul care urmeaza comenzii reset. BIOS-ul unui AT contine cateva functii, pentru accesul la memoria extinsa.
Cu aceste functii se poate determina marimea menoriei extinse, poate fi comutat procesorul in modul protejat si celulele de memorie din Extented Memory pot fi inscrise sau citite. Aceste functii sunt puse la dispozitie drept subfunctii ale intreruperii BIOS 15h. Figura 1 reuneste functiile si parametrii corespunzatori.




ÉIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII»
º Functia 87h : transmiterea cuvintelor intre memoria de lucru si XMS º
ºAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAº
º ³ AH=87h º
º ³ CX= numarul de cuvinte de transmis º
º Intrare ³ ES= adresa segmentului unui GDT (Global º
º ³ Descriptor Table) º
º ³ SI= adresa offset a unui GDT º
ºAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAº
º Iesire ³ bit de stare carry : 0, nici o eroare; 1, eroare º
º ³ AX= cod de eroare : 0, nici o eroare º
ºAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAº
º Functia 88h : calculul marimii memoriei extinse º
ºAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAº
º Intrare ³ AX=88h º
ºAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAº
º Iesire ³ AX= marimea in kbytes a XMS º
ºAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAº
º Functia 89h : comutare in mod protejat º
ºAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAº
º Intrare ³ AX=89h º
ºAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAº
º Iesire ³ fara º
ÈIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII¼ figura 1 - functiile lui INT 15h pentru modul protejat

Prin functiile sale, INT 15h poate face, in principiu orice lucru care are legatura cu modul protejat. De un interes deosebit sunt primele doua functii ale acestei intreruperi. In acest context, functia 89h este neinteresanta deoarece, asa cum am mai mentionat, de indata ce este apelata aceasta functie, computerul se prabuseste, daca anterior nu au fost utilizati anumiti registri. Functia 88h este foarte usor de manipulat. Cu aceasta puteti determina marimea memoriei extinse.
Dupa apelul acestei functii se stabileste marimea in KBytes, a memoriei extinse si este intoarsa in registrul AX.
Programul exemplu "exramchk.c", demonstreaza utilizarea functiei 88h.
Programul constata cata memorie extinsa este instalata si intoarce un mesaj corespunzator. Ceva mai complicat este lucrul cu functia 87h. Cu aceasta functie pot fi transferate blocuri de memorie de lucru conventionala in XMS, cat si invers.
Asa cum arata figura 1, functia 87h, asteapta adresa de segment si de offset, a unei GDT. Pentru a explica semnificatia acestui GDT, trebuie sa revenim putin.
Procesoarele >80286 au fost dezvoltate cu scopul de a produce conditiile initiale hardware pentru un mod de lucru multitasking efectiv. Pe linga mecanismele de protectie a domeniului de adrese ale unui program fata de altul, apar aici si procese de salvare disc (swapping), la nevoie de programe intregi, parti de programe sau domenii de date, cand memoria de lucru este folosita in alte scopuri. Daca atunci sunt necesare din nou acele parti de program sau acele date, ele sunt aduse inapoi in memorie de pe harddisk. Acest procedeu presupune existenta dinainte a unei adresari a memoriei, cu totul diferite de cea din Real Mode. De exemplu, pentru a citi un byte in Real Mode, folosim o adresa de segment si una de offset, care impreuna formeaza adresa fizica a celulei de memorie referite.
In Protected Mode, un asemenea acces direct nu este posibil deoarece, daca aici un program ar putea utiliza adrese fizice, ar fi posibil pe de o parte sa se acceseze si spatiul altui program, iar pe de alta, procesorul nu ar putea sa aiba grija ca programele salvate in afara, sa fie citite din nou in memorie inaintea unei incercari de acces. De aceea, in modul protejat nu pot fi folosite adrese fizice, ci adrese logice. Transformarea adreselor logice in adrese fizice se face prin intermediul unei unitati de gestiune a memoriei
(Memory Management Unit, pe scurt MMU), integrate in procesor.
Deci continutul unui registru segment nu va fi inteles in Protected
Mode direct ca adresa, ci ca "sector". Acesta este un indicator spre o tabela in care se gasesc, din nou, "descriptori". In sfarsit, un descriptor descrie parametrii fizici ai unui segment de memorie, deci a adresei fizice, a lungimii si prioritatilor de acces ale acestuia. Tabela in care se gasesc descriptorii este denumita Tabela de Descriptori. Un program care ruleaza in modul protejat, foloseste selectori pentru a accesa domenii de memorie. MMU-ul calculeaza descriptorii cu ajutorul acestor selectori, astfel incat procesorul sa poata accesa fizic celulele de memorie. Daca un segment de memorie a fost transferat pe un suport de date extern, este la dispozitie un marcaj corespunzator, in descriptor. La un acces la acest segment, MMU recunoaste ca domeniul de memorie nu este inca la dispozitie in memoria de lucru, si incarca segmentul corespun zator de pe suportul de memorie. Prin selectoare si descriptoare procesorul, respectiv MMU-ul sau, poate deci supraveghea in mod simplu toate accesele la segmentele de memorie.

La folosirea intreruperii 15h, pentrul schimbul de date intre memoria de lucru conventionala si cea extinsa, procesorul este comutat in modul protejat. Insa mai intai trebuie incarcata o tabela de descriptori, pentru a putea accesa ambele domenii de memorie (deci si cea extinsa cat si memoria de lucru). De aceea intreruperea asteapta adresa unei tabele globale de descrip tori, in pozitia din memorie definita prin combinatia de registri ES:SI.
Tabela globala de descriptori este valabila pe intregul sistem de operare, nu numai pentru un program singular (in acest ultim caz, ar fi o tabela locala de descriptori). Figura 2 reda constructia unui GDT.

ÚAAAAAAAAAAAAAAAAAA¿
00h ³ rezervat ³ 8 bytes
AAAAAAAAAAAAAAAAAAAa
08h ³tabela globala de ³ 8 bytes
³ descriptori ³
AAAAAAAAAAAAAAAAAAAa
10h ³ adresa-sursa ³ 8 bytes
AAAAAAAAAAAAAAAAAAAa
18h ³adresa-destinatie ³ 8 bytes
AAAAAAAAAAAAAAAAAAAa
³ segment de cod ³
20h ³ BIOS ³ 8 bytes
AAAAAAAAAAAAAAAAAAAa
³ segment de stiva ³
28h ³ BIOS ³ 8 bytes
AAAAAAAAAAAAAAAAAAAÙ figura 2 - un GDT

Pentru aplicatia urmatoare, sunt importante numai campurile "adresa sursa" si "adresa-destinatie". Toate celelalte campuri sunt completate independent, la apelul lor, efectuat de catre BIOS. Ambele campuri contin descriptori.
Prin acestia trebuie data adresa fizica a segmentelor de memorie care sa serveasca drept sursa, respectiv drept destinatie, a transferului. Fiecare descriptor are lungimea totala de 8 Bytes. Figura 3 reda constructia unui desciptor.

ÚAAAAAAAAAAAAAAAAAA¿
00h ³ Lungimea ³ 2 bytes
³ segmentelor ³
AAAAAAAAAAAAAAAAAAAa
³ adresa fizica a ³
02h ³ segmentelor de ³ 3 bytes
³ memorie ³
AAAAAAAAAAAAAAAAAAAa
³ nivele de ³
05h ³ prioritate ale ³ 1 byte
³ accesului ³
AAAAAAAAAAAAAAAAAAAa
06h ³ rezervat ³ 2 bytes
AAAAAAAAAAAAAAAAAAAÙ figura 3 - un descriptor intr-un GDT

In campul 'Adresa fizica a segmentelor de memorie', trebuie indicat adresa fizica a segmentului de memorie de transferat. Pentru aceasta adresa sunt prevazuti
24 de biti, putind deci fi reprezentata prin 3 octeti. Campul 'lungimea segmentelor' indica lungimea domeniului de memorie de transferat. Dar, deoarece in apelul BIOS numarul de cuvinte de transferat trebuie oricum dat, BIOS-ul AT-urilor nu poate face deosebirea intre diferitele programe care fac acces la XMS. In masura in care se transmit corect parametrii, BIOS-ul executa transferul de date cerut. Ce se intampla insa daca mai multe programe folosesc simultan memoria extinsa?
Se poate intampla, de exemplu, ca un program rezident, impreuna cu un alt program-utilizator, sa depuna concomitent date, in acelasi domeniu din memoria extinsa, pentru ca "nu stiu unul de altul ". Incepand cu versiunea 3.3 a lui
MS-DOS, lucrurile merg si mai rau : aici se poate instala chiar un RAM-disc, iar incepand cu versiunea 4.0, pot fi gasite aici fisiere-tampon sau zone-tampon.
Cine garanteaza ca aceste programe nu folosesc exact domeniul din memoria extinsa ales pentru pentru memorarea datelor? Prima varianta de solutie consta in impiedicarea unui program de a utiliza memoria ocupata de o alta aplicatie.
Pentru a ajunge la o concluzie, trebuie sa stim cum un program care parte de memorie o poate folosi si care nu. Pentru aceasta, programul cere marimea memoriei extinse prin functia 88h a intreruperii 15h. Marimea intoarsa de aceasta functie, va fi apoi folosita integral sau partial.
Deci un program nu foloseste memorie neautorizata de functia 88h, deoarece porneste de la ideea ca, peste valoarea determinata, nu mai exista spatiu disponibil in memoria extinsa. Atunci, pentru a proteja un domeniu de memorie de accesul unui al doilea program, trebuie sa avem grija ca BIOS-ul sa nu intoarca marimea reala a memoriei extinse, ci numai domeniul din memorie care mai este inca disponibil. Pentru aceasta, trebuie redirectat vectorul intreruperii 15h (semnificind adresa rutinei de tratare a intreruperii apartinatoare), spre o rutina propie.
Fie cazul unui program care este foarte "avid" de spatiul de memorie, necesitind 640 KBytes de memorie extinsa. Acum, daca AT-ul dispune un total de
1 MByte de memorie extinsa, functia 88h intoarce, in mod corespunzator, valoarea
1024. Deci, programul trebuie sa redirecteze, intreruperea 15h spre o rutina propie, care sa intercepteze functia 88h intorcind o marime a memoriei redusa cu 640 KBytes; in acest caz, ramin 384 KBytes de memorie extinsa. Un program urmator, va percepe o memorie extinsa de 384 KBytes cind apeleaza functia 88h, el nici macar neincercind sa acceseze domeniul de memorie de deasupra (in acest caz, cei 640 KBytes rezervati), acesta fiind deci protejat la acces. Avantajul acestui procedeu este ca poate functiona de mai multe ori succesiv deoarece al doilea program care utilizeaza memoria extinsa, la rindul lui va redirecta vectorul intreruperii pentru a "informa" un program care urmeaza, cu o marime a memoriei extinse si mai reduse.

O problema apare totusi, in cadrul acestei metode, atunci cind trebuie incheiat un program. Atunci domeniul de memorie rezervat de program in XMS ar trebui re-eliberat. Teoretic acest lucru poate fi obtinut redirectind vectorul intreruperii 15h, din nou pe rutina initiala din BIOS.
Ce se intimpla insa daca, intre timp, sau bagat in vector alte programe?
Rutinele-service de intrerupere sunt si ele "scoase", iar problema initiala reapare : un program proaspat incarcat porneste iar de la premiza ca are la dispozitie intrega memorie extinsa. In afara de aceasta, o a doua problema nu a fost inca rezolvata; ce se intimpla oare, cu programele ajutatoare interne ale lui MS-DOS, cind folosesc XMS? Un exemplu in acest sens, este driver-ul pentru
RAM-disk. Acesta se numeste vdisk.sys sau ramdrive.sys, si poate sa gazduiasca un RAM-disk in memoria extinsa, incepind cu versiunea 3.3 a lui MS-DOS, interceptind
INT 19h.
Inainte de a utiliza XMS, trebuie neaparat verificat, daca nu este deja instalat un RAM-disk. Daca este cazul, atunci trebuie determinat marimea RAM-disk-ului.
Dupa aceea, se poate utiliza, pentru aplicatii, memoria aflata deasupra acestui domeniu. Pentru a stabili daca este instalat un RAM-disk, trebuie stiut cum functioneaza, de fapt acesta: un RAM-disk corupe vectorului de intrerupere 19h, spre o rutina proprie. In mod normal, intreruperea 19h este folosita pentru bootarea sistemului de calcul. In principiu, noua rutina a driver-ului de RAM-disk, nu face altceva decit sa redea controlul, service-rutinei "vechii" intreruperi 19h. Aceasta inseamna ca functionarea computerului nu este limitata in nici un sens.
Ca orice vector de intrerupere, noul vector pentru intreruperea 19h, consta dintr-o adresa de offset si una de segment. Adresa segmentului, reda inceputul segmentului de memorie, pentru noua rutina de tratare a intreruperii, iar adresa de offset indica spre prima comanda de executat din aceasta rutina.
De cele mai multe ori intr-un asemenea caz, adresa de offset este 0, deoarece inceputul segmentului este concomitent si inceputul rutinei. In cazul de fata insa, startul rutinei de intrerupere nu este la inceputul segmentului.
Acolo sunt depusi niste octeti de recunoastere, prin care se poate constata daca este, sau nu instalat un RAM-disk. Abia dupa aceea vine primul, si in acelasi timp ultimul, apel catre ultima rutina a intreruperii 19h. Deci, intregul efect al noii rutine-service pentru intreruperea 19h, consta in faptul ca, la inceputul rutinei sint asezati niste octeti de recunoastere (in primii 29 octeti) care indica un RAM-disk instalat.
Driverul se instaleaza, prin urmatoarea linie, introdusa in config.sys: device=vdisk.sys128/e
Astfel, prezenta unui RAM-disk este foarte usor de stabilit. Pe cind la o intrerupere 19h, cu RAM-disk instalat, octetii 12 pina la 1Ch contin textul
"VDISKV 3.3", in aceeasi octeti, cu RAM-disk-ul neinstalat sunt doar semne disparate, in locul unui text inteligibil.
Chiar daca pozitia exacta in care se gaseste textul in rutina de intrerupere difera de la MS-DOS la MS_DOS, putem fi siguri ca un RAM-disk este instalat, deindata ce textul "VDISK" se gaseste undeva intre cei 32 de octeti cititi de la inceputul segmentului intreruperii 19h. Oricum, nu este greu de scris o rutina care sa determine, dupa metoda descrisa, daca este sau nu instalat RAM-disk.
Adresa de inceput a RAM-disk-ului din XMS, poate fi preluata, deasemenea, din primii 32 de octeti ai rutinei de tratare a intreruperii 19h. In octetii
2C pina la 2E, se gaseste o adresa de 24 de biti, adresa de start propriu-zisa a RAM-disk-ului. Deci RAM-disk-ul incepe cu primul byte de dupa limita de
1 MByte. Daca acum, se consulta primii octeti ai RAM-disk-ului, adica octetii incepind cu adresa 010000 hex, se gaseste boot-block-ul RAM-disk-ului.
In primul rind recunoasteti, cu ajutorul octetilor de la 03 la 0A , ca domeniul de memorie este efectiv ocupat de RAM-disk, pentru ca aici se ga seste, din nou, sirul de caractere "VDISK 3.3".
In octetii 0B pina la 1D, urmeaza blocul de parametri BIOS. In acesta sunt informatii despre marimea sectorului, marimea cluster-ului, numarul de
FAT-uri s.a.m.d.
Blocul de parametri BIOS ai RAM-disk-ului, indica, de exemplu, ca
RAM-disk-ul lucreaza cu 128 Bytes pe sector, foloseste un sector pe cluster, contine o tabela FAT, permite maximum 64 de intrari in directorul principal si detine o capacitate totala de 1024 de sectoare, adica 128 de KBytes.
Un mare interes prezinta urmatorii 2 octeti, 1Eh si 1Fh. Acestia contin
(in KBytes), adresa primului byte din memoria extinsa, care nu mai este ocupat de RAM-disk. Aceasta deschide si posibilitatea marcarii memoriei extinse drept ocupata, crescind aceasta valoare. Un program ulterior care ar dori deasemenea sa foloseasca memoria extinsa, porneste de la ideea ca, domeniul rezervat in plus este ocupat de RAM-disk, si il lasa neatins.
Pe scurt, putem utiliza boot-block-ul RAM-disk-ului, pentru a fi siguri ca nici un program nu va altera datele dintr-un alt program in XMS.
Pentru aceasta, trebuie stabilit mai intii daca este instalat un RAM-disk, cautind in primii 32 Bytes ai rutinei intreruperii 19h, sirul de caractere
"VDISK". Daca se gaseste acest sir, atunci, in urmatorul pas, se cauta daca
RAM-disk-ul incepe in Extended Memory. Daca este cazul, se citeste marimea din byte-ul 1Eh si din 1Fh, insumind spatiul care va fi rezervat pentru programul nostru si salvind noua valoare, din nou in boot-block-ul RAM-disk-ului.
In sfirsit se poate utiliza din memoria extinsa de deasupra RAM-disk-ului, domeniul de memorie dorit, pentru rutinele si programele proprii.
Dupa cum se vede, exista doua procedee diferite de acces la memoria extinsa. Pe de-o parte, redirectind intreruperea 19h la o rutina proprie, astfel incit programele urmatoare vor fi induse in eroare, in sensul ca ar fi mai putina memorie instalata decit este realmente. Pe de alta parte, rezervind memorie in XMS, prin boot-block-ul unui RAM-disk. Deosebirea dintre cele doua procedee este semnificativa : la metoda prin intreruperea 19h, memoria extinsa este ocupata "de sus in jos", iar la manipularea boot-block-ului RAM-disk-ului, dimpotriva, "de jos in sus".
Cea mai buna este, ca de obicei, calea de mijloc : dupa start, programul va determina pentru inceput marimea memoriei extinse, prin intreruperea
15h. Apoi cerceteaza daca exista RAM-disk instalat in memoria extinsa. Daca este, se determina marimea lui. Pentru aceasta, programul trebuie sa porneasca de la ideea ca valoarea cea mai mica din cele determinate, este adevarata marime a emoriei extinse disponibile - si anume disponibila deasupra RAM-disk-ului. Acest domeniu de memorie se poate folosi dupa aceea fara probleme.Oricum, inainte de aceasta, mai trebuie verificat ca memoria sa nu fie folosita de alte programe.
Pentru aceasta, se scrie o noua rutina pentru INT 19h care, in locul valorii reale, intoarce o marime a memoriei extinse, diminuata cu cantitatea de memorie pe care o vom folosi, cind este apelata functia 88h.
La fel trebuie adaptat si marimea "oficiala" a RAM-disk-ului, astfel incit sa para ca memoria ocupata de program din XMS, este ocupata tot de
RAM-disk. Daca nu este instalat deloc RAM-disk-ul, trebuie ocupat un domeniu din memoria extinsa care sa simuleze boot-block-ul unui RAM-disk adevarat. Astfel vom fi siguri ca un program urmator, care vrea de asemenea sa utilizeze memoria extinsa si care pentru stabilirea marimii memoriei foloseste numai metoda RAM-disk-ului, nu se va suprapune din greseala peste datele programului initial. Prin acest procedeu, datele din programul initial vor fi pastrate in memoria extinsa, atit de sigur cit este posibil.

/*
Nume : exramchk.c
Limbaj :TurboC
Cartela grafica : oricare
Particularitati :fara
*/
/*-------------------------------------------------------------------------- EXRAMCHK.C

Calculeaza marimea memoriei extinse la AT-uri sau PS/2 de la modelul 5.0 in sus. Pentru aceasta este apelata functia 88h a intreruperii 15h
--------------------------------------------------------------------------*/
#include "dos.h" int extram ()
A
/*------------------------------------------------------------------------- aceasta functie intoarce marimea lui Extended Memory
----------------------------------------------------------------------------*/ union REGS cpu ;/*register-variable*/ cpu.h.ah=0x88 ;/*functia 88h */ cpu.h.al=0; /* stergere AL */ int86( 0x15,&cpu,&cpu); /*apel BIOS*/ return cpu.x.ax; /*intoarcerea valorii*/
S

main()
A if ( extram () ==0) printf("\n Masina dvs este un XT sau nu este instalata memoria extinsa\n"); else printf("\n Sistemul dvs detine %d KByte ",extram);
S

MOVERAM.ASM
;Muta un bloc de memorie de 100 de
;octeti de la adresa 3000:0000 hex
;din memoria conventionala la adresa
;0000:0000 hex in memoria extinsa
; stiva segment para stack dw 100h dup (?) stiva ends
; date segment para 'data'
;rezervat pt. GDT gdt db 16 dup(0);
;Adresa sursei:
;lungimea segmentului dw 0ffffh
;Adresa 030000 hex db 0,0,3
;Drept de acces db 97
;Rezervat db 0,0
;Adresa destinatiei :
;Lungimea segmentului dw 0ffffh
:Adresa 100000 hex db 0,0,10h
;Drept de acces db 97
;Rezervat db 0,0
;Restul GDT-ului (stiva si
;segment de cod ) db 16 dup (0) date ends
; program segment para 'code' assume cs:program,ds:dare, ss:stiva start proc far
;Incarca adresa segmentului de date in DS mov ax,date mov ds,ax
;1000 octeti mov cx,500
;Functia 87 hex mov ah,87h
;DS pe stiva push ds
;ES = DS pop es
;Adresa GDT-ului mov si,offset gdt
;Intrerupere int 15h
;Terminarea programului mov ax,4c00h int 21h start endp program ends end start






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