Memória kezeléspeople.inf.elte.hu/kinnaai/programoz%E1s/oprendszerek/op-1-mem.pdf · Cache •CPU...

Preview:

Citation preview

1

Memória kezelés

2

Programok, statikus linkelés• Rendszer könyvtár, mint bármelyik másik

tárgykód (object file)• Előny

– Egyszerű– Nincs verzió probléma, program és library illeszkedik

• Hátrány– Nagy bináris kód memóriában, merev lemezen– Minden programban saját library

3

Programok, dinamikus linkelés• Linkelés (kapcsolat) késleltve van a végrehajtásig• Minden könyvtár (library) rutinhoz csak egy

betöltőt tartalmaz• Előny

– Egy library a merev lemezen és a memóriában• Hátrány

– Verzió ütközés• Verzió számmal elég jól kezelhető UNIX alatt• „Windows DLL Hell”

4

Processzus• Egy vagy több futtatható szál• Futáshoz szükséges erőforrások

– Memória (RAM)• Program kód (text)• Adat (data)• Különböző bufferek

– Egyéb• Fájlok, disk hely, nyomtató, stb.

5

Operációs rendszer néhány célja• Maximalizálja a CPU kihasználtságát• Maximalizáljuk a memória kihasználtságát• Minimalizáljuk a válaszidőt• Fontos (prioritásos) processzusokat vegye előre

• Ellentmondó célok– Ha maximalizáljuk a CPU kihasználtságát (minnél több

processzus futtatásával) növeljük a válaszidőt

6

Memória gazdálkodás• Memory management• Nyilvántartja hogy mely memória foglalt illetve

szabad• Memóriát foglal a processzusok számára amikor

szükséges– Felszabadítja a memóriát végül

• Kezeli a memória hely átadást a memória és a diszk között

7

Követelmények• Relokáció

– A programozó nem tudja, hogy a processzus hol lesz a memóriában amikor végrehajtódik

– Amíg egy processzus fut, lehet hogy áthelyeződik a diszkre

– A memória referenciákat át kell alakítani a kódban

8

Követelmények

9

Követelmények• Védelem

– Egy processzus ne érhesse el egy másik processzus adatait

– Lehetetlen abszolút címet ellenőrizni, hiszen lehet hogy a processzus áthelyeződik

– Futás közben kell ez a védelem

10

Követelmények• Megosztás

– Több processzus is el tudja érni ugyanazt a memória helyet

11

Követelmények• Logikai szerkezet

– A programokat modulokban írjuk– A modulokat függetlenül írhatjuk és fordíthatjuk– Különböző fokú védelemre lehet szükség (csak

olvasható, csak futtatható)• Fizikai szerkezet

– A program által igényelt memória nem biztos hogy rendelkezésre áll

– A programozó nem tudja hogy mennyi hely fog rendelkezésre állni

12

Memória hierarchia

RegiszterekCache

Memória (RAM)Mágneses diszkMágneses szalag

1 nsec2 nsec10 nsec10 msec

100 sec

Tipikus elérési idő Tipikus kapacitás

< 1 KB1 MB

512 MB100 GB100 MB

13

Cache

• CPU és memória között– 1 és néhány ciklus– 1000 ciklus a RAM eléréshez

• Korábban elért adatot tartalmaz– Gyorsabb elérés, mint a memórához való hozzáférés

• Hardware kezeli• Általában hierarchikus, on és off chip

CPU Regiszter Cache Memória

word block

14

Memória kezelő algoritmusok• 2 fő osztály

– Mozgatják a processzusokat a memória és a diszk között

• Swapping, paging (lapozás)– És amelyek nem

• Egyszerű• PC nem használja, de telefonokban, PDA-ban használják

15

Kellenek-e a bonyolult algoritmusok?

A memória növekedése nem ugyanolyan mint a processzoroké.

Mindig lesz olyan alkalmazás, mely több memóriát igényel.

Lásd multimédia

16

Monoprogramozás,csere és lapozás nélkül

Operációs Rendszer,

a RAM-ban

Felhasználóiprogram

