kategória | ||||||||||
|
||||||||||
|
||
A Pascal programok
memóriatérképe:
A tétel elején volt már szó arról, hogy a Pascal programokat DOS
operációs rendszer alatt futtathatjuk. A DOS alatt futó programok a 8086-os
processzor regisztereit használják fel a memória címzéséhez (eléréséhez). A
regiszterek mérete 16 bit, ami azt jelenti, hogy a legnagyobb
megcímezhetõ memória mérete 1 MByte. Ahhoz, hogy 1 MByte memóriát
címezni tudjuk 20 757c21h bites fiikai címekre van szükség. Mivel a regiszterek mérete
16 bit, ezért nem lehet direkt címeket használni a memória eléréséhez. A
megoldást a szegmentált címzés biztosítja. A memóriát részekre (szegmensekre)
osztjuk, így a teljes cím két részbõl épül fel: szegmens cím (16 bit),
megmutatja, hogy a memória melyik részében található a keresett rekesz, offszet
cím, amely a szegmensen belül megmutatja, hogy hányadik byte-on található a
kívánt adat. A 8086-os mikroprocesszor maximálisan 4 szegmenst tud megcímezni a
szegmensregiszterek használatával: CS - kódszegmens; DS - adatszegmens; SS -
veremszegmens; ES - extra szegmens (másodlagos adatszegmens).
A Turbo Pascal programok a memóriacímeket 4 byte méretû adatként
tárolják, ebbõl két byte a szegmens, 2 byte az offszet cím. Ezeket a
címeket tárolhatjuk a mutató típusok segítségével. Mivel a 16 biten
aábrázolható legnagyobb szám 65535, így a szegmensek mérete sem lépheti túl ezt
a korlátot (az offszet cím segítségével ennyi byte-ot tudunk címezni egy
szegmensen belül). A szegmensregiszterek tartalma megváltoztatható, így
speciális módszerek segítségével kihasználhatnánk az operációs rendszer által
biztosított 640 KByte-ot, de alapértelmezés szerint a szegmensek mérete 64
KByte.
Az egyes szegmensek a program egyes részeit tartalmazzák:
- Kódszegmens: A program futtatható része, és a konstansok.
- Adatszegmens: A program során felhasznált változók, és típusos konstansok.
- Stack szegmens: Az alprogramok által használt változók, illetve a dinamikus
változók.
Az ábrán látható egy Pascal program memóriatérképe.
A memória részei (kicsit részletesebben):
- Kódszegmens:
A program kódját tartalmazza (az EXE állomány tartalmának legnagyobb része). Itt
található a fõprogram és a felhasznált unit-ok kódja, minden egyes
unit-nak (és a fõprogramnak is) egy-egy 64 KB méretû
memóriaterület van fenntartva. A unit-ok használata tehát az egyik módja a 64
KB-os határ átlépésének. A kódszegmensen találhatjuk meg a unit-okban és a
fõprogramban felhasznált típus nélküli konstansokat is!
- Adat szegmens:
Mint az ábrán is látható, a programban (unit-okban is) felhasznált változók és
típusos konstansok kerülnek ebbe a szegmensbe. Mérete rögzített, maximum 64
KByte lehet. Tehát a programban felhasznált adatok (változók) méretének összege
nem haladhatja meg a 64 KByte-ot. Ez a korlátozás is feloldható a unit-ok
alkalmazásával.
- Verem szegmens:
A verem szegmens három részbõl épül fel: Stack, Overlay puffer és a Heap.
A Stack nevû területet az alprogramokban deklarált változók használják.
Az Overlay puffernek az Overlay technikát használó programok esetén van
szerepe, míg a Heap a dinamikus változók által felhasznált memóriaterület.
Érdekessége a Stack és Heap területnek, hogy ellenkezõ irányban
növekednek.
Találat: 1505