<!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&#269;eloma alociral
hudo velike kose pomnilnika. Seveda pa ima lahko libc (in s tem malloc)
kak&#353;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&#269;el pobijati random procese. Po mo&#382;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&#353; ve&#269; razlogov. Recimo ia32 s kak&#353;nim EM64: &#269;e ti kernel to podpira
(in ni razloga, da ne bi), potem ima&#353; lahko recimo 16G fizi&#269;nega
pomnilnika, pa bo&#353; &#353;e vedno lahko alociral le 4G v enem kosu. Lahko pa
skupno alocira&#353; vseh 16G, pa&#269; v ve&#269; kosih.<br>
<br>
Alpha je rahlo druga &#353;torija (verjetno pa z enako posledico): ko sem &#353;e
imel alfe pod prsti, sem lahko videl, da je bila fizi&#269;na &#353;irina
pomnilni&#353;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 &#353;e vedno ne more&#353; direktno naslavljati vseh
tistih 18 zeta bajtov ampak samo kak&#353;en peta bajt.<br>
<br>
Vse skupaj pa ne velja le za fizi&#269;ni pomnilnik pa&#269; pa za virtualnega.
Kolikor vem gre vse skupaj preko MMUja, tudi dostop do swapa.<br>
<br>
Na koncu pa je najbr&#382; 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>