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.
<blockquote><blockquote><blockquote><blockquote><blockquote>
[Resimleri görebilmek için üye olun veya giriş yapın.]</blockquote></blockquote></blockquote></blockquote></blockquote>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.
<blockquote><blockquote><blockquote><blockquote><blockquote>
[Resimleri görebilmek için üye olun veya giriş yapın.] </blockquote></blockquote></blockquote></blockquote></blockquote>Ç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.
<blockquote><blockquote><blockquote><blockquote><blockquote>
[Resimleri görebilmek için üye olun veya giriş yapın.]</blockquote></blockquote></blockquote></blockquote></blockquote>SPD
yongası üzerinde, yazımızın ilerleyen bölümlerinde daha detaylı
değineceğim, 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.
<blockquote><blockquote>
[Resimleri görebilmek için üye olun veya giriş yapın.]</blockquote></blockquote>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.
<blockquote><blockquote>
[Resimleri görebilmek için üye olun veya giriş yapın.]</blockquote></blockquote>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.
<blockquote><blockquote><blockquote><blockquote><blockquote><blockquote><blockquote>
[Resimleri görebilmek için üye olun veya giriş yapın.]</blockquote></blockquote></blockquote></blockquote></blockquote></blockquote></blockquote>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.