25: Minnisúthlutun Flashcards

1
Q

Kvik minnisúthlutun

A

malloc og free

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Forritarar nota minnisúthlutara
(eins og malloc) til að ?

A

fá sýndarminni á keyrslutíma

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Minnisúthlutarar (dynamic
memory allocators) sjá um?

A

svæði í sýndarminni sem kallast kös (heap).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Hvernig virkar Kvik minnisúthlutun?

A

Úthlutari skipuleggur kösina sem safn af misstórum
blokkum, sem eru annaðhvort úthlutaðar (allocated)
eða lausar (free)

Þegar kemur beiðni um nýja blogg þá finnur hann lausa blokk og lætur hana af hendi

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Tvær gerðir úthlutara:

A

Bein úthlutun og óbein úthlutun

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Hvað er Bein úthlutun: ?

A

notendaforrit úthlutar og losar minni
* Til dæmis: malloc og free í C

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Hvað er Óbein úthlutun?

A

notendaforrit úthlutar, en losar ekki
minni
* Til dæmis new og ruslasöfnun í Java

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

malloc pakkinn

A

include <stdlib.h></stdlib.h>

void *malloc(size_t size)

skilar bendi á void, forritarinn skilar sjálfur bendi á þá tegund sem hann vill fá

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Þegar malloc heppnast

A

Þá fáum við bendi á minnisblokk með stærð a.m.k. size bæti uppröðuð
(aligned) að 16 bætum (á x86-64)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Þegar malloc heppnast ekki

A

Skilar NULL (0) og setur errno sem ENOMEM

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

void free(void *p)

A

Skilar blokkinni sem p bendir á, í safn lausra minnisblokka

lykilatriði : p verður að koma frá fyrra kalli á malloc eða realloc

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

calloc:

A

útgáfa af malloc sem upphafsstillir blokkina sem 0

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

realloc:

A

breytir stærð á áður-úthlutaðri minnisblokk

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

sbrk:

A

innra fall í úthlutara, til að breyta stærðinni á kösinni

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Takmarkanir

A

Geta gert alls konar runur af malloc og free köllum, vitum ekki í hvaða röð þau koma

Getum ekki ráðið fjölda eða stærð úthlutaðra blokka

Verðum að svara malloc köllum strax og getum ekki umraðað beiðnum

Verður að úthluta blokkum úr lausa minninu

Úthlutaðar blokkir verða að uppfylla uppröðunarskilyrði

Getur aðeins unnið með og breytt lausa minninu

Getur ekki fært blokkir eftir að þeim hefur verið úthlutað

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Mælikvarði: Afköst (throughput)

A

Markmið: hámarka afköst og hámarka minnisnýtingu

Afköst: Fjöldi afgreiddra minnisbeiðna á tímaeiningu

17
Q

Mælikvarði: Minnisnýting

A

Gera greinar mun á farm (payload) og overhead

18
Q

Hvað er Sundrun (fragmentation)?

A

Sundrun veldur lélegri minnisnýtingu

– Innri sundrun (internal fragmentation)
– Ytri sundrun (external fragmentation)

19
Q

Innri sundrun (internal fragmentation)

A

á sér stað ef farmurinn er minni en stærð blokkarinnar

20
Q

Ytri sundrun (external fragmentation)

A

Eitthvað sem var ekki nýtt á milli blokka

21
Q

Að vita hverju er verið að skila, Venjulega aðferð:

A

Geyma lengd blokkarinnar í orðinu á undan blokkinni
* Þetta orð oft kallað haussvið eða haus (header)
– Krefst eins aukaorðs fyrir hverja úthlutaða blokk

22
Q

Hvaða aðferðir eru til þess að halda utanum lausar blokkir?

A

Aðferð 1: Óbeinn listi notar lengdirnar til þess að hoppa— tengir allar blokkir

Aðferð 2: Tengdur listi af lausu blokkunum með bendum

Aðferð 3: Aðskildir listar

Aðferð 4: Blokkir raðaðar eftir stærð

23
Q

Óbeinn (implicit) listi

A

Fyrir hverja blokk þarf bæði stærð og úthlutunarstöðu

24
Q

Óbeinn listi, hvernig er hægt að finna lausa blokk

A

First-fit:
Next-fit:
Best fit:
Worst-fit:

25
Q

First-fit:

A

– Byrja fremst í listanum, velja fyrstu lausu blokkina sem passar:
– Tekur línulegan tíma í fjölda blokka (úthlutaðra og lausra)
– Í reynd verður fremsti hluti listans dálítið brotakenndur (splintered)

26
Q

Next-fit:

A

– Eins og First-fit, nema við byrjum þar sem síðasta leit endaði
– Ætti að vera hraðvirkari en First-fit: skoðum ekki aftur sömu blokkirnar
– Virðist þó valda verra uppbroti á blokkunum

27
Q

Best fit:

A

– Byrja fremst, velja bestu lausu blokkina: með fæstu aukabætunum
– Afgangsbrotin verða lítil — fáum oftast betri minnisnýtingu
– Oftast hægvirkari en First-fit

28
Q

Úthlutun á lausri blokk: Hvað er skipting (splitting)?

A

Ef úthlutað pláss er minna en lausa blokkin þá getum við
skipt henni upp

29
Q

Óbeinn listi: Losun blokkar

A

Þurfum bara að hreinsa “úthlutað” bitann

En getur valdið “gervi sundrun” (false fragmentation)

Það er til nóg af samfelldu
lausu plássi, en úthlutarinn
mun ekki finna það

Þurfum að Sameina (coalesce) við næstu blokkir ef þær lausar

30
Q

Óbeinn listi: Tvíátta sameining

A

Jaðarmerki (boundary tags) [Knuth73]

– Endurtaka stærðina í hinum enda blokkanna
– Leyfir okkur að ferðast um listann í hina áttina líka, en þarf aukapláss
– Mikilvæg og almenn aðferð!

31
Q

Gallar við jaðarmerki

A

Innri sundrun
– Notar meira aukaminni
– Ekki hagkvæmt er mikið af litlum blokkum

32
Q

Hvaða blokkir þurfa að hafa jaðarmerki?

A

Þurfum aðeins jaðarmerki fyrir lausar blokkir

33
Q

Yfirlit yfir helstu úthlutunaraðferðir

A

Staðsetningaraðferð (placement)
Skiptingaraðferð (splitting)
Sameiningaraðferð (coalescing)

34
Q

Staðsetningaraðferð (placement):

A

– First-fit, Next-fit, Best-fit, o.fl.

– Skiptum á lægri afköstum fyrir minni sundrun (fragmentation)

35
Q
  • Skiptingaraðferð (splitting):
A

– Hvernig skiptum við upp lausum blokkum?

– Hve mikla innri sundrun sættum við okkur við?

36
Q

Sameiningaraðferð (coalescing):

A

– Tafarlaus sameining: sameina um leið og kallað er á free

– Tafin sameining: reyna að auka hraða á free með því að
bíða með sameiningu þar til hennar er þörf. Dæmi:
–Sameina um leið og listinn skannaður fyrir malloc
– Sameina þegar magn ytri sundrunar nær einhverju lágmarki (threshold)