Tanım
PC'lerimizdeki bellekler, sistemde
yer alan işlemci ve grafik kartları gibi veri yaratan ve işleyen birimlerin
ortaya çıkardığı verilerin uzun ya da kısa süreli olarak saklandığı işlevsel
birimlerdir. Sabit disk sürücüler, sistem RAM'leri, işlemcilerin içindeki cache
diye tabir edilen bellekler, BIOS'un saklandığı EPROM'lar, grafik kartlarının
üzerindeki RAM'ler, CD'ler, disketler v.s. hepsi PC'lerde yer alan bellek
türleridir.
Bellek kavramı bu derece geniş bir
konu olmasına rağmen bu yazıda konumuz olan bir çoğumuzun oldukça aşina olduğu,
hep daha fazla olmasını hayal ettiğimiz ve hatta yeri geldiğinde overclock
denemelerimize bile dahil ettiğimiz sistem RAM'i denilen bellekler. Peki RAM ne
demek? RAM, İngilizcesi Random Access Memory,
Türkçesiyle Rastgele Erişilebilir Bellek kelimelerinin başharflerinden
oluşan bir kısaltma. Bu noktada, belleklerin RAM'ler ve Sadece Okunabilir
Bellekler yani ROM'lar (Read Only Memory)
şeklinde sınıflandırıldığını hatırlatmak isteriz. RAM'ler veriyi saklamak için
beslemeye yani elektrik enerjisine ihtiyaç duyduğu halde ROM'lar besleme olmasa
bile veriyi saklayabilirler. Ayrıca, ROM'lar genellikle, kısaltmanın açılımından
da anlaşıldığı gibi sadece okuma amacıyla kullanılırlar. Üzerlerinde saklı
verinin kullanıcı tarafından kolayca değiştirilmemesi hedeflenir.
|
Anakarta takılı
DIMM |
RAM'lerin en başta gelen
özelliklerinden birisi – ki RAM ismini almalarından sorumlu olan da budur -
sakladıkları verilere manyetik teyplerdeki ya da CD-ROM’lardaki sıralı erişimin
aksine, sırasız ve hızlı bir şekilde rastgele erişime imkan vermeleridir.
Erişimde sağladıkları hız, RAM'lerin sistemde bu denli önemli ve performansı
belirleyici olmalarında en önde gelen etkendir. Veri barındırma kapasiteleri ve
hız konusunda, merkezi işlemci üzerindeki düşük kapasiteli ancak çok hızlı bir
RAM olan cache belleklerle, kapasiteleri günümüzde inanılmaz boyutlara
ulaşmış olan sabit disk sürücüler arasında yer alırlar ve bir çeşit tampon
görevi görürler. İşletim sistemi, sabit sürücünün yavaşlığını gizlemek amacıyla,
yakın gelecekte ihtiyaç duyulabilecek veriyi henüz ihtiyaç durumu ortaya
çıkmadan sabit diskten sistem RAM'leri üzerine yükler ve gerektiğinde hızlı bir
şekilde işlemcideki cache belleğe iletilmesini sağlar.
RAM'lerin sistem içindeki yerlerini
tanımladıktan sonra simdi de teknolojinin ve erişim protokollerinin ortaya
çıkardığı RAM türlerini inceleyelim.
RAM Çeşitleri
RAM'lerin, fiziksel yapıları ve
çalışma prensipleri itibariyle mikroişlemcilerden hiç bir farkı yok. Tıpkı
mikroişlemciler gibi, silikon üzerine işlenmiş çok sayıda transistörün, bu defa
ağırlıklı olarak veri erişiminin kontrolü ve verinin saklanmasıyla ilgili belli
işlevleri yerine getirmek amacıyla birbirine bağlanmasıyla ortaya çıkmış ve
nispeten daha az karmaşık olan elektronik yapılar. Bu yüzden mikroişlemci
teknolojileriyle RAM teknolojilerini ilgilendiren konular tamamıyla ortak. RAM
teknoljilerini süren hedef, mikroişlemcilerde olduğu gibi, daha küçük
transistörler üretmek, bu sayede aynı büyüklükte bir silikon parçasına
daha fazla transistör yani daha fazla işlev sığdırmak ve silikonun
daha hızlı çalışmasını sağlamaktır. Bu amaca ulaşma yolunda karşılaşılan
engellerin çoğu üretim teknolojilerindeki gelişmelerle aşılmakta olup geri kalan
kısım ise geliştirilen daha akıllı algoritmalar ve protokollerle çözülüyor. İşte
RAM türlerini bu protokoller belirliyor.
|
|
Dizüstü PC’lerde kullanılan
SO-DIMM |
Masaüstü PC’lerde
kullanılan DIMM |
Çoğumuz, SDR-RAM,
DDR-RAM, DDR II RAM, RDRAM ve hatta artık mazi de kalmış olsa
da EDO RAM gibi kısaltmaları duymuşuzdur. Bu kısaltmalar, RAM'e erişmek,
yani RAM'den veri okumak ya da RAM'e veri yazmak için kullanılan protokol
hakkında bize bilgi verir. Örnek olarak, günümüzde en popüler RAM türü olan DDR
bellekleri verebiliriz. Buradaki DDR (Double Data
Rate) kısaltması, çift veri hızlı bellekler anlamında
kullanılıyor. Bir önceki nesil bellek türlerine isim veren SDR
(Single Data Rate) kısaltması ise tek veri hızlı
RAM'leri simgeliyor. Bu kısaltmaları daha detaylı açıklayabilmek için sonraki
bölümlerde değineceğimiz bazı kavramları anlamak gerekiyor. Bu noktada, ön bilgi
olarak söyleyebileceğimiz, DDR ve SDR kavramlarının senkron olarak çalışan, yani
veri akışının bir saat işaretiyle düzende tutulduğu tip RAM'lerde, bir saat
periyodu içinde gerçekleşen veri akış hızını belirttikleri olacaktır.
RD-RAM ise RAMBUS firması tarafından geliştirilen RAMBUS veriyolu
üzerinde çalışan, bazı yönlerden DDR'a benzeyen, İngilizce'deki 'RAMBUS
Direct' kelimelerinin baş harflerinden ismini alan bir RAM
türüdür.
Çalışma Prensipleri
Anakartlarımızdaki bellek soketlerine
yerleştirdiğimiz baskı devreleri, anakarta bağlandıkları veri yolunun
genişliğine göre DIMM (Dual Inline Memory
Module) ve SIMM (Single Inline Memory Module)
gibi kısaltmalarla adlandırıyoruz; sanırız bunun da haklı bir sebebi var (!).
Bugünlerde en popüler olanı, üzerinde genellikle bant genişliği yüksek ve
dolayısıyla daha geniş veriyoluna ihtiyaç duyan DDR bellek yongalarını
barındıran DIMM'ler. Dizüstü bilgisayarlarda kullanılan DIMM'ler fazla yer
kaplamamaları için küçük olduklarından SO-DIMM (Small
Outline Dual Inline Memory Module) yani
küçük izdüşümlü RAM adını alıyorlar. DIMM’lere baktığımızda, genellikle
4,8 ya da 16 gibi belli sayılarda bellek yongaları, dirençler ve
kondansatörlerin yanısıra SPD (Serial Presence
Detect) denilen bir ROM yongası bulunduğunu görebiliriz.
|
DIMM
üzerindeki bellek yongaları (büyük olanlar) ve SPD yongası (sol
alt köşe) |
SPD yongası üzerinde, yazımızın
ilerleyen bölümlerinde daha detaylı değineceğimiz, baskı devre üzerindeki bellek
yongalarıyla ilgili çeşitli parametreler saklanır. Bu parametrelerin
zamanlamayla ilgili olanları (örn. CAS gecikmesi), üretimden sonra yapılan
perfromans testleri sonucunda modülün kararlı olarak çalışabileceği en üst
performansı gerçekleyecek şekilde belirlenir ve SPD üzerine işlenir. Bellek
modülü anakarta yerleştirildikten sonra, SPD üzerindeki bu parametreler boot
esnasında BIOS tarafından okunur ve sistemin bellek kontrolüyle ilgili kısımları
(yonga seti) gerektiği şekilde haberdar edilir, böylece bellekle olan iletişim
sağlanmış olur. Bellek modülünün üreticisi olan firmanın kodu, modülün üretim
tarihi, seri numaralrı, bellek yongalarının kapasiteleri ve erişimleriyle ilgili
bilgiler SPD yongasında saklanan diğer bilgiler arasında yer alır.
Bizi ilgilendiren asıl kısım ise
bellek yongaları. Bunlar, tıpkı mikroişlemciler gibi, kılıflanmış tümleşik
devreler. Üretim teknolojisi yani transistörlerin minyatürleştirilmesi
bakımından bazı durumlarda işlemcilerden bir nesil önde gidenlerine rastlamak
bile mümkün. Yonga üzerinde yer alan ve milyonlarcasının bir araya gelerek
bellek dizisini oluşturduğu temel yapı, verinin en temel hali olan bir bitlik
veriyi yani ikilik düzendeki 0 veya 1 bilgisini saklamakla sorumlu RAM
hücresidir. Bir yongada bu hücreden milyonlarcası kullanıldığından, tasarım
ve üretimde çalışan mühendisleri meşgul tutan ve para kazanmalarını sağlayan
konuların başında bu bellek hücresini en az yer kaplayacak, en az fireyle en
verimli şekilde üretilebilecek şekilde tasarlamak yer alır.
Bellek yongasının nasıl çalıştığını
anlamak için önce bu tümdevrenin yapısını inceleyelim. Elimizde bir bellek
dizini var. Bu dizini belli sayıda satır ve sütünlardan oluşan iki boyutlu bir
tablo olarak düşünebiliriz. Tablomuzun yapıtaşları ise bahsettiğimiz RAM
hücreleri. Bu tablo üzerindeki herhangi bir hücreye erişmek (yazmak ya da
okumak) için o hücrenin tablodaki konumunu, yani, hangi satır ve sütünun kesişim
noktasında bulunduğunu vermemiz gerekir. Bu konum bilgisine adres
diyoruz. Erişimi kolaylaştırmak için genelde bellek tablomuz yonga üzerinde daha
küçük alt tablolara bölünmüştür. Bu alt tablolara banka (bank) deniyor.
Günümüzde bellek yongaları genelde 4 bankalı olarak tasarlanıyor. Kısaca,
adresimiz satır ve sütün numaralarının yanısıra bir banka numarasını da
içeriyor. Bu sayede bellek yongası hangi bankanın kaçıncı satırındaki kaçıncı
sütunundaki hücreye erişim yapılmak istendiğini biliyor. İşlemcilerin belleğe
erişirken kullandığı en küçük veri birimi tek bir bit yerine 8 bitten oluşan
bayt (byte)'tır. Bu yüzden bellek yongalarında erişilebilen en küçük veri birimi
de byte olarak düzenlenmiştir. Böylece bellek tablomuz satır, sütun ve banka
adres bilgileriyle erişilen byte'lardan oluşuyor. Diğer bir deyişle bir byte'ı
oluşturan ve tablomuzda yanyana konumlanmış olan 8 RAM hücresi aynı anda
okunuyor ya da yazılıyor. Bu aslında gerçekte olanın basitleştirilmiş hali.
Kullandığımız bellek modüllerinde anakarta bağlantıyı sağlayan veri yolunun
genişliği göze önüne alındığında - ki bu DIMMlerde 128 bittir - aynı anda çok
sayıda byte okumak mümkün (128bit/8bit=16 byte).
Sanıyorum ki bu noktada bir bankanın
yapısını ve nasıl işlediğini incelemek yerinde olacaktır. Bu kısımda günümüzde
en popüler olan SDR-RAM ve DDR-RAM bellek tiplerinin temel çalışma prensibi olan
dinamik RAM nasıl çalışır hep birlikte göreceğiz. Bahsettiğimiz gibi,
banka, esas olarak belli sayıda satır ve sütunlardan oluşan bir byte tablosu. Bu
tablodan byte'larımızı okumak için satır ve sütun numarasını yani adresini
vermemiz yeterli. Simdi byte’larımızı oluşturan bitlerimize yani RAM
hücrelerimize döndüğümüzde nasıl oluyor da bu hücrelerde saklanan veri ile
dışarı dünya arasında iletişim sağlanıyor biraz daha yakından
bakalım.

