[ LUGOS ] Memory
Metod Kozelj
metod.kozelj na rzs-hm.si
Pon Avg 7 10:32:37 CEST 2000
Howdy!
On Sun, 6 Aug 2000, Andra` Tori wrote:
> Kernel MORA nekaj ukrenit v trenutku ko zazene kmalloc in ne dobi zase
> dovolj spomina. Za procese, ko zmanjka spomina je zelo jasno kaj se dogaja
> in sploh ne vidim problema... malloc vrne NULL .. basta, zdaj je pa
> problem procesa kaj bo storil, bo ponavljal malloc v zanki ali se bo
> terminiral ali kaj tretjega...
Ne, ne. Nisi me prav razumel. Imas en proces, ki alocira 192M RAMa. In
drugi proces, ki istocasno alocira 128M RAMa. Ampak kernel se vedno pusti
oba procesa teci, ker de-facto alocira pomnilnik sele, ko ga proces
uporabi (mislim, da po straneh). In tezava je, ce oba procesa istocasno
potem tudi uporabita ves pomnilnik naenkrat. Takrat se malloc-a sploh ne
klice in je stvar kernela, da razresi kolobocijo. In pri tem sploh ni
nujno, da kernel klice kaksen kmalloc.
> Ce sem te prav razumel tvoj digital unix naredi posebno zadevscino in
> stvar ustavi (blocking) v malloc klicu in caka da kdo drug sprosti ram?..
> sej to se mi sploh ne zdi neumno, samo po moje spada to v userspace, saj
> je vcasih nedopustno da bi malloc bil blockable...
Ne, digital unix enostavno ne zazene procesa, ki ima code+data+bss vecji,
kot je prostega virtualnega pomnilnika. Pri ne cisto najnovejsih programih
(beri: pisanih za F77) so vsa polja (matrike, ...) 'staticna', torej v
data segmentu. Proces v tem primeru dobi enostavno SIGSEGV ali nekaj
takega. Pri mallocu se v vsakem primeru obnasa kot linux, torej ti malloc
vrne NULL.
Peace!
Mkx
---- perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
Dodatne informacije o seznamu Starilist