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: Bora Şahin (bora.sahin@ttnet.net.tr)
Date: Thu 09 Dec 2004 - 12:03:57 EET


SLmLar,

Tuesday, December 7, 2004, 9:27:12 AM, you wrote:

FA> Merhabalar,
FA> Bir sey merak ediyorumda...
FA> Pointerlar aslinda 4 byte lik veri tutan (hafizadaki adresleri)
FA> degiskenlerdir.
FA> Dolayisiyla ben bu pointerlerle 2 uzeri 32 yani 4 gb hafizayi
FA> adresleyebilirim.
FA> Peki daha buyuk adresleri nasil adresleyebilirim?
 
Yazılanları okudum... Fakat sizin adınıza biraz kafa karıştırıcı olmuş olabilir çünkü sorduğunuz
sorudan sanki sizin de biraz kafanız karışık gibi. İki tür adreslemeden bahsetmek lazım(Tamamen her
platformda böyle olduğundan değil ama genel mantık budur):

1) Doğrusal(Linear)
2) Fiziksel(Physical)

İşlemcinin doğrusal ve fiziksel adres alanının büyüklükleri birbirinden farklı olabilir, aynı olmak
zorunda değil.(Bildiğim kadarıyla farklı olduklarında, doğrusal adres alanı fiziksel adres alanından
genel olarak daha büyük olma eğiliminde) İkincisi fiziksel olarak doğru ve gerçekten
kullanabileceğin miktarlar söz konusu. Örneğin Intel yanlış hatırlamıyorsam PentimuPRO'ya kadar
potansiyel olarak 4 GB fiziksel belleği destekliyordu. Dikkat "potansiyel" olarak... Ama normalde
gerçekten kullanabileceğin miktarı o günün RAM ihtiyaç koşulları belirliyor. Mesela benim ABIT BE6-2
board'um 768 MB'dan fazlasını desteklemiyor. Sanırım fiziksel adres anlamında "doğru ve gerçek"
arasındaki farkı anlatabildim. Gerçi biraz Clausewitz'vari oldu ama :-)

IA-32'ye gelirsek, Intel'in doğrusal(linear) adres alanı 4GB'dir. Bunun dışına çıkamazsınız.
PPro'ya kadar da potansiyel olarak adresleyebileceği fiziksel bellek miktarı 4GB'tı. Sonra
PAE(Physical Address Extension) denen bir destek getirdiler. Temel olarak CPU'ya adresleme için 4
tane daha uç koydular böylece 36 tane uç(Temel olarak) ve 64 GB potansiyel fiziksel bellek
desteğini sağlamış oldular.

Buradan konuya girersek normal şartlarda bir process'e en fazla 3 GS doğrusal adres alanı verilir.
Üstteki 1GB zaten kernel içindir. Fiziksel olarak belleğin ne kadar olduğunun bir önemi yoktur.
Zaten bu abstraction bunun içindir. 896 MB'dan fazla belleğiniz varsa bunun için gerekli destekleri
çekirdekte açmalısınız.

Bir de 4GB/4GB patch'i var: Memory-hungry process'ler için... Bunu uyguladığınızda bir process'in
kullanabileceği doğrusal adres alanını 4GB'ye çıkarabilirsiniz. Ama user space ve kernel space için
tlb'deki girişler gidecektir. Yani kernel space'e switch yaptığınızda pgdir değişmek zorunda kalır
ve dolayısıyla caching'den olursunuz. Bu ve bunun gibi dezavantajları var. Özetle performans
anlamında normaldeki kadar iyi değildir.

Gösterici(Pointer) meselesine gelirsek, bu konu adres alanından biraz daha farklı bir konudur. 32
bit mimaride bildiğim kadarıyla pointer 4 byte'ı aşamaz. Bunun için 64 bit mimariye geçmeniz
gerekir. Her ne kadar gcc 8 byte'lık yanlış hatırlamıyorsam "long long" gibi türleri destekliyorsa
da bunlar veri tutmak için. Mesela IA-32 için alt tarafta bunun bir şekilde halledilmesi lazım çünkü
doğal bir yapı değil.

Peki şu da sorulabilir, fiziksel bellek 4 GB'den fazlaysa nasıl olacak? Cevabı da temel olarak
şudur: Kernel içsel olarak doğrusal adres alanını kaydırmak suretiyle gerekli ayarlamaları yapar.
Pointer husundaki açıklamasını S. KÖYLÜ yapmış...

-- 
Bora Şahin
borasahin.port5.com
_______________________________________________
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.