[OSy] kernel heap limit

..:: Urza ::.. urza at rdx2.cz
Wed Dec 7 00:55:03 CET 2011


Dobrý den.


Mám upřesňující otázku ke kernel heapu. V zadání (ohledně kernel heapu) stojí, že "soucasne s timto alokatorem bude stranky fyzicke pameti alokovat take volani frame_alloc()". Může se tedy stát, že naalokuji napřed kousek kernel heapu, potom někdo někde zavolá frame_alloc() a poté zas alokuje kernel heap.... kernel heap pak bude rozkouskovaný. Vzhledem k tomu, že kernel nepoužívá na svém heapu mapování (resp. pouze přímé přes KSEG0), bude ten heap rozkouskovaný jak ve fyzické, tak i ve virtuální paměti.... musí tedy malloc a free umět pracovat s rozkouskovaným heapem?

Další možnost řešení by byla naalokovat heap předem na nějakou fixní velikost (tak to tam mám udělané teď), ale předpokládám, že to asi není z různých důvodů žádoucí (např. proto, že na kernel heapu ukládáme struktury vláken, jejichž počet má být podle prvního zadání omezen jen dostupnou pamětí - což by tedy mohlo být problematické i vzhledem k tomu, že kernel heap má být jen v KSEG0, takže pokud předpokládáme, že vlákna ukládáme na kernel heap, je to omezeno dostupnou pamětí jen do jisté míry, konkrétně do míry 512MB).

Každopádně z toho, co jsem se o heapu dozvěděl na přednášce (pokud jsem to dobře pochopil), předpokládají algoritmy pro správu heapu spojitý adresový prostor. Ne, že by se nedaly upravit, ale nerad bych to dělal, pokud by to bylo zbytečné a šlo to řešit nějak jinak (i když mě nenapadá žádný způsob).

Prozatimní řešení, které nám fuguje, je to, že se heapu kernelu na začátku dá nějaká fixní paměť, která nejde odalokovat pomocí frame_free, aby ten heap nikdo nemohl poškodit, nicméně pak už se dále nezvětšuje, což má zjevné nedostatky popsané výše.


Urza




More information about the NSWI004 mailing list