<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Howdy!<br>
<br>
Ales Casar wrote:<br>
<blockquote
cite="midPine.LNX.4.44.0509221157230.15077-100000@delta.uni-mb.si"
type="cite">
<blockquote type="cite">
<pre wrap="">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.
</pre>
</blockquote>
<pre wrap=""><!---->
Od tukaj obravnmavanih arhitektur velja to samo za i386, ne pa tudi za
x86_64 in alpha. Sicer pa za ta del sem vedel.
</pre>
</blockquote>
<br>
Hja, alpha je propisna 64 bitna platforma in kolikor sem se lahko
spomnil, je bil sizeof(void*) kar 8. Torej bi lahko načeloma alociral
hudo velike kose pomnilnika. Seveda pa ima lahko libc (in s tem malloc)
kakšne omejitve.<br>
<br>
<blockquote
cite="midPine.LNX.4.44.0509221157230.15077-100000@delta.uni-mb.si"
type="cite">
<blockquote type="cite">
<pre wrap="">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.
</pre>
</blockquote>
<pre wrap=""><!---->
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?
</pre>
</blockquote>
<br>
Kernel bo začel pobijati random procese. Po možnosti samega sebe ;)<br>
<br>
<blockquote
cite="midPine.LNX.4.44.0509221157230.15077-100000@delta.uni-mb.si"
type="cite">
<blockquote type="cite">
<pre wrap="">Mislim da se to obnasanje da nastaviti z /proc/sys/vm/overcommit*
</pre>
</blockquote>
<pre wrap=""><!---->
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?
</pre>
</blockquote>
<br>
Imaš več razlogov. Recimo ia32 s kakšnim EM64: če ti kernel to podpira
(in ni razloga, da ne bi), potem imaš lahko recimo 16G fizičnega
pomnilnika, pa boš še vedno lahko alociral le 4G v enem kosu. Lahko pa
skupno alociraš vseh 16G, pač v več kosih.<br>
<br>
Alpha je rahlo druga štorija (verjetno pa z enako posledico): ko sem še
imel alfe pod prsti, sem lahko videl, da je bila fizična širina
pomnilniš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 še vedno ne moreš direktno naslavljati vseh
tistih 18 zeta bajtov ampak samo kakšen peta bajt.<br>
<br>
Vse skupaj pa ne velja le za fizični pomnilnik pač pa za virtualnega.
Kolikor vem gre vse skupaj preko MMUja, tudi dostop do swapa.<br>
<br>
Na koncu pa je najbrž omejitev libc.<br>
<pre class="moz-signature" cols="80">--
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
</pre>
</body>
</html>