RAM hücremizi dışarıya bir vanayla
bağlı olan bir hazne olarak düşünelim. Verimizi yani hücrelerde saklanan 0 veya
1 değerlerinden birini saklayan bitlerimizi de haznemizin boş ya da dolu olma
durumu olarak, suyu ise yine aktığını varsayabileceğimiz elektriksel yük yani
elektronlar olarak modelleyelim. Buna modele göre, RAM hücrelerimiz, yani küçük
su hazneciklerimiz, saklayacakları veri 0 ise boş, 1 ise dolu oluyor. Bellek
tablomuzda bir sütunda yer alan yani dikey olarak komşu olan haznelerin tümü
ortak bir boruya bağlı. Her sütunda bulunan bu ortak borunun elektronikteki
karşılığı bit hattı. Bit hattına her okuma veya yazma işleminden önce
ayrı bir vana üzerinden su dolduruluyor. Buna birazdan daha detaylı deyineceğiz.
Bu boruların bir ucunda, borudaki su seviyesini algılayan algı
yükselticisi denilen birimler bulunuyor. Erişim sırasında, önce adresin
gösterdiği satırdaki bütün hazneleri bulundukları sütunlardaki ana boruya
bağlayan küçük vanalar aynı anda açılıyor ve tüm satırın sakladığı veri
okunuyor. Sıra geliyor bu satırın hangi sütununun ayıklanacağına. Bunun için,
bir kısmı satırla ilgili işlemlere eş zamanlı olarak, adresin gösterdiği sütun
numarası çözümleniyor, o sütuna ait byte’ın algılayıcılarına algıla
komutu veriliyor ve o byte okunmuş oluyor.
Hazne 0 mı yoksa 1 mi saklıyor bilmek
istediğimizde, yani hücremizi okumak istediğimizde, haznemizi bit hattına
bağlayan vanasını açıyoruz. Haznemiz boş ise önceden ağzına kadar suyla dolu
olan borudaki (bit hattı) suyun haznemizin alabileceği kadar kısmı haznemizin
içine doluyor ve ana borumuzdaki su biraz eksiliyor. Bit hattımızın ucunda yer
alan su seviyesi algılayıcısı (algı yükselticisi), boru tamamen su doluysa 1,
bir hazne kadar su eksilmişse 0 veriyor. Her sütunun altında o sütunun ana
borusuna bağlı bir algılayıcı yer alıyor. Tekrar okuma işlemine geri dönersek,
haznemiz okuma öncesi haznemiz boş ise yani 0 saklıyorsa vanası açıldığında ana
borudaki su içine doluyor, ana borudaki su seviyesi düşüyor ve algılayıcımız 0
veriyor yani hücremizde saklanan veriyi doğru olarak dışarı aktarıyor. Haznemiz
okuma öncesi zaten dolu ise (1 saklanıyorsa) haznemizin vanası açıldığında
hiçbir su akışı olmuyor ve algılayıcımız dışarıya 1 değerini doğru olarak
iletiyor. Bu noktada önemli bir konuyu açıklamak gerekiyor ki eminim bazı
okuyucularımızın dikkatinden kaçmamıştır. Haznemiz 0 saklıyorsa yani boşsa,
okuma işleminden sonra içine su doluyor, dolayısıyla içeriği bozuluyor ve bir
anda 1 saklıyormuş durumuna geliyor. Aynı olay 1 saklama durumunda
gerçekleşmiyor. Peki bu pratikte nasıl engelleniyor? Unutmayalım ki amacımız
hazneyi, içeriğini bozmadan okuyabilmek. Basit bir fikir olarak, okuma
işleminden sonra algılayıcımızın algıladığı değeri hücremize tekrar yazmak
aklımıza gelebilir ancak bu performans açısından büyük kayıp olur. Düşünsenize,
0 olan her bit için her okuma sonrası bir de yazma işlemi için bekle. Gerçekte
olay çok daha basit: Haznemiz ana borudaki suyun içine akmasına izin veriyor
ancak bu suyu içinde saklamıyor, bunun yerine bir bakıma kanalizasyon diye
nitelendirecegimiz çok daha büyük ve bellekteki her hazne tarafından paylaşılan
başka bir hazneye başka bir kanalla boşaltıyor. Hücremizi kanalizasyona bağlayan
kanal yine bir vana tarafından kontrol ediliyor. Haznemiz doluyken, kendi
içindeki bir geri beslemeyle bu vana kapalı tutuluyor ve böylece hazneden
kanalizasyona su kaçışı engelleniyor. Hazne boşken ise bu vana açılıyor. Bu
kanalizasyonun elektronikteki karşılığı toprak. Böylece boşsa yine boş
kalarak ama yapması gerektiği gibi bağlı olduğu sütunun bit hattındaki yani ana
borusundaki suyun seviyesini azaltarak sakladığı verinin algılayıcı tarafından
doğru olarak algılanmasını sağlıyor.
Okuma işlemini biraz olsun açıklığa
kavuşturduktan sonra bakalım yazma işlemi nasıl gerçekleşiyor. Yazma işleminde
amacımız haznemizin içeriğini gereken durumlarda değiştirmek. Gereken
durumlardan kastettiğimiz, hücremize yazmak istediğimiz değer, hücremizin hali
hazırda sakladığıyla aynıysa, herhangi bir değişikliğe gerek olmaması.
Mekanizma, okumayla hemen hemen aynı. Yazma işlemi öncesi tıpkı okumada olduğu
gibi sütuna ait ana boru suyla dolduruluyor. Bunun yapılma sebebi, önceden
gerçekleşmiş bir yazma veya okuma işlemi nedeniyle ana borudaki su seviyesinde
azalma olduysa bu eksiği tamamlamak, çünkü gördüğümüz gibi bu temel çalışma
prensiplerinden birisi. Yazma işlemi sırasında istenilen hücrenin (haznenin)
vanası açılıyor ve yazmak istediğimiz verinin 0 ya da 1 olmasına göre
algılayıcıların bulunduğu ucundan ya haznenin bağlı bulunduğu sütundaki ana
borudan yüksek basınçla su emiliyor (0) ya da boruya yüksek basınçta su
basılıyor (1). Haznemiz boşsa vanası açılınca bir ucundan zaten ana borudan su
emildiği için yine boş kalıyor, içine su dolmuyor. Aynı şekilde haznemiz doluysa
ve 1 yazılmak isteniyorsa boruya basınçlı bir şekilde su basıldığı için haznemiz
yazma işlemi sırasında yine dolu kalıyor. Öte yandan, haznemiz boş ise ve 1
yazılacaksa, yani dolması isteniyorsa, vanası açıldığında ana borudaki basınçlı
su, hücrenin kanalizasyona olan su akışını bastırarak dolmasını sağlıyor ve
hazne dolunca da geri besleme mekanizmasıya kanalizasyona açılan vana kapanıyor,
haznemiz dolu kalıyor ve böylece sakladığı yeni veri 1 olarak değişmiş oluyor.
Benzer şekilde, haznemiz dolu ise ve 0 yazılmak yani boşaltılmak isteniyorsa,
yazma işlemi sırasında borunun ucundan basınçla su emiliyor, haznemizin vanası
açıldığında emme gücüyle dolu olan haznemizdeki su da ana boruya çekilerek
emiliyor. Hazne boşaldığında kanalizasyona olan bağlantı da boşalma işlemine
destek olarak açılıyor ve işlem sonunda ana boruya bağlantı vanası kapandığımnda
hücremiz boş olarak yeni verisi olan 0'ı saklamış oluyor.
Bellek yongaları
|
Bir seviye üste çıktığımızda,
bankaların ortak bir veri hattına birarada bağlanmasıyla ana bellek tablomuzun
oluştuğunu görürüz. Bellek tablosunun yanında, adreste gösterilen banka
numarasını çözen, yongayı gerektiğinde güç tasarrufu gibi nedenlerle kapatıp
açılmasını, belirli komutların çalıştırılmasını kontrol eden kontrol
yazmaçları (mode register) ve saat sinyalinin alınıp bankalara dağıtılmasını
sağlayan sürücü devreleri bellek yongasını oluşturur.
Kavramlar ve
Parametreler
Tekrar su benzetmesinden
elektronların dünyasına dönecek olursak, bazı kavramları anlamızın
kolaylaştığını göreceğiz.
PRECHARGE: Bu kelimeyi çoğumuz duymuşuzdur. Özellikle
BIOS'ta RAM'lerle ilgili parametrelerle oynayıp bellek modüllerinden son
performans damlasını sıkarak çıkartmaya çalışanlarımız
RAS-to-Precharge Delay gibi terimlerle karşılaşmıştır.
PRECHARGE'ın karşılığı, sütunlara ait ana boruların okuma ve yazma öncesinde
doldurulmasıdır. Gerçekte benzetmemizdeki borular yerine metal hatları su yerine
elektronlarla yani elektriksel yükle doldurduğumuz için 'PRE-CHARGE' yani 'ÖN
YÜKLEME' terimi kullanılmıştır.
CAS: Diğer bir parametre olan ve CAS diye tabir edilen
Column Access Strobe yani Sütun Erişim Darbesi de
aynı mekanizmayla kolayca açıklanabilir. Okuma sırasında hücremiz sütuna ait
borudan su emerek borudaki su seviyesini azaltmaya çalışırken, seviyedeki bu
azalma, hücremizin boyutları önceden belirttiğimiz az yer kaplaması amacıyla
küçük tasarlanması sonucu hücremizi ana boruya bağlayan vananın bulunduğu hat
dar olduğu ve hücremizin emiş gücü de boyutlarıyla orantılı olarak düşük
olduğundan, yavaş gerçekleşmektedir. Dolayısıyla ana borudaki su seviyesi
algılayıcının bu azalmayı alglılayabileceği seviyeye ulaşması ve algılma
işleminin başlatılabilmesi için belli bir süre beklenilmesi gerekiyor. Aynı
zamanda adreste belirtilen sütun numarasının da çözümlenmesi bankadaki sütun
sayısına bağlı olarak zaman alıyor. İşte bu süreye CAS gecikmesi (CAS Latency -
kısaca CL) deniyor. Bu gecikme genellikle belleği kontrol eden ana saat
sinyalinin periyodu cinsinden verilir. Örneğin, CL=2 demek okuma başladıktan
yani haznenin vanası açıldıktan itibaren algılama komutu verilinceye kadar 2
saat periyodu süresince beklemek gerekiyor. Dolayısıyla CL değeri büyük olan
bellekler, daha uzun beklemeleri gerektiğinden daha yavaş çalışırlar.
RAS: Adreste belirtilen satır numarasının çözümlenmesi
ve belleğimizde o satırda yer alan bütün hücrelere ait vanaların açılabilmesi
için beklenmesi gereken süreye RAS (Row Access Strobe) yani
Satır Erişim Darbesi deniyor. RAS da CAS gibi saat periyodu cinsinden
belirtiliyor. Dolayısıyla RAS'ı küçük lan bellekler daha hızlı
oluyorlar.
RAS-TO-CAS
DELAY: Erişim sırasında, bildiğimiz gibi, önce bankadaki ilgili satır
okunmaya başlıyor, bit hattını temsil eden borudaki su yani yük seviyesi ilgili
hazneler tarafından algılanabilir seviyeye çekilene kadar bekleniyor, ardından
ilgili sütun belirleniyor ve o sütuna ait algılayıcılara ‘algıla’ komutu
veriliyor. İşte satırdaki haznelerin açılmasından bit hatlarındaki yük
miktarının (gerilim olarak ta düşünebiliriz) algılanabilir seviyeye ulaşmasına
kadar beklenilmesi gereken süreye RAS-TO-CAS DELAY (Satır Erişim Darbesi-Sütun
Erişim Darbesine Arası Gecikme) deniyor. Anlaşılacağı üzere bu parametre ne
kadar düşük olursa bellek o kadar hızlı demektir. Diğer parametreler gibi bu da
saat işaretinin periyodu cinsinden ifade edilir.
RAS-TO-PRECHARGE DELAY: Bildiğimiz gibi her okuma ve
yazma işlemi 'öncesinde', diğer bir bakışla, (her yazma ve okuma öncesi başka
okuma ve yazma işlemleri gerçekleştiği düşünüldüğünde) 'sonrasında' sütunlara
ait ana hatlar suyla dolduruyor yani PRECHARGE ediliyor. Eğer bu işlem, herhangi
bir okuma ve yazma işlemi sırasında açılan ve hazneleri sütuna ait boruya
bağlayan vanalar kapanmadan yapılırsa aynen 1 yazma işleminde olduğu gibi yüksek
basınçla boş olan hazneyi boşaltabilir ve verinin bozulmasına neden olabilir.
Bunu engellemek ve vanalar açıkken PRECHARGE işlemine başlamayı engellemek için
belli bir süre beklenmesi gerekiyor. Bu da elbette takip eden okuma ve yazma
işlemlerine başlamayı geciktirerek (unutmayalım ki boruların erişim öncesi
tamamen dolu olması gerekiyor) performansı azaltıyor. Bu gecikme de saat
periyodu cinsinden ifade ediliyor ve küçük bir sayı olması hızlı bellek olduğuna
işaret ediyor.
SAAT
FREKANSI: Önceden tanımladığımız CAS, RAS gibi gecikme süreleri işte
bu ana saat sinyalinin periyodu cinsinden belirtiliyor.
PERİYOD=1/FREKANS
eşitliğine göre, saatin frekansı ne
kadar yüksekse periyodu o kadar kısa oluyor, dolayısıyla CAS gibi saat periyodu
cinsinden ifade edilen bekleme süreleri kısaltılmış oluyor. Bu süre belleğin
kaldırabileceğinden fazla kısaltılırsa, önceden belirtildiği gibi, veri
kayıpları oluyor, bellek hatalı çalışıyor ve sonuçta PC'ler ya boot etmiyor ya
da etse dahi çalışma sırasında beklenmedik kilitlenmelere yol açıyor. Kısaca,
RAS ve CAS gibi, birimi zaman olan parametreler saat frekansıyla doğrudan
etkileniyor. Mesela, 133 MHz saat frekansında CAS=2'de çalışabilen bir bellek
166 MHZ'de ancak CAS=2.5 ya da 3'te çalışabiliyor. İdeal olanı, belleğin yüksek
saat frekanslarında ve düşük CAS, RAS gibi parametrelerle çalışabiliyor
olması.
Saat işareti basitçe bir kare dalga
biçiminde; periyodun yarı süresi aralıklarla periyodik olarak bir yükseliyor,
bir düşüyor. Saat işaretinin değiştiği bu bölgelere düşen ve yükselen kenarlar
deniyor. Saat frekansının belirlediği aralıklarla gelen bu kenarlar, yonga
üzerindeki bellek bankalarının ve diğer devrelerin eş zamanlı olarak (senkronize
bir şekilde) çalışmasını sağlar. Örneğin sütunlarda yer alan algı
yükselticilerine 'algıla' komutu ya da okunmak istenen veriyi bankalardan alarak
yonganın dışına süren sürücülere 'sür' komutu bu kenarlar aracılığıyla verilir.
SDR belleklerde komutlar yükselen kenarlarda verilirken DDR belleklerde bu hem
yükselen hem de düşen kenarlarda gerçekleşir. Bu sayede, DDR belleklerdeki veri
çıkışı SDR'ların teorik olarak iki katıdır çünkü bir saat periyodu içinde iki
kere (hem yükselen hem düşen kenarda) veri çıkışı olur.
ADDITIVE
LATENCY: 'Ekli Gecikme' denilen ve sadece DDR-II tipi bellekler için
geçerli olan bu gecikme süresi CAS'in üzerine ekleniyor ve CAS'i arttırma yani
belleği yavaşlatma etkisi yapıyor. Elbette ki istenilen bu değerin düşük olması.
DDR-II bellekleri henüz PC'lerde sistem RAM'i olarak görmeye başlamadıysak ta
bir süredir ekran kartlarında kullanılmaktalar. Ama sizleri şimdiden bu tip
parametreleri BIOS'larda görmeye hazırlayalım diye düşündük.
BURST ve BURST
LENGTH: Burst kelimesinim tam Türkçe karşılığını bulmak zor ancak
illa da yakın sayılabilecek bir terim bulalım dersek sanıyorum Ardışıl Veri
Aktarımı diye nitelendirmek yerinde olur. Erişim sırasında biliyoruz ki
bankadaki bütün satır aynı anda okunuyor ya da yazılıyor. İşte bu noktada BURST
kavramı devreye giriyor: Aynı satırdaki komşu byte’lar, veri yolunun elverdiği
ölçüde, saat işaretinin birbirini takip eden ilgili kenarlarında ardı sıra
dışarıya sürülüyor ya da içeri alınıyor. Okunmak ya da yazılmak istenilen veri
bellekte aynı satırda yer alıyorsa, bu şekilde CAS ve RAS gecikmelerini
beklemeksizin ardışıl konumdaki veri grubu, bellek yongası ve anakart
arasında hızlıca taşınabiliyor. Burst olayının ardışıl olarak kaç saat periyodu
süreceği ya da diğer bir deyişle ne kadar verinin burst yoluyla taşınacağını
belirten parametre ise BURST LENGTH (Burst Uzunluğu). Verinin ardışıl konumda
olduğu durumlarda burst uzunluğunun büyük tutulması performansı arttırır ancak
tersine bir durumda yani verini bellek tablosu içinde farklı satırlara dağıldığı
(bir bakıma sabit sürücülerdeki fragmente olma durumu gibi) burst az da olsa
performansı olumsuz etkileyen bir etken olarak karşımıza çıkabilir. Sanıyoruz ki
en akıllıcası, BURST uzunluğunu orta bir seviyede tutmak olacaktır.
BESLEME GERİLİMİ: İşlemci ve bellek, daha genel haliyle her yonga,
çalışabilmesi için bir besleme gerilimine ihtiyaç duyar. Besleme gerilimi, suyu,
vanaları ve boruları kullandığımız benzetmemizde suyun kaynaklarındaki (emme ya
da basma) akış hızına ya da bir bakıma basıncına denk gelir. Su ne kadar
basınçlıysa bit hatlarında gerçekleşen precharge ve hazneye olan su akışı o
derece hızlı gerçekleşir dolayısıyla bellek belli bir görevi daha hızlı yerine
getirir, beklemesi gereken süreler kısalır ve böylece ya aynı saat frekansında
daha küçük RAS,CAS v.s. değerleriyle ya da aynı RAS, CAS değerleriyle daha
yüksek saat frekanslarında çalışmaya devam edebilir. Overclock’la uğraşanlarımız
bilir ki işlemcileri yüksek frekanslarda çalıştırmanın en etkili yolu besleme
gerilimini arttırmaktır. Bu konuya overclocking hakkında bilinmeyenleri
açıklamaya çalıştığımız makalemizde detaylı olarak deyinmiştik. Bellek yongaları
da işlemciler gibi birer tümdevre olduklarından aynı prensiplere tabidirler ve
dolayısıyla besleme geriliminin arttırılması bellek yongalarının aynı işi daha
kısa sürede tamamlamalarına yardımcı olacağından daha yüksek saat frekanslarında
çalışmalarına imkan tanıyacaktır.
Çeşitli bellek türleri için normalde
gereken besleme gerilimi şu degerleri almaktadır:
RAM Türü |
Besleme
Gerilimi |
SDRAM |
3.3 Volt |
DDR-I RAM |
2.5 Volt |
RD-RAM |
2.5 veya 1.8
Volt |
DDR-II RAM |
1.8
Volt |
Voltaj seviyelerinin yeni nesillerde
giderek düşmesine rağmen performansın artması çelişkisinin yanıtı, üretim
teknolojileri geliştikçe küçülen transistörlerin aynı hızda çalışabilmeleri için
daha az gerilimle beslenmeye ihtiyaç duymalarında ve bellek
mimarilerindeki ilerlemelerde yatmaktadır.
Kontrol ve Veri
İşaretleri
Sıra, bellek modülümüze ait giriş ve
çıkış işaretlerini incelemeye geldi. Modül (örneğin DIMM) anakarta üzerindeki
belli sayıda iğneden oluşan bir port aracılığıyla bağlanıyor. DIMM’lerde 168
iğne varken bu sayı SIMM’ler için 144. Bu iğnelerin her birinin taşıdığı
elektriksel işaretler, modül üzerindeki sinyal hatları üzerinden bellek
yongalarının iğnelerine taşınıyor. Bu işaretler, besleme ve toprak
gerilimlerinin yanısıra adres ve veri işaretlerini, saat işaretini, bellek
yongalarını kontrol eden komutları taşıyan işaretleri ve de modül üzerindeki SPD
yongasından gelen verileri içeriyor. Şimdi bu işaretlere ve ne
anlam taşıdıklarına
bakalım.
ADRES
İŞARETLERİ: Adres işaretleri, anlaşılacağı üzere, adres bilgilerini
bellek yongaların taşımaktan sorumlu. Bilgisayar dünyasında, işaret, daha büyük
bir bütünün parçasıysa ( mesela bir byte’ın) genellikle bit kelimesiyle anılır.
Bu sebeple, bu bölümde olduğu üzere, yeri geldiğinde işaret yerine bit
kelimesini kullanacağız. Tekrar hatırlayalım: Bir işaret ya da bir bit,
mantıktaki 0 ya da 1 mantık değerlerinden birini taşır. Adresimizi bir bütün
olarak ele alırsak, adresi oluşturan her işarete adres biti dememiz daha doğru
olacaktır. Adresi oluşturan bit sayısı belleğin kapasitesine göre değişik
değerler alır. Her bir bit, 0 ya da 1 olmak üzere iki değeri temsil
edebiliyorsa, birlikte kullanıldıklarında:
Bit Sayısı |
Temsil Edilen Değer
Sayısı |
Temsil edilen
değerler |
1-bit |
2^1 = 2 |
0,1 |
2-bit |
2x2 = 2^2 =
4 |
0,1,2,3 |
3-bit |
2x2x2 = 2^3 =
8 |
0,1,2,3,4,5,6,7 |
4-bit |
2x2x2x2=2^4 =
16 |
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 |
... |
... |
... |
N-bit |
2x2x2x...x2 (N
tane)=2^N |
0,1,2,3,4,...,(2^N-1) |
farklı değeri temsil edebilir. Buna
göre, adresimizin, belleğimizdeki 2 byte’ın yanyana gelemesiyle yani
16-bit’ten oluşan çift-byte’ları işaret ya da temsil ettiğini
varsayarsak ve toplam kaç çift-byte’ımız olduğunu bilirsek, kaç tane adres
bitine ihtiyaç duyduğumuzu kolayca bulabiliriz. Örneğin, belleğimiz 256 Mega
Byte (MB) ise, yani 256/2=128 Mega Çift-Byte ise ve 1 Mega’nın
2^20 (2 üzeri 20) demek olduğunu biliyorsak, belleğimizde 128*(2^20)=2^27
adet çift-byte var bulunduğunu söyleyebiliriz. Yukarıdaki tablomuza göre N
sayısının yerine 27 geliyor, dolayısıyla adresimiz 27 bitten meydana geliyor. Bu
27 bitin bir kısmı bankaları, bir kısmı bankalardaki satırları, bir kısmı da
bankalardaki sütunları adreslemek için kullanılıyor. Pratik bir bilgi olarak
bellek yongalarının genellikle 4 banka olarak tasarlandığı düşünülürse ve
4=2^2 olduğuna göre bankaları adreslemek için 2 bit gerektiği
hesaplanabilir. Geriye kalan 25 bit satır ve sütun adreslemesi için
kullanılıyor. Varsayalım ki her banka, 8192 (=2^13) satırdan ve 512
(2^9) sütundan oluşuyor. Bu demek oluyor ki 13 bit satır adreslemesi, 9
bit de sütun adreslemesi için ayrılmış durumda. Buraya kadar 2 + 13 + 9 = 24 bit
kullanılmış durumda ve elimizde 3 bit kaldı. Bu üç bit ise bize modülümüz
üzerinde 2^3=8 adet bellek yongası bulunduğu bilgisini veriyor.
VERİ
İŞARETLERİ: Veri işaretleri, daha
doğrusu veri bitleri, bellek yongalarının adres bitleriyle gösterilen
hücrelerine yazılır ya da bu hücrelerden okunur. Yukarıdaki örneğimize
kaldığımız yerden devam edecek olursak, her bir bellek yongası, 24 bitin
kullanılmasıyla adreslenen 16-bitlik çift-byte bilgisini dışarı veriyor ya da
dışarıdan alıyor ve de elimizdeki 8 yonga bir araya gelerek 8*16-bit=128-bit’lik
veriyi modülün 144 bitlik portunun bir parçası olarak oluşturuyor.
KOMUT
İŞARETLERİ: Bellek yongaları, çeşitli amaçlar için belirlenmiş belli
komutları işleme yeteneğine sahipler. Sadece adresi alıp veriyi okutan ya da
yazan yongalar değiller. Bu komutların belli başlı olanlarına burda kısaca
değinmek konumuzun bütünlüğü açısından sanırız yararlı olacaktır.
NOP (No
OPeration=Etkisiz Komut): Yonganın herhangi bir işlem yapmadan
beklemesi gereken durumlarda verileblecek yeni komutların yonga tarafından işlem
sırasına alınması engellenir. Komut sırasında işlem görmekte olan diğer komutlar
etkilenmeden tamamlanır.
DESELECT
(Seçmeyi Bırak): Bu komutla işlem halindeki bellek yongasının
seçilmesi durdurulur, yonga askıya alınır ve başka yeni komut kabul etmeyeceği
bir konuma getirilir. Komut sırasında işlem görmekte olan diğer komutlar
etkilenmeden tamamlanır. İşlevsel olarak NOP komutuna benzer.
ACTIVE (Aktive
Et): Adreste belirtlen bankayı seç ve ilgili satırı aktif hale
geçir.
READ
(Oku): Adreslenen banka ve sütun seçilir, ardışıl okuma (burst read)
başlatılır.
WRITE
(Yaz): Adreslenen banka ve sütun seçilir, ardışıl yazma (burst write)
başlatılır.
PRECHARGE (Ön
Yükleme): Bit hatlarının (boruların) okuma ve yazma öncesi tamamen
yüklenmesini (suyla doldurulmasını) hatırlayalım. Bu işlem sonrasında bir ya da
daha fazla bankadaki adreslenen ve işleme alınmak üzere olan satır iptal edilmiş
oluyor.
AUTO PRECHARGE
(Otomatik Ön Yükleme): Ayrıca bir Precharge komutu vermeye gerek
kalmaksızın otomatik olarak ve belli aralıklarla bit hatlarının ön yüklemesinin
yapılmasını sağlar.
BURST
TERMINATE (Burst Bitir): Devam etmekte olan bir ardışıl (burst) okuma
ya da yazma işlemi, belirtilmiş olan burst uzunluğunun tamalanması beklenmeden
iptal edilir.
SELF-REFRESH
ya da AUTO-REFRESH (Kendini Tazele): Modül güç tasarrufu modundaysa
ve herhangi bir saat sinyali verilmese bile sakladığı verinin kaybolmadan
korunnmasini sağlar. Autorefresh ise belli aralıklarla saklanılan verinin
otomatik olarak tazelenmesini sağlar ama farklı olarak bir saat işaretine
ihtiyaç duyar.
LOAD MODE
REGISTER (Mod Yazmacını Yükle): Yongayla ilgili bilgilerin ve
komutlarla ilişkili verilerin (burst uzunluğu ya da kendini otomatik tazeleme
aralığı gibi) mod yazmacına yüklenmemesi için kullanılır.
Bant Genişliği
Bant genişliği, bilgisayar dünyasında
çok sık sözü geçen bir kavram. Yonga setlerinde, ekran kartlarında,
işlemcilerde, internet bağlantılarında, kısaca verinin taşındığı her ortamda bu
kavram geçerlidir. Tanımlamak gerekirse, bant genişliğ, bir ortamda verinin ne
kadar hızlı taşındığının ölçüsüdür. Kısaca, birim zamanda taşınan veri
miktarıdır. Bu tanımı belleklere uygulayacak olursak, bellek modülümüzle anakart
arasında belli bir süre içerisinde ne kadar veri alışverişi gerçekleşebiliyor
sorusunun cevabı bant genişliğidir.
Önceden bahsettiğimiz gibi, DIMM’ler,
anakarta 168 bitlik bir port üzerinden bağlı ve bunun 128 biti veri için
ayrılmış durumda. SDR bellekleri ele alırsak, saat işaretinin her yükselen
kenarında modül ve anakart arasında 128 bitlik veri transferi olduğu ve modülün
saat frekansının birimi olan Hertz (Hz)’in aslında bir saniye
içinde kaç saat periyodu sığdığını bize söylediği düşünülürse, saat frekansıyla
128-bit’i çarptığımızda, bir saniyede (birim zamanda) kaç bit (ne kadar veri)
taşındığı kolayca hesaplanır ve bu da bize bit/saniye cinsinden bant genişliğini
verecektir. Mesela, belleğimizin saat frekansı 166 MHz (Mega Hertz) olsun. Bu
durumda SDR belleğimizin bant genişliği :
128bit * 166MHz = 21248000000
bit/saniye
= 2656000000 byte/saniye
=2.47 Giga Byte/saniye
(GB/s)
olarak hesaplanabilir.
DDR belleklerimizde ise veri
transferi saatin sadece yükselen değil aynı zamanda düşen kenarında da
gerçekleştiği ve dolayısıyla aynı sürede iki kat daha fazla bilgi taşınabildiği
için bant genişliği 2.47 * 2 = 4.94 GB/s olarak hesaplanabilir.