Memóriakezel. riakezelés s I. A memória címzése; A memória felosztása; Abszolút változó (rádefiniálás); Memóriatömbök. dr.



Hasonló dokumentumok
Programozás alapjai. 10. előadás

találhatók. A memória-szervezési modell mondja meg azt, hogy miként

A 32 bites x86-os architektúra regiszterei

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Adatelérés és memóriakezelés

Mutatók és mutató-aritmetika C-ben március 19.

8. gyakorlat Pointerek, dinamikus memóriakezelés

Assembly Rekurzív függvények, EXE, C programok. Iványi Péter

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

Operációs rendszerek III.

Programozási nyelvek Java

Assembly Címzési módok. Iványi Péter

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Az assembly nyelv sor-orientált nyelv, tehát minden sorba pontosan egy utasítás kerül. Egy sor mezőkből áll a következőképpen:

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Az interrupt Benesóczky Zoltán 2004

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Megszakítások és kivételek

Rekord adattípus. Egymásba ágyazott rekordok. With utasítás. Változó rekord. Rekord konstans

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

Paraméter átadás regisztereken keresztül

Számítógépek felépítése

Pénzügyi algoritmusok

Operációs rendszerek. Az NT memóriakezelése

Szegmentálás. Memória kezelési stratégia mely a felhasználó nézőpontját támogatja Például:

Occam 1. Készítette: Szabó Éva

Programozás alapjai. 5. előadás

Alkalmazott modul: Programozás 8. előadás. Strukturált programozás: dinamikus memóriakezelés. Dinamikus memóriakezelés. Dinamikus memóriakezelés

Bevezetés a számítástechnikába

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Programozási nyelvek Java

386 processzor címzés

Bevezetés a C++ programozási nyelvbe

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Archi2 Gyak. (Processzorok Utasításszintű Kezelése) 2014 ősz

Alkalmazott modul: Programozás 10. fejezet. Strukturált programozás: dinamikus memóriakezelés. Giachetta Roberto

Processzorok Utasításszintű Kezelése tavasz

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Az egér, a botkormány (joystick) és a nyomtató programozása DOS-ban

