Problem s obsadenim pamate v jazyku C

Milos Prchlik prchlm2 na feld.cvut.cz
Úterý Leden 8 18:27:00 CET 2002


On 8 Jan 2002, at 16:40, Ing. Miloslav Ponkrác wrote:

> Když jsem psal odpověď panu Prchlikovi, měl jsem slabou chvilku a špatně
> jsem se vyjádřil. Já totiž přesně nechápu navrhovaný algoritmus:
>
> 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
> zasobnik, ale pri startu staci mit jen par stranek, a pokud proces
>
> Pokud to dobře chápu, tak navrhujete, aby všechny zásobníky byly na stejném
> místě pro všechny thready? Pokud to chápu správně, tak to tak nejde, pokud
> ne, tak mě omluvte.

Chapete dobre, ale patrne uplnou pitomost, za kterou se chci
omluvit.

Zasobnik byval na konci virtualniho adresoveho prostoru - pod
hranici PAGE_OFFSET a rostl smerem k nizsim adresam.
Rekneme, ze takhle spustime nas prvni proces, ktery si vytvori sve
dalsi thready. Vsechny thready maji spolecny adresovy prostor, ale
kazdy ma svuj zasobnik. Sdili tedy i svoje tabulky stranek - zde je
patrne zadrhel. Znacna cast tabulek stranek je jim spolecna, ale
kazdy thread ma svuj vlastni zasobnik u konce virtualniho prostoru.
Proc ne? Proste v mistech zasobniku se budou tabulky stranek
lisit - a je to tu - maji vsichni stejny prostor, ale uz jen to, ze by
kazdy mel jiny zasobnik na vrsku adresoveho prostoru by vedlo k
tomu, ze by musel mit kazdy thread vlastni tabulky stranek -
OOPS - zmena v jedne by vedla ke zmenam v dalsich => obrovska
narocnost jak na pamet (zbytecne sdileni) tak na procesor a vykon
celkove.

Uff, tak to byl ten muj ulet, a jadro linuxu tedy bude pracovat patrne
jinak. Zasobniky threadu se vytvareji az po startu procesu, kdyz uz
jsou knihovny namapovany do jeho adresoveho prostoru, takze tim
je to jednodussi. Puvodni proces ma zasobnik na vrcholu prostoru
a ostatni seberou... tezko rict kde, protoze zdrojove kody poruce
nemam, asi bude ve hre vmalloc(maximalni_velikost_zasobniku)

Milos Prchlik

"... For the world is hollow and I have touched the sky."


Další informace o konferenci Linux