Re: [Linux-programlama] 6GB lik memory'e erisim

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Serdar KÖYLÜ (serdarkoylu@fisek.com.tr)
Date: Tue 07 Dec 2004 - 13:48:39 EET


Selamlar..

Soruya bakınca, benim anladığım "Daha büyük adresler" konusu, şöyle bir
durum oluyor. 4+ GB adresleri kullanmak için bir şey yapmanız gerekmez,
kernel onu sizin için MAP eder. Siz kendi 32 Bit dünyanızda huzur içinde
yaşarsınız.

Fakat sorulan, 4GB'dan büyük adresleri allocate edebilirmiyim ise durum
biraz farklı. Burada bir takım taklalar yoluyla belki 4GB barrier'ini
kırıp daha büyük bloklara erişim sağlayabilirsiniz. Mesela, iki tane 4GB
elde edebilirsiniz. Ama çağıracağınız sistem çağrılarının hiçbiri bu 32+
bit pointerleri desteklemeyecektir. Sonuçta, mesela memcpy() veya
strcmp() bile kullanmakta zorlanacaksınız.

Kritik bir diğer sorun ise, 32 Bit makinelerde ZONE_DMA, ZONE_LOW,
ZONE_HIGH olarak 3 bölüm mevcut. ZONE_LOW 896 MB'ta bitiyor. Tüm kernel
data ise bu bölgede tutuluyor. Sonuç olarak böyle devasa bellekler için
page tablosu vs.de bunun içinde. 1GB için en azından 2MB filan page
tablosuna gidiyor olmalı. Hoş, 2.6 Kernel için sanırım large page
desteği vardı, ayrıca bu tabloları ZONE_HIGH üzerinde tutabiliyordu. Ama
şu an emin değilim vaziyetten. Sonuç olarak büyük data blokları ile
çalışırken bir şekilde IO ihtiyacınız olursa bu ZONE_LOW'u
zorlayabilirsiniz. Sonuçta umulmadık şekilde sorunlar yaşayabilirsiniz.

Bu yüzden x86-32Bit üzerinde 4GB 'yi processor'un bir sınırı olarak
görüp, daha fazlasına aş ermektense, bu adres boşluğunda çalışmak üzere
gerekli uygun kodu yazmak daha iyi olacaktır. Kaldı ki, 1GB yeterince
büyük bir değerdir.

Saygı ve sevgiler..

> On Tue, 2004-12-07 at 09:27 +0200, Fuat Altun wrote:
> > Merhabalar,
>
> Merhaba,
>
> > Bir sey merak ediyorumda...
> >
> > Pointerlar aslinda 4 byte lik veri tutan (hafizadaki adresleri)
> > degiskenlerdir.
> >
> > Dolayisiyla ben bu pointerlerle 2 uzeri 32 yani 4 gb hafizayi
> > adresleyebilirim.
> >
> > Peki daha buyuk adresleri nasil adresleyebilirim?
>
> Cok emin degilim ama, belki IA32 ile de yapilabilir, ama bir tek process
> icerisinde degil. Linux cekirdegindeki BigMem destegi daha buyuk
> bellekleri adresleyebilmeniz icin bir secenek iceriyor, cekirdek derleme
> sirasinda secebiliyorsunuz. Bir tek process icin max. bellek pointer
> boyu ile sinirli fakat en azindan diger process'ler sistemdeki bellegi
> daha etkin bicimde kullanabiliyor, diye biliyorum.

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.