5. Gyakorlat. struct diak {

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Fábián Zoltán Hálózatok elmélet

Assembly. Iványi Péter

DSP architektúrák dspic30f család memória kezelése

Assembly. Iványi Péter

Operációs rendszerek. Az NT folyamatok kezelése

_INVHU000_WriteReadParameter.cxf Frekvenciaváltók

Programozas 1. Strukturak, mutatok

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Nyíregyházi Egyetem Matematika és Informatika Intézete. Fájl rendszer

az Excel for Windows programban

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

OPERÁCIÓS RENDSZEREK. Elmélet

Számítógép felépítése

Hatékony memóriakezelési technikák. Smidla József Operációkutatási Laboratórium január 16.

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Rekurzió. Dr. Iványi Péter

A számok kiírása is alapvetően karakterek kiírásán alapul, azonban figyelembe kell venni, hogy a számjegyeket, mint karaktereket kell kiírni.

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

assume CS:Code, DS:Data, SS:Stack Start: xor di, di mov si, 1 Torles int 10h mov dl, 40 xor bh, bh mov ah, 02h Kesleltet int 16h

Utolsó módosítás:

2. Számítógépek működési elve. Bevezetés az informatikába. Vezérlés elve. Külső programvezérlés... Memória. Belső programvezérlés

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Bevezetés a programozásba. 9. Előadás: Rekordok

Máté: Assembly programozás

Mintavételes szabályozás mikrovezérlő segítségével

Programozás I. zárthelyi dolgozat

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Maximum kiválasztás tömbben

1. Alapok. Programozás II

OOP #14 (referencia-elv)

2016/08/31 02:45 1/6 Hardver alapok

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

Operációs rendszerek Folyamatok 1.1

Hardverközeli programozás 1 1. gyakorlat. Kocsis Gergely

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

A Számítógépek hardver elemei

Virtuális memóriakezelés Védelem. Memória védelem. Intel x68. Izsó Tamás október 18. Izsó Tamás Memória védelem/ 1

Programozás I gyakorlat

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Jelszavak helyes megválasztása, szótáras törés. Pánczél Zoltán

Számítógép architektúrák

A programozás alapjai

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Gregorics Tibor Modularizált programok C++ nyelvi elemei 1

APB mini PLC és SH-300 univerzális kijelző Általános használati útmutató

Mechatronika és mikroszámítógépek. 2018/2019 I. félév. Külső megszakítások

A C programozási nyelv VI. Parancssori argumentumok File kezelés

Átírás:

Memóriakezel riakezelés s I. A memória címzése; A memória felosztása; Abszolút változó (rádefiniálás); Memóriatömbök. Készítette: dr. Nyári Tibor

Emlékeztető! A memória címzc mzése: A memóri riát byte-onk onkéntnt címezzük, a címzc mzéshez regiszter-eket eket használunk. 16 bit-es címzési mód: m 1 regiszter=2 byte(=16 bit) 2 16 (=65535 byte) 32 bit-es címzési mód: m 64 Kbyte címezhető meg. 2 32 byte 4096 Mbyte címezhető meg.

szegmenscím Alapfogalmak: Abszolút t cím: c a memória valamely byte-jának a memória elejétől számított fizikai címe Relatív v cím: c a memória valamely pontjától számított cím Paragrafus: a memória egy 16 byte nagyságú része (a paragrafus mindig egy 16-tal osztható fizikai címen kezdődik, így a k. paragrafus a k*16. byte-on kezdődik) Szegmens: egy vagy több paragrafusból álló folytonos memóriaterület (nagysága nem haladhatja meg a 64 Kbyte-ot, a kezdőcíme megadható paragrafusokban vagy abszolút módon) Paragrafusokban általában egy szegmens kezdetét szokás megadni

abszolút cím Például: Egy 3 paragrafusnyi, 48 byte méretű szegmens, amelynek szegmenscíme: 2 $0000 (0) 0 16 byte $0010 (16) 1 16 byte $0020 (32) 2 16 byte $0030 (48) 3 16 byte $0040 (64) 4 16 byte szegmenscím 16 byte

DOS Kétkomponensű címzési módszerm Egy fizikai címet egy szegmenscím és egy ofszetcím határoz meg. Szegmens:Ofszet Szegmenscím: m: egy szegmens címe paragrafusokban Ofszetcím: a szegmensen belüli relatív cím eltolás - mindkét cím egy-egy regiszter, értéke: $0000 - $FFFF - több Szegmens:Ofszet is meghatározhat egy memóriacímet Normált cím: c ha az eltolás értéke 0-15 közé esik - normált cím esetén egy címet csak egyfélek leképpen lehet megadni

Például: Ha a szegmenscímet megszorozzuk 16-tal, és hozzáadjuk az ofszetcímet, akkor megkapjuk, hogy a fizikai cím a memória hányadik h byte-ja. $0001:$0021 $0002:$0011 $0003:$0001 1 * 16 + 33 = 49 2 * 16 + 17 = 49 3 * 16 + 1 = 49 mindhárom cím ugyanazt a byte-ot határozza meg a memória 49. ($0031.) byte-ját. az 1 Mbyte teteje: $FFFF:$000F, azaz 65535 * 16 + 15 = 1 048 575

A memória felosztása: sa: $10000:$0000 $E000:$0000 $C000:$0000 $A000:$0000 AT extended memória ROM BIOS terület Installálható ROM terület Video pufferek területe $0040:$0000 DOS átmeneti része Átmeneti programterület Transient Program Area DOS rezidens része ROM BIOS adatterület Megszakítási vektortábla Címek

A megszakítási si vektortábl blában a hardware és a software megszakítások címei vannak. A megszakítási si rutinok olyan végrehajtható eljárások, melyeket a rendszer használ anélkül, hogy sok esetben a programozó tudna róla. A vektortábla rutinjait a programozó is felhasználhatja saját céljaira. Megszakítási vektortábla

Rendszerterület, amely a hardware vezérl rléséhez szüks kséges adatokat tartalmazza. Ezt a területet átírni csak a rendszer alapos ismerete esetén szabad! ROM BIOS adatterület

A DOS alaprutinjai, amelyek indításkor betöltődnek a memóriába és az operációs rendszer futása során ott is maradnak. DOS rezidens része

Ez a terület a 640 kbyte legnagyobb része, ide kerülnek a felhasználói programok. Ide kerül az általunk írt program is, ezért ennek elhelyezkedését a memóriában és a program által használt további memóriaterületeket részletesen tárgyaljuk. Átmeneti programterület Transient Program Area

Értelemszerűen az operációs rendszer átmenetileg használt részeinek területe. DOS átmeneti része

Képernyőmemóriák területe. A rendszer egy képernyőmemória tartalmát vetíti ki a monitorra. Video pufferek területe Más-más típusú videokártyák esetén a videopuffer ezen területen belül különböző címeken helyezkedhet el.

Ezt a területet a rendszer foglalja Installálható ROM terület magának.

Ezt a területet a rendszer foglalja magának. ROM BIOS terület

AT extended memória Extended (bővített) memória: - az 1Mbyte feletti memória részr sz, melyet a processzor csak védett üzemmódban tud elérni.

PrefixSeg PSP A *.exe állomány elhelyezkedése a tárban: t HeapEnd HeapPtr HeapOrg Sseg:SPtr Szabad memória Heap Overlay puffer Verem OvrHeapEnd OvrHeapOrg SSeg:$0000 Szabad verem Globális változók Átmeneti programterület Transient Program Area DSeg:$0000 CSeg:$0000 Típusos állandók System egység kódszegmens 1. egység kódszegmens 2. egység kódszegmens k. egység kódszegmens *.exe tartalma Főprogram kódszegmens

PrefixSeg PSP PS P: Program Segment Prefix Egy 256 byte-os memóriaterület, melyet az operációs rendszer állít elő az *.exe állomány betöltésekor. A PSP szegmenscímét a System egység PrefixSeg változója tartalmazza.

A kódszegmens: k A program jól elkülöníthető programrészek szekből áll. Egy Pascal programnak mindig van egy főprogramja, amely különböző modulokat használ. Ezek lehetnek szabványos mo- dulok (System, Crt, Printer, stb.) és a programozó által készk szített, majd a programhoz hozzászerkesztett modulok. Minden modul lefordított kódja egy különk szegmens, melyek egymás s után helyezkednek el a tárban: -főprogram kódszegmense; - programhoz szerkesztett modulok kódszegmensei DSeg:$0000 fordított sorrendben, mint ahogyan azokat a USES kulcsszó után megadtuk, majd pedig a SYSTEM egység g az utolsó kódszegmens, amely minden programhoz automatikusan hozzászerkeszt szerkesztődik Egy kódszegmens k maximális mérete: m 64 kbyte CSeg:$0000 A program futásakor a vezérlés mindig más m s kódszegmensbenk van, az aktuális szegmens szegmenscímét a processzor CS (CodeSegment) regisztere tartalmazza, melynek értékét a SYSTEM egység Cseg függvényével lekérdezhetjük. Típusos állandók System egység kódszegmens 1. egység kódszegmens 2. egység kódszegmens k. egység kódszegmens Főprogram kódszegmens *.exe tartalma

Adatszegmens: Az adatszegmens egy közös, állandó adatterület. A főprogram és az összes egység ezt az adatterületet használja statikus adatainak tárolására. Az adatszegmens tartalmazza tehát a globális lis változókat és az összes típusos állandót. Az adatszegmens mérete is maximum 64 kbyte lehet. Ebből következik, hogy összességében ennél nagyobb terület nem áll rendelkezésünkre nkre globális adataink számára. 64 kbyte-nál nagyobb területet elfoglaló adatszerkezetet nem adhatunk meg programunkban, és a szabványos egységekben deklarált adatok szintén az adatszegmensből l foglalják k a helyet. DSeg:$0000 Globális változók Típusos állandók Az adatszegmens méretét a deklarált lt adatok határozz rozzák k meg, így az már a fordítás s során n eldől. Az adatszegmens szegmenscímét a processzor DS(Data Segment) regisztere tartalmazza, mely a program futása során állandó, értéke a System egység Dseg függvényével lekérdezhető.

Veremszegmens: LIFO A veremszegmenst a rendszer az adatok ideiglenes tárolt rolásárara használja: ide kerülnek az eljárások és s függvf ggvények lokális lis változv ltozói, paraméterei és visszatérési si címeic mei. A verem szegmenscíme és s mérete m a futás s során állandó. A szegmenscímet a processzor SS (Stack Segment) regisztere tartalmazza, értéke a System egység Sseg függvényével lekérdezhető. A verem méretét (min. 1 kbyte, max.. 64 kbyte) fordítás előtt meg lehet adni ($M fordítási direktíva) va). Ha ezt nem tesszük, akkor a keretrendszerben megadott alapértelmez rtelmezés lép érvénybe, amelynek szokásos értéke 16 kbyte körül van. A verem lefelé növekszik. Sseg:SPtr SSeg:$0000 Verem Szabad verem A verem-mutat mutató mutatja a következő elhelyezendő adat címét. Ez a verem szegmenscímétől számított relatív v cím, c mely kezdetben maximális, és ahogy telik a verem, úgy csökken az értéke. A verem-mutat mutató a System egység SPtr függvényével lekérdezhető.

