Adresare de memorie de segment

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 21 iunie 2020; verificarea necesită 1 editare .


Adresarea segmentului de memorie  este o schemă logică de adresare a memoriei pentru un computer în arhitectura x86 . Adresa liniară a unei anumite celule de memorie, care în unele moduri de funcționare ale procesorului se va potrivi cu adresa fizică, este împărțită în două părți: segment și offset . Un segment este o zonă alocată condiționat a spațiului de adrese de o anumită dimensiune, iar un offset  este adresa unei celule de memorie relativ la începutul segmentului. Baza unui segment este o adresă liniară (o adresă relativă la cantitatea totală de memorie) care indică începutul segmentului în spațiul de adrese. Rezultatul este o adresă de segment (logică) , care corespunde segmentului de adresă liniar bază + offset și care este setată de procesor la magistrala de adrese.

Un selector este un număr (  ​​16 biți în x86 ) care identifică unic un segment. Selectorul este încărcat în registre de segmente.

În modurile reale și protejate ale procesorului x86, funcționarea adresei segmentelor este diferită.

Adresarea segmentului în modul real

În modul real al procesorului, întregul spațiu de adrese este împărțit în segmente identice de 65536 octeți ( octeți). Începutul fiecărui segment următor (așa-numita bază de segment) este deplasat față de baza celui precedent cu dimensiunea minimă a segmentului, adică cu 16 octeți (așa-numitul paragraf ). Astfel, segmentele se pot suprapune parțial. (De exemplu, segmentul 2 octetul 17 este, de asemenea, segmentul 3 octetul și segmentul 1 octetul.)

Selectorul este pe 16 biți și specifică numărul segmentului. Având în vedere că segmentele se succed la un interval constant de 2 4 =16 octeți, este foarte ușor să aflați adresa liniară a segmentului înmulțind-o cu 16 (sau deplasându-l cu 4 biți la stânga).

Adresarea segmentului în modul protejat (adresarea selectorului)

În modul protejat al procesorului, spațiul de adrese al unei sarcini este împărțit în segmente de dimensiuni diferite cu baze diferite. Descriptorii de segment stocați în tabelele de descriptori (GDT și LDT) servesc la determinarea bazei și dimensiunii segmentelor .

Aici, segmentele nr. 3 și nr. 11 indică aceeași zonă și sunt alias-uri (aliased din engleza  Alias ). Segmentul # 7 se întinde pe segmentele # 1, # 2, # 3 și # 11. Segmentul # 5 indică către GDT, permițându-i să fie modificat (acest lucru nu se aplică GDT-ului în niciun fel - mânerul său real este stocat în Registrul GDTR (indicat cu galben)). Adresarea prin tabelul de descriptor local (LDT) este similară.

Selectorul este, de asemenea, pe 16 biți, dar este împărțit în trei părți: RPL (biții 0-1), TI (bitul 2) și numărul descriptorului ([biții 3-15).

Vezi și

Note

Link -uri