0

0xFFFOperációs Rendszer,

a ROM-banFelhasználói

program

Operációs Rendszer,

a RAM-ban

Felhasználóiprogram

Eszköz meghajtó,a ROM-ban

Régi nagyszámítógesrendszerek,ma már ritka

Kézi számítógépek,beágyazott rendszerek

MS-DOS

17

Monoprogramozás• OK, ha

– csak egy processzust kell futtatni– a szükséges memória egyenlő a rendelkezésre álló

memóriával• Egyébként

– Rossz CPU kihasználtság ha I/O-ra kell várni– Rossz memória kihasználtság ha különböző munkák

vannak

18

Megoldás• Osszuk fel a memóriát futtassunk több processzust

– Multiprogramozás, multitasking

19

Hogyan osszuk fel a memóriát?• Egyik megoldás:

– Osszuk fel a memóriát egyenlő részekre, partíciókra

– Ha egy processzus elfér akkor bármelyik részbe betölthető

– Ha a teljes memóriánál kisebb de egy résznél nagyobb nem futhat

– A kihasználatlan részeket elvesztegetjük

• Belső töredezettség (fragmented)

Processzus E

Processzus D

Processzus B

Processzus A

Processzus C

20

Változó méretű, de rögzített partíciók• A memória partíciókhoz

processzus sorok (queue) tartoznak

• Egy processzus a legkisebb, de a processzusnál nagyobb méretű partícióba kerül

Operációsrendszer

21

Változó méretű, de rögzített partíciók• Probléma

– Bizonyos partíciókat egyáltalán nem használunk

– Például: • kis processzusokat használunk,

de csak nagy partíciók állnak rendelkezésre

• hosszú lesz a várakozás

Operációsrendszer

22

Változó méretű, de rögzített partíciók• Egy sor

– Ha egy partíció kiürül, akkor az első processzus amelyik belefér betöltődik

• Akár kis processzus nagy partícióba

– Növekszik a belső töredezettség (fragmented)

Operációsrendszer

23

Változó méretű, de rögzített partíciók• Másik stratégia

– Az egész sorból kiválasztjuk azt a legnagyobb processzust amelyik belefér a partícióba

• Hátrányosan kezeli a kis munkákat, pedig a kis munkák általában az interaktívak

– Egy kis partíció az interaktív munkáknak

– Egyetlen munka sem mellőzhető k-nál többször

• OS/360 IBM gépek, ma már nem használják

Operációsrendszer

24

Dinamikus méretű partíciók• A partíciók változó méretűek• A processzus pontosan annyi memóriát kap

amennyit igényel– Feltételezzük, hogy a processzus tudja mennyi kell

25

Dinamikus méretű partíciók

Operációsrendszer 8M

56M

Operációsrendszer 8M

36M

Processzus 1 20M

Operációsrendszer 8M

Processzus 1 20M

Processzus 2 14M

22M

26

Dinamikus méretű partíciók

Operációsrendszer 8M

4M

Processzus 1 20M

Processzus 2 14M

Processzus 3 18M

Operációsrendszer 8M

4M

Processzus 1 20M

14M

Processzus 3 18M

Operációsrendszer 8M

4M

Processzus 1 20M

8M

Processzus 3 18M

Processzus 4

6M

27

Dinamikus méretű partíciók

Operációsrendszer 8M

4M

20M

8M

Processzus 3 18M

Processzus 4

6M

Operációsrendszer 8M

4M

14M

8M

Processzus 3 18M

Processzus 4

6M

Processzus 5

6M

Processzus 5 14M

Hova???

28

Töredezettség• Külső töredezettség

– A lefoglalt memóriához képesti külső részeket vesztegetünk el

– Összmemória lehet hogy elég, de szét van szórva– Memóriatömörítés használható

• Belső töredezettség– A lefoglalt memórián belüli részt vesztegetünk el

29

Több probléma is van• Egy processzusnak mennyi memóriát foglaljon?

– Ha rögzített a méret, akkor nem gond– Mi van ha növekszik a memória igény

