Harta de memorie - Memory map

În informatică , o hartă a memoriei este o structură de date (care de obicei se află în memorie în sine) care indică modul în care este așezată memoria . Termenul „hartă a memoriei” poate avea semnificații diferite în contexte diferite.

  • Este cea mai rapidă și mai flexibilă organizație cache care folosește o memorie asociativă . Memoria asociativă stochează atât adresa, cât și conținutul cuvântului de memorie.
  • În procesul de boot , o hartă de memorie este transmisă din firmware pentru a instrui un nucleu al sistemului de operare despre aspectul memoriei. Conține informații cu privire la dimensiunea memoriei totale, orice regiuni rezervate și poate oferi și alte detalii specifice arhitecturii.
  • În implementările de memorie virtuală și unitățile de gestionare a memoriei , o hartă de memorie se referă la tabele de pagini sau registre hardware , care stochează maparea între aspectul memoriei virtuale a unui anumit proces și modul în care acel spațiu se raportează la adresele de memorie fizică.
  • În programele de debugger native , o hartă de memorie se referă la maparea dintre fișierele de bibliotecă executabile (sau) încărcate și regiunile de memorie. Aceste hărți de memorie sunt utilizate pentru a rezolva adrese de memorie (cum ar fi indicatorii de funcție ) la simboluri reale.

Harta de memorie PC BIOS

BIOS-ul pentru computerul personal IBM și compatibile oferă un set de rutine care pot fi utilizate de sistemul de operare sau de aplicații pentru a obține aspectul memoriei. Unele dintre rutinele disponibile sunt:

Funcția BIOS: INT 0x15, AX = 0xE801:

Acest apel de întrerupere BIOS este utilizat pentru a obține dimensiunea memoriei pentru configurații de 64 MB +. Este susținut de BIOS AMI din 23 august 1994 sau mai târziu. Apelantul setează AX la 0xE801, apoi execută int 0x15. Dacă s-a produs o eroare, rutina revine cu CF (Carry Flag) setat la 1. Dacă nu există eroare, rutina revine cu CF clear și starea registrelor este descrisă după cum urmează:

Inregistreaza-te Descrierea valorii
EAX Memorie extinsă între 1M și 16M, în KB. (Valoare maximă: 0x3C00 = 15360KB).
EBX Număr de 64K blocuri peste 16M.
ECX Memorie configurată de la 1M la 16M, în KB.
EDX Numărul de blocuri configurate de 64K peste 16M.

Funcția BIOS: INT 0x15, AX = 0xE820 - GET SYSTEM MEMORY MAP:

Intrare:

Inregistreaza-te Descrierea valorii
EAX 0x0000E820
EBX Valoarea de continuare sau 0x0 pentru a începe la începutul hărții.
ECX Dimensiunea bufferului pentru rezultat (20 octeți).
EDX 0x534D4150 (ASCII pentru „SMAP”)
ES: DI segment: compensarea locației tamponului pentru rezultat.

Structura tampon SMAP:

Decalaj mărimea Descrierea valorii
0 QWORD (8 octeți) Adresa de bază a regiunii hărții de memorie menționată de EBX.
8 QWORD (8 octeți) Lungime în octeți.
16 DWORD (4 octeți) Tipul intervalului de adrese.

Mod de utilizare: Sistemul de operare va aloca un buffer SMAP în memorie (20 bytes buffer). Apoi setați registre așa cum se specifică în tabelul „Intrare”. La primul apel, EBX ar trebui să fie setat la 0. Pasul următor este să apelați INT 0x15. Dacă nu există nicio eroare, apelul de întrerupere revine cu ștergerea CF și tamponul este umplut cu date care reprezintă prima regiune a hărții de memorie. EBX este actualizat de BIOS astfel încât atunci când sistemul de operare apelează din nou rutina, următoarea regiune este returnată în buffer. BIOS-ul setează EBX la zero dacă totul este terminat.

Vezi si

Referințe