Problem s obsadenim pamate v jazyku C

Lubos Lunak l.lunak na sh.cvut.cz
Úterý Leden 8 12:49:15 CET 2002


Milos Prchlik wrote:

>> Protože žádný program se jaksi nesrovná s tím, že mu budete měnit adresu
>> zásobníkového prostoru během vykonávání kódu, musí se systém rozhodnout
>> rezervovat souvislý virtuální prostor pro zásobník již před spuštěním
>> procesu. Jednotlivé stránky pro zásobník nemusí za sebou ležet ve fyzickém
>> paměťovém prostoru, to je pravda. Ale stránky pro zásobník MUSÍ ZA SEBOU
>> LEŽET ve virtuálním paměťovém prostoru a nedají se později ani přemístit.
> 
> Jestli se neco nezmenilo, tak zasobnik lezi vzdy na konci
> virtualniho adresoveho prostoru procesu - od hranice dane
> PAGE_OFFSET (3GB) roste dolu, takze to neni problem.
> Kazdemu threadu staci pak namapovat do jeho vlastniho virtualniho
> prostoru jeho vlastni zasobnik, ktery se nachazi na stejnem miste -
> tedy od hranice user-space roste dolu. Samozrejme, ze je limit na

 Pokud se nepletu, thready sdileji stejny adresni prostor, vcetne zasobniku, 
takze thready nemohou namapovat sve zasobniky vsechny na stejne misto, ale 
musi mit sve zasobniky kazdy jinde.

> zasobnik, ale pri startu staci mit jen par stranek, a pokud proces
> bude chtit jit v adresach nize - tedy mit vetsi zasobnik, tak pokud
> nevycerlap svuj limit, neni problem primapovat mu pri page fault
> novou stranku zasobniku - samozrejme, pokud uz se nestretnul
> jeho vrchol napr. s knihovnou. To je pak smula...
> 

 Lubos Lunak
-- 
 l.lunak na email.cz ; l.lunak na kde.org
 http://dforce.sh.cvut.cz/~seli



Další informace o konferenci Linux