Správa paměti Flashcards

(8 cards)

1
Q

Virtuální paměť procesů

A

Umožňuje každému procesu pracovat s vlastním, izolovaným adresním prostorem, nezávisle na fyzické paměti (RAM). Tento mechanismus zajišťuje efektivní a bezpečné využití paměti, chrání procesy před vzájemným ovlivněním a umožňuje provádění větších programů, než je fyzická velikost paměti.

Adresní prostor
32bitový systém: každý proces má virtuální adresní prostor o velikosti 4 GiB (2³² bajtů)
64bitový systém: velikost prostoru je 2⁶⁴ bajtů

Rozložení paměti
Spodní adresy (od 0x00000000 výše): běžná data + prostor pro jádro
Horní adresy (do 0xFFFFFFFF): zásobník (stack)

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

Základní bloky paměti procesu

A

Každá paměť, která je přiřazena procesu,
se dělí na 4 základní bloky:
– Segment instrukcí (Code)
– Datový segment (Data)

1) Code segment (Text)
Obsahuje strojové instrukce programu
Znám při překladu, nemění velikost

2) Data segment
Obsahuje statická data známá při překladu (např. konstanty, globální proměnné, textové řetězce)
Také neměnná velikost během běhu

3) Heap (halda)
Slouží k dynamické alokaci paměti
Obsahuje objekty, instance tříd, dynamické proměnné.
Založená na stromové datové struktuře
Roste směrem nahoru (k vyšším adresám)

4) Stack (zásobník)
Používá princip LIFO (Last In, First Out)
Obsahuje: lokální proměnné, parametry funkcí, návratové adresy.
Roste směrem dolů (k nižším adresám)
Spravován pomocí stack pointeru (ukazatel na vrchol zásobníku)

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

Statické přidělování paměti

A

Staticky se ukládají datové struktury, které jsou definovány při překladu programu. K jednotlivým paměťovým úsekům lze přistupovat pomocí názvu proměnné. V průběhu se adresa ani velikost bloku nemůže měnit.

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

Dynamické přidělování paměti

A

Dynamicky se paměť přiděluje na základě požadavku při průběhu programu. K dynamicky přidělenému paměťovému úseku se dá přistoupit pouze nepřímo pomocí ukazatele. Ukazatel je součástí statické nebo dynamické struktury. Dynamicky přidělovaná paměť se čerpá z vyhrazeného prostoru paměti počítače.

Regenerace paměti je její pročištění od nepoužívaných částí paměti.

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

Dynamické přidělování paměti bez regenerace

A

V jazycích bez regenerace (tj. bez garbage collectoru) má programátor přímou odpovědnost za správu paměti — tedy nejen za její alokaci, ale i uvolnění.
Dynamické přidělovaní paměti bez regenerace přiděluje požadované úseky postupně tak jak jsou za sebou umístěny až do vyčerpaní vyhrazené paměti. Využívá pracovního ukazatele, který ukazuje na první adresu volné paměti.
Nevýhody:
Memory leaks (úniky paměti)
Nastanou, když programátor zapomene paměť uvolnit — blok zůstává alokován, ale už se k němu nelze dostat.
Dangling pointers
Když se paměť uvolní, ale ukazatel na ni se dále používá → způsobí chyby nebo pády programu.
Double free
Dvakrát uvolněná paměť – může vést k nekonzistenci heapu, chybám nebo zneužitelným zranitelnostem (např. v C).
Operace free/delete okamžitě neuvolní paměť, ale přepíše indikátor paměti na false; regenerace probíhá později po větších částech.

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

Dynamické přidělování paměti s regenerací

A

Na rozdíl od dynamického přidělovaní bez regenerace se zde regeneruje pro každé operaci free/delete. S tím přichází problém s fragmentací paměti. Po uvolnění paměti by tyto části mohly vytvářet sekvence malých, oddělených a přitom sousedních prvků. Často je defragmentace těchto volných bloků spojena s operací free/delete. Snaží se slučovat volné úseky se sousedními volnými úseky.

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

Garbage collector

A

Používá se u vyšších programovacích jazyků java,c#,python. Cílem GC je zabránit únikům paměti (memory leaks) a chybám, jako je přístup k již uvolněné paměti. Je nejpokročilejším způsobem dynamického přidělovaní paměti.
Skládá se ze tří fází:
– Allocation přiděluje po sobě jdoucí úseky stejně jako metoda bez regenerace až do vyčerpání celého vyhrazeného prostoru.
– Marking nastává pouze pokud je vyčerpán celý prostor. Prochází prostorem a vyhledává a označuje úseky, které nejsou aktivní a jejich návrat do společné paměti způsobí
regeneraci.

– Garbage collecting: provádí se defragmentace přesunem všech uvolněných úseků do jednoho souvislého úseku. Tím se vytvoří nový souvislý úsek pro alokaci.

Tyto tři fáze se opakují dokola, pokud nedojde k situaci, že nový úsek není dostačující
pro fázi alokace: v tom případě dojde k ukončení programu.

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

Fáze garbage collectoru

A

Skládá se ze tří fází:
1) Allocation přiděluje po sobě jdoucí úseky stejně jako metoda bez regenerace až do vyčerpání celého vyhrazeného prostoru.

2) Marking nastává pouze pokud je vyčerpán celý prostor. Prochází prostorem a vyhledává a označuje úseky, které nejsou aktivní a jejich návrat do společné paměti způsobí regeneraci.

3) Garbage collecting: provádí se defragmentace přesunem všech uvolněných úseků do jednoho souvislého úseku. Tím se vytvoří nový souvislý úsek pro alokaci. Tyto tři fáze se opakují dokola, pokud nedojde k situaci, že nový úsek není dostačující pro fázi alokace: v tom případě dojde k ukončení programu.

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