Overlay (átfedési) puffer: Ez a terület csak akkor része programunknak, ha átfedési (overlay( overlay) technikát alkalmazunk, egyébk bként a verem után n közvetlenk zvetlenül l a heap következik. Az overlay technikát nagy programok esetén szokás használni, és lényege a következő: nem tartjuk bent egyszerre a tárban t a teljes OvrHeapEnd lefordított programot, hanem annak csak az éppen futó részeit. Így a futó OvrHeapOrg programrészek átfedik egymást. A betöltéseket az Overlay egység automatikusan elvégzi a hivatkozott programelemek alapján. Overlay puffer A puffer elejét a System egységben található OvrHeapOrg, végét az OvrHeapEnd függvénnyel kérdezhetjük le.

Heap: halom, rakás A heap egy dinamikus adattárol roló. A program futása közben dinamikus változv ltozókat lehet itt létrehozni illetve megszüntetni ntetni. A teljes heap bármekkora lehet, de egy dinamikus változv ltozó mérete nem lehet több t 64 kbyte-nál. HeapEnd A heap minimális illetve maximális HeapPtr Szabad memória méretét a $M fordítási direktívával adhatjuk meg, ha ezt nem tesszük, akkor a keretrendszerben megadott Heap HeapOrg alapértelmez rtelmezés lép életbe, mely szerint a heap lefoglalja a teljes szabad Overlay puffer memóri riát. A heap veremszerűen en működik, felfelé növekszik. A területfoglalásokat és felszabadításokat, a foglalt és a szabad területek felügyeletét a heap-manager végzi, mely a System egység része. A heap mutató alatti részben vannak a program által lefoglalt dinamikus változók, a felette lévő rész szabad. A heap alját a System egység HeapOrg változója, tetejét a HeapEnd, a heap-mutat mutatót a HeapPtr mutatja.

A Verem és s a Heap méretének beáll llítása: {$M Veremméret ret, HeapMin, Heapmax} Veremméret: ret: a verem pontos méretét állítjuk be (1024..65520) HeapMin: az a minimális heapméret, amelyre a programnak mindenképpen szüksége van a futáshoz (0..655360) HeapMax: az a méret, amelynél több heap-et nem szeretnénk, ha a program lefoglalna még akkor sem, ha van annyi hely (HeapMin..655360) A $M direktívát a főprogram elején kell megadni, elhagyása esetén a ke- retrendszerben megadott értékek a mérvadóak. Ha a HeapMin-ben megadott terület a program futásakor nem áll rendel- kezésre sre, akkor a program nem indul el.

A Seg és Ofs függvények: A függvények paramétere bármi lehet, aminek a memóri riában címec van (változó, rutin, stb.). A visszaadott érték k WORD típusú - a kérdéses objektum szegmens illetve ofszet címe. c Például: Seg(a) illetve Ofs(a)

Abszolút t változv ltozó,, rádefinir definiálás: Elképzehető olyan eset, amikor a programozó maga akarja meghatározni egy változó fizikai címét. Például amikor a ROM BIOS adatterület egy adatát szeretné programjából megváltoztatni (érdemes kerülni! lni!) vagy gyakoribb esetben a képer- nyőmem memóriát akarja direkt módon m elérni rni. Ekkor a deklaráci ció végén meg kell adnia a változó címét: var valtozo_nev nev: : típus t ABSOLUTE Szegmens:Ofszet; Abszolút változó megadásakor nem törtt rténik memóriafoglal riafoglalás, a változóhoz tartozó terület kezelésének felelőse a programozó. Abszolút t változv ltozót t csak indokolt esetben célszerc lszerű használni (sokszor csak kényelmi k szempontból), mert a memória néhányn ny részének megváltoztat ltoztatása esetén n a rendszer összeomolhat!!!

Például: A színes képernyő memória első karakterének abszolút deklarációja: var elso_karakter : array[1..2] of byte : absolute $B800:0; vagy Mono monitor esetén az egész képernyő lefedésére alkalmas deklaráció: type monitor_tipus tipus = array[1..25,1..80,1..2] of byte; var monitor : monitor_tipus tipus absolute $B000:0; stb.

BALTA!!! Ha tipus2 több memóriát foglal, mint tipus1, akkor v2 belelóg a v1 utáni változóba....érdekess rdekesség: Egy abszolút változó deklarálásakor a konkrét fizikai cím c m helyett írhatunk egy másik változv ltozónevet is. Például: var v1 : tipus1; v2 : tipus2 absolute v1; Így v2 címe megegyezik v1 címével. A rendszer v1 számára helyet foglal automatikusan, de v2 számára nem. v2 felügyelete teljes egészében a programozó dolga. BALTA!!! Jelen esetben v2-t rádefiniáltuk v1-re.

Például: MEM[$B800:I]:=Ord( * ); Memóriat riatömbök: A memória direkt elérésére a Pascal-ban az egész memóriát lefedő tömböket definiálhatunk: MEM [ Szegmens:Ofszet ] MEMW [ Szegmens:Ofszet ] MEML [ Szegmens:Ofszet ] A MEM tömb segítségével a memória egy adott címén található byte-ot írhatjuk illetve olvashatjuk. MEMW esetén a hivatkozás WORD típusú. MEML esetén a hivatkozás LONGINT típusú.

vége