• Ha a processzus mellett van hely, nem gond• Elmozgathatja a processzust ahol van hely

• Melyik szabad helyhez rendelje a processzust?

30

Memóriakezelés láncolt listával• Láncolt listába (linked list) fűzzük a szabad és

foglalt memória szegmenseket– Egy elem: cím, méret– A címek növekvő sorrendjében

• Így könnyebb összevonni a szomszédos lyukakat

CímMéretMutató

CímMéretMutató

CímMéretMutató

CímMéretMutató

31

Memóriafoglalási stratégiák• First-fit

– Addig keres a szegmensek listájában, amíg meg nem találja az első megfelelő méretű lyukat

– A leggyorsabb, a lehető legkevesebbet keres– Nagy a külső töredezettség

• Sok kihasználatlan lyuk a lista elején– Több nagy blokkot hagy a memória végén

32

Memóriafoglalási stratégiák• Next-fit

– First-fit egy változata, de a keresés, az utoljára sikeresen lefoglalt helytől kezdődik

– Bays bizonyította, hogy rosszabb teljesítményű, mint a first-fit

33

Memóriafoglalási stratégiák• Best-fit

– Az egész listát végigkeresi és a legkisebb alkalmas lyukat választja

– A first-fit és next-fit -nél több memóriát veszteget el, mivel kicsi használhatatlan lyukakat képes csinálni

34

Memóriafoglalási stratégiák

Utolsófoglalás

lefoglalt

szabad

first-fit

best-fit

next-fit

előtte utána

16 Mbytefoglalása esetén

35

Memóriafoglalási stratégiák• Worst-fit

– Ha nem akarunk sok kis lyukat választhatjuk a legrosszabb, legnagyobb lyukat

– Így a maradék lyuk is nagy lesz– Megmutatták, hogy az előzőeknél rosszabb

36

Memóriafoglalási stratégiák• Előző négy algoritmus gyorsítható

– Ha külön listát tartunk fel a lyukaknak• Nem kell végigkeresni a processzusokat is• A probléma

– A foglalásnál be kell illeszteni a listába– A felszabadításnál ki kell venni a listából

– A lyukak listája lehet nagyság szerint is rendezve• Ekkor a best-fit gyorsabb lesz

37

Memóriafoglalási stratégiák• Quick-fit

– A leggyakrabban kért méretekhez külön lyuklistát készítünk

– Gyorsan talál megfelelő lyukat– Nehéz ellenőrizni, hogy szomszédos lyukkal

összevonható-e

38

Memóriafoglalási stratégiák• Összefoglalva

– First-fit és next-fit a legjobb módszerek, a többihez képest

– Ritkán használják ezeket manapság– Például a Buddy rendszert használják

39

Buddy rendszer• Lefoglalandó memória mérete 2 többszöröse

– 2x

• Dönteni kell– Felső határról: pl 2000K memória esetén xmax=10,

ekkor maximum 210=1024K memória foglalható egyszerre, a többi (976K) csak kis darabokban

– Alsó határról: legkisebb lefoglalható egység• Kis külső töredezettséget eredményez• Belső töredezettsége viszont nagy lehet

40

Buddy rendszerxmin=6 26=64K, xmax=10 210=1024K

1M memória áll rendelkezésre

41

Buddy rendszer, fa szerkezet

42

Slab foglalási rendszer• Solaris, Linux használja• Jeff Bonwick, SunOS• Alapötlet

– Elég sok memória kell bizonyos fix méretű adatokhoz (objektumokhoz)

• File leírók, mutexek, szemaforok, stb

– Az objektum inicializálásához szükséges idő több mint a foglaláshoz vagy felszabadításhoz szükséges idő

– Így a memóriát nem kell felszabadítani, hanem az inicializált formájában tartsuk meg

43

Slab foglalási rendszer• Cache lista: kétszer kapcsolt lista• Cache: három, kétszer kapcsolt lista

– Teljesen foglalt „slab”-ek listája– Részben foglalt slab-ek listája– Üres slab-ek listája

• Slab: – folytonos memória darab– azonos méretű objektumok csoportja

44

Slab foglalási rendszer

45

Slab foglalási rendszer• Quick-fit -hez hasonló, mert azonos méretű

objektumokat tartalmaz egy cache• Memória felszabadítás könnyű

– Az üres slab listából lehet felszabadítani• Memória foglalás könnyű

– A slab-ben levő memóriát használjuk• A külső töredezettség kicsi• Belső töredezettség minimális

– Az objektum éppen megfellelő méretű– Slab mérettel befolyásolható

46

Memóriakezelés bittérképpel• Foglalt és szabad memóriát karban kell tartani

– Láncolt lista– Bittérkép

• 0 : az egység szabad• 1 : az egység foglalt

47

Memóriakezelés bittérképpel• Allokációs egység mérete fontos

– Allokációs egység kicsi >> nagy bittérkép– Allokációs egység nagy >> nagy lehet a belső

töredezettség• Általában jól használható• A fő probléma a keresés

– n darab összefüggő 0 bitet kell keresnie– Mivel átlóghat szóhatáron, nem egyszerű!!!– Például: ha 5 memória egység kell a processzusnak

1 0 1 1 1 1 0 0 0 0 0 1 1 1 1 1

48

Memória tömörítés• Csökkenthető a

külső töredezettség– Csak ha a

processzusok áthelyezhetők

– Általában hardweres támogatást igényel

Processzus E

Processzus D

Processzus B

Processzus A

Processzus E

Processzus D

Processzus B

Processzus A

49

Relokáció• Logikai cím

– A programon belüli hely• Amikor a program fut, egy

valóságos fizikai cím kellene

• A logikai címeket mikor rendeljük fizikai címhez?

Process Control Block

Program

Adat

Verem

50

Relokáció• Utasítások és adatok a memóriához rendelése

– Fordítási időben• Memória hely előre ismert, abszolút címet lehet generálni

– Betöltési időben• Áthelyezhető kód kell• A betöltő (loader) végzi a hozzárendelést

– Végrehajtási időben• Áthelyezhető kód, melynek futás közben is változhat a helye• Hardware támogatás kell, bázis és limit regiszter

51

Relokáció

52

Relokáció, futási időben• Amikor a program betöltődik meg kell határozni

az aktuális (abszolút) memória címet• A diszkre kiírás és visszaolvasás (swap) miatt is

megváltozhat a memória cím• Memória tömörítés is megváltoztathatja a

memória címet

53

Relokáció

Bázis regiszter Process Control Block

Program

Adat

Verem

+

<Határ regiszterAbszolút cím

Relatív cím

Megszakítás az op. rsz. -nek,címzési hiba

54

Relokáció• Bázis regiszter

– A processzus kezdő címe• Limit regiszter

– A processzus végének címe• Amikor egy processzus betöltődik, a regiszterek

megfelelő értéket kapnak

55

Relokáció• A bázis regiszter értékét a relatív címhez adjuk

hozzá, hogy egy abszolút memória címet kapjunk• Az eredmény címet összehasonlítjuk a limit

regiszterrel– Ha az érték nincs határon belül megszakítás

generálódik, a hiba kezeléséhez

56

Relokáció• Hátrányok

– A fizikai memória folyamatos kell legyen– A teljes processzusnak a memóriában kell lennie

57

Eddig feltételeztük, hogy a processzus mérete kisebb mint a memória

• Mi van ha nagyobb a program mint a memória?

58

Overlay• Csak azokat az utasításokat és adatokat tartjuk a

memóriában melyekre szükség van• Felhasználó implementálja

– Nincs szükség operációs rendszer támogatásra• A program tervezése overlay-el nagyon komplex

59

Overlay, két fázisú fordítóSzimbólum

tábla

Közösrutinok

Overlay drive

Pass 1 Pass 2

60

Virtuális memória• Az egyszerű módszerekkel kapcsolatos problémák

elkerülésére• Két stratégia

– Lapozás (paging)– Szegmentálás (segmentation)

• A lapozás a domináns stratégia manapság• Hibrid rendszer is van