[LUGOS-PROG] Pomnilnik

Metod Kozelj metod.kozelj at lugos.si
Fri Sep 23 13:29:51 CEST 2005


Howdy!

Ales Casar wrote:

>>V Linuxu imajo procesi 3 GB naslovni prostor (s 4/4 split kernel patchem
>>tudi 4 GB). Glede na to, da je sizeof(void*) == 4, kaj dosti vec ne more
>>biti neposredno dostopnega.
>>    
>>
>
>Od tukaj obravnmavanih arhitektur velja to samo za i386, ne pa tudi za
>x86_64 in alpha. Sicer pa za ta del sem vedel.
>  
>

Hja, alpha je propisna 64 bitna platforma in kolikor sem se lahko 
spomnil, je bil sizeof(void*) kar 8. Torej bi lahko nac(eloma alociral 
hudo velike kose pomnilnika. Seveda pa ima lahko libc (in s tem malloc) 
kaks(ne omejitve.

>>Ce te je pa zanimalo kako lahko tvoj program zasede vec, kot imas
>>virtualnega pomnilnika; je pa to zato, ker tisti pomnilnik se ni
>>"zaseden". Na vsako stran napisi kaj, pa ne bos prisel dlje od realne
>>velikosti.
>>    
>>
>
>Hmm, to je pa zdaj malo cudno. Ce ti malloc uspesno vrne nek pomnilnik, je
>tisti pomnilnik tvoj in lahko zz njim pocnes kar hoces. Kaj se bo zgodilo
>potem, ce ga bo zmanjkalo nekje sredi tvojega pisanja po njem?
>  
>

Kernel bo zac(el pobijati random procese. Po moz(nosti samega sebe ;)

>>Mislim da se to obnasanje da nastaviti z /proc/sys/vm/overcommit*
>>    
>>
>
>Sem malo pogledal to. Nenavadno. Se vedno pa ne vem, od kod tisti omejitvi
>okrog 500 GB na x86_64 in 4 TB na alpha. In zakaj se z vecimi malloci da
>zaseci vec (tudi 1000x vec) prostora kot z enim mallocom?
>  
>

Imas( vec( razlogov. Recimo ia32 s kaks(nim EM64: c(e ti kernel to 
podpira (in ni razloga, da ne bi), potem imas( lahko recimo 16G 
fizic(nega pomnilnika, pa bos( s(e vedno lahko alociral le 4G v enem 
kosu. Lahko pa skupno alociras( vseh 16G, pac( v vec( kosih.

Alpha je rahlo druga s(torija (verjetno pa z enako posledico): ko sem 
s(e imel alfe pod prsti, sem lahko videl, da je bila fizic(na s(irina 
pomnilnis(kega vodila odvisna nekoliko od konkretne platforme. Navadno 
pa so bile cifre tam okoli (ali nekaj nad) 40 bitov. Torej kljub temu, 
da je to 64 bitna platforma s(e vedno ne mores( direktno naslavljati 
vseh tistih 18 zeta bajtov ampak samo kaks(en peta bajt.

Vse skupaj pa ne velja le za fizic(ni pomnilnik pac( pa za virtualnega. 
Kolikor vem gre vse skupaj preko MMUja, tudi dostop do swapa.

Na koncu pa je najbrz( omejitev libc.

-- 
Peace!
  Mkx

---- perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
---- echo 16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlb xq | dc

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://liste2.lugos.si/pipermail/lugos-prog/attachments/20050923/ee934510/attachment.htm


More information about the lugos-prog mailing list