# Bellek (bilgisayar)
Bellek, bilgisayarı oluşturan 3 ana bileşenden biridir. İşlemcinin çalıştırdığı programlar ve programa ait bilgiler bellek üzerinde saklanır. Bellek geçici bir depolama alanıdır, üzerindeki bilgiler güç kesildiği anda silinir. Bu nedenle bilgisayarlarda programları daha uzun süreli ve kalıcı olarak saklamak için farklı birimler (sabit disk - CD - DVD) mevcuttur.
Belleğe genellikle "Random Access Memory" (rastgele erişimli bellek) ifadesinin kısaltması olan RAM adı verilir. Bu ad, bellekte bir konuma rastgele ve hızlı bir şekilde erişebildiğimiz için verilmiştir. RAM'de sadece işlemcide çalışan program parçaları tutulur ve elektrik kesildiği anda RAM'deki bilgiler silinir. Bilgilerin kalıcı olarak saklandığı yer disktir. Bu iki kavram bilgisayarı kullanmaya yeni başlayan insanlar tarafından genellikle karıştırılır. Bu kavramları açıklamak için en güzel benzetme; bir dosya dolabı ve çalışma masası olan ofistir. Bu örnekte dosyaların kalıcı olarak saklandığı diski dosya dolabı, üzerinde çalışılan verilerin bulunduğu belleği ise çalışma masası temsil etmektedir. Bir ofiste dosyalar dosya dolapları içinde saklanır ve çalışanlar üzerinde çalışmak istedikleri dosyayı dolaptan alarak kendi çalışma masalarında çalışırlar. Bilgisayarda da işlemci üzerinde çalışacağı veriler diskten belleğe getirilir. Dosya dolabınız ne kadar büyükse, o kadar çok dosyayı saklayabilirsiniz ve masanız ne kadar büyükse aynı anda o kadar çok dosyayı masaya koyup üzerinde çalışabilirsiniz. Bilgisayar ortamında da işler tam olarak böyledir. Disk kapasitesi ne kadar büyükse o kadar çok veri saklayabiliriz ve bellek kapasitesi ne kadar büyükse işlemci o kadar çok dosya üzerinde çalışabilir. Bu benzetmenin bilgisayarın çalışma şeklinden farkıysa belleğe getirilen dosyaların diskteki dosyaların bir kopyası olmasıdır. Gerçek dosyalar diskte saklanmaya devam eder. Bunun sebebiyse belleğin güç kesildiği anda verileri kaybetmesidir. Eğer bellekteki dosya değiştirilirse değişiklerin kaybolmaması için diske kaydedilmesi gerekir.


## Geçmişten Günümüze Bellekler.
İlk bilgisayarlarda bellek yoktu. Onun yerine süngü ve röle ile katot lambaları kullanılmakta idi. Yazılımlar ve veriler tamamen diğer medyalara (teleteks şeritleri veya delikli kartlar vb.) geçirilmekteydi. İlk dijital bilgisayarlarda röleler bellek için kullanıldı. Daha sonra katot lambaları yanında yüzük şeklinde olan manyetik demir (ferrit) çekirdekler kullanıldı. Teker düzeninde tellere geçirilen bu demir yüzükler akımı aldığında mıknatıslaşmakta ve bu durumu kaybetmemekte ancak her okuma sürecinde hafıza bilgisini kaybetmekteydiler. Yapısal özelliği nedeni ile büyük mekanlara ihtiyaç vardı. Tipik bir büyük bilgisayar olan Telefunken TR440'nın 1970 senesinde belleği 48 bitlik 192.000 kelime yani bir Megabyte'a eşit idi.
1985'te satın alınan bir PC (Commodore PC10) 64 kilobayt belleğe sahip iken 1990'da alınan bir PC'de 1 megabayt bellek bulunabiliyordu. 2005'te ise bu 512 megabayt veya daha çok olabiliyordu. Günümüzün PC'lerinde kullanılan işletim sistemleri (Windows, Linux, BeOS vs) bellek canavarları olup, yukarıya doğru sınır tanımamaktadırlar (tabii bu sınır var olup şu an pratik olarak ulaşılamamakta). Anakartlarda bulunan yonga tipine göre üst sınır olup bunların açıklamaları üreticinin internet sayfasında veya kılavuzunda bulunmaktadır.
Transistörün bulunuşu ile birlikte büyük atılımlar olmuştur. Bugün tümleşik devre imkânlarıyla en modern bilgisayar sistemleri donatılmaktadır.
Günümüzde büyük, ucuz ve hızlı bellek üretmek amaçlanmaktadır. Ancak bellek büyüdükçe yavaşlar, hızlandıkça da küçülür. Bu sorunu aşıp büyük, hızlı ve ucuz bellek tasarlamak için aşamalı bellek yapısı ve koşutluk (paralellik) kullanılmaktadır.


## Aşamalı Bellek Yapısı.
Bellekler, aşamaları kullanılarak, en ucuz teknolojinin sağlayabileceği boyutla en pahalı teknolojinin sağlayabileceği hız sunulmaya çalışılmaktadır. Yazmaçlar işlemcinin içindedir ve işlemci yazmaçlara doğrudan erişebilir. Yazmaçlara erişim için geçen süre bir nanosaniyenin altındadır. Yazmaçlarda sadece birkaç bitlik veri tutulabilir. Bir gigabayt veri saklayabilecek yazmaçlar üretmek için milyonlarca dolar harcamak gerekir. Birinci düzey önbellek birkaç kilobaytlık veri tutabilir ve erişim süresi birkaç nanosaniyedir. Erişim süresi ikinci düzey önbellekte birkaç on nanosaniyeye, ana bellekte de yüzlerce nanosaniyeye çıkar.
Bu yapıda yazmaçlar ve bellek arası iletişim derleyiciler tarafından; önbellek ve bellek arasındaki iletişim donanım tarafından; bellek ve disk arasındaki iletişim de işletim sistemi, donanım ve kullanıcı tarafından yönetilir.


### Tanımlar/Kavramlar.
Bulma (Hit): Aranan verinin üst düzey bellekte herhangi bir öbekte bulunmasıdır.
Bulma Zamanı: Bellek erişim süresi + verinin bulunup bulunamadığının belirlenme süresi.
Bulamama (Miss): Aranan verinin alt düzey bir bellekte bulunmasıdır.
Bulamama Gecikmesi: Üst düzey bellekten bir öbeğin atılması + yeni öbeğin işlemciye getirilmesi için geçen zaman.


### Alanda Yerellik.
Bir öge bellekten okunduysa, yakınındaki adresteki ögelerin okunması olasıdır.


### Zamanda Yerellik.
Bir öge bellekten okunduysa yakın zamanda tekrar okunması olasıdır.


## Rastgele Erişimli Bellek (RAM).
Rastgele erişimli bellek ifadesindeki rastgele kavramı, bellekteki her veriye bellekteki konumundan bağımsız olarak aynı sürede erişilebildiği anlamına gelir. Şekil 2.1'de sıradan bilgisayarlarda kullanılan RAM hücresinin fonksiyonel davranışını gösterir.
Fiziksel uyarlama tam olarak şekildeki gibi olmak zorunda değildir, ama çalışma şekli böyledir. Bir bellek hücresini uyarlamanın birçok yolu vardır. Şekildeki gibi flip-floplar üzerine kurulu RAM yongaları (çipleri) statik RAM'lerdir (SRAM) ve her konumun içeriği güç kesilene kadar saklanır. Dinamik RAM (DRAM) yongalarında bir miktar enerji depolayan kapasitörler kullanılır. Bu kapasitörlerdeki enerji seviyesi 1 ya da 0'a karşılık gelir. Kapasitörler flipfloplardan çok daha küçüktür, bu yüzden aynı boyutlardaki bir DRAM, SRAM'den çok daha fazla veri saklayabilir. DRAM üzerindeki hücrelerde, kapasitör boşaldıkça hücredeki veri düzenli olarak değiştirilmeli ya da yenilenmelidir.
DRAM'ler ortamdaki gama ışınlarıyla etkileşim içine girerlerse, üzerilerindeki kapasitörler zamanından erken deşarj olabilir. Fakat bu çok nadir gerçekleşen bir durumdur. Açık bırakılan bir sistem günlerce hata vermeden çalışabilir. Bu yüzden ilk kişisel bilgisayarlarda (PC) hata algılayıcı devreler bulunmazdı. Bilgisayarlar gün sonunda kapatılırdı ve bu sayede hatalar yığılmazdı. Hata algılayıcılarının olmaması, DRAM fiyatlarının uzun bir süre daha düşük seyretmesini sağladı. Ancak gelişen teknolojiyle DRAM fiyatlarının en düşük seviyeye gelmesi ve bilgisayarların açık kalma sürelerinin artmasıyla beraber, hata algılayıcılar bilgisayarların olağan parçaları haline geldiler.


### RAM Çeşitleri.
RAM'ler, silikon üzerine yerleştirilmiş birçok transistörün ağırlıklı olarak veri erişiminin kontrolü ve verinin saklanmasıyla ilgili belli işlevleri yerine getirmesi için birbirine bağlanmış elektronik yapılardır. RAM teknolojilerinde güdülen hedef daha küçük transistörler üretmek, böylece bir silikon parçasına daha fazla transistör yani daha fazla işlev sığdırmak ve bu sayede silikonun daha hızlı çalışmasını sağlamaktır. Bu hedefe giderken karşılaşılan engellerin çoğu gelişen teknolojiyle daha üretim aşamasındayken aşılıp geri kalan kısım ise geliştirilen algoritmalar ve protokollere çözülmektedir. RAM çeşitleri ise bu protokoller tarafından belirlenmektedir.
Kapasitörlerin şarjını periyodik olarak yenilemek gerektiği için DRAM'lere dinamik bellek, elektrik kesilmediği sürece bilgiyi sakladığı için SRAM'lere statik bellek adı verilir. DRAM'in SRAM'e karşı avantajı ise yapısal basitliğidir. SRAM'de her bit için altı transistör gerekirken DRAM'de bir transistör ve bir kapasitör yeterlidir. Ekonomik nedenlerden ötürü kişisel bilgisayarlar, iş istasyonları ve PlayStation, Xbox gibi küçük olmayan oyun konsollarında genel olarak büyük olan DRAM kullanılırken; önbellek ve disk tamponu gibi diğer kısımlarda SRAM kullanılır.


## Salt Okunur Bellek (Read Only Memory) - ROM.
Üzerindeki verileri kalıcı ya da yarı kalıcı olarak saklayan rastgele erişimli belleklere ROM denir. Bir program belleğe yüklendiğinde, üzerine başka bir veri yazılana ya da güç kesilene kadar bellekte kalır. Bazı uygulamalar içinse veriler hiç değişmez. Bilgisayar oyunları, hesap makineleri, mikrodalga fırınlar üzerindeki kontrol programları gibi değişmeyen programlar ROM üzerinde saklanır.
ROM basit bir cihazdır. Bir kod çözücü, birkaç mantık kapısı ve veri çıkışlarından oluşur. Flip-flop ya da kapasitörlere ihtiyaç duymadan çalışır.
Yüksek hacimli uygulamalarda ROM'lar fabrikalarda programlanır. Buna alternatif olarak küçük uygulamalar ve prototipler için, içerikleri PROM yazıcı olarak bilinen ve kısmen ucuz olan cihazlar kullanılarak kullanıcı tarafından yazılabilen Programlanabilir ROM'lar (PROM) kullanılır. Oyun endüstrisinin oluşmaya başladığı ilk dönemlerde, PROM yazıcıların PROM'ların içeriğini okuma kabiliyeti de vardı. Bu sayede oyunların korsan kopyaları yeni PROM'lara kaydediliyor, hatta içlerindeki veri deşifre edilerek karşı mühendislik için kullanılıyordu.
PROM'lar programcıya kodunun sürekli olarak saklanması imkânını verse de, PROM'ların üzerine sadece bir kez yazılabilir. Silinebilir ROM'lara (Erasable PROMs – EPROM) ise üzerlerindeki veri morötesi ışınlarla silinerek tekrar tekrar yazma işlemi yapılabilir. Elektrikle silinebilir PROMlarsa (Electrically Erasable PROMs – EEPROM) içeriklerinin elektrik gücüyle yazılıp silinebilmesine izin verirler. Günümüzde kullanılan flaş belleklerin çoğunda bu teknoloji kullanılmaktadır. EEPROM'lar üzerine on binlerce kez veri yazma ve silme işlemi yapılabilir.


## Yonga Yapısı.
Basit bir bellek yongası 0 dan m-1'e kadar sıralanmış m bit adres girişi (A0-Am-1), yonga seçici (YS) ve okuma (K) – yazma (K~) kontrolünden oluşur. 5.1'de YS ve K'nın üzerindeki çizgiler yonganın YS=0 iken seçildiği ve K=0 iken bir yazma işlemi gerçekleşeceğini gösterir. T kadar bir zaman sonra yongadan veri okunacağı zaman w bitlik veri, D0-Dw-1 veri çıkışlarında hazır olur. Veri hattı burada da olduğu gibi birçok yongada çift yönlüdür.
Şekildeki yongadaki adres satırları, gelen m bitlik veriden, her biri w-bit sözcükle ilişkilendirilmiş olan adreslerden hangisinin kullanılacağını belirler. Yonga üzerinde de 2mxw bitlik veri saklanabilir.
RAM'ler yazmaçlar derlemi olarak düşünülebilir. RAM yongaları üzerinde sözcükleri saklamak için yazmaçlar kullanılır ve hangi sözcüğün okunacağına ya da yazılacağına karar vermek içinde adresleme mekanizmaları oluşturulur.
Küçük RAM modülleri birleştirilerek daha büyük modüller elde edilebilir. Farklı tasarım yolları kullanılarak hem sözcük boyutu hem de modül başına düşen sözcük sayısı arttırılabilir. Örneğin sekiz adet 16M x 1-bit RAM kullanılarak bir adet 16M x 8-bit RAM yapılabilir. (16M=224)


## Bellek ve Başarım.
Bilgisayarda başarım, yürütme zamanı ile belirlenir. Daha açık söylemek gerekirse Başarım = (1 / yürütme zamanı)'dır. Yürütme zamanı ise
 Yürütme Zamanı = Buyruk Sayısı * BBÇ * Çevirim Zamanı
formülüyle verilir. Burada buyruk sayısı, o programın çalışması için kaç buyruğun yürütülmesi gerektiğini; BBÇ, bir buyruğun işlenmesi için kaç çevirim yapılması gerektiğini ve çevirim zamanı ise çevirim başına geçen süreyi göstermektedir. Bir programın buyruk sayısı bilgisayardan bilgisayara değişmez, her bilgisayarda aynıdır. Çevirim zamanı ise işlemcinin saat vuruş sıklığıyla alakalıdır. Örneğin saat vuruş sıklığı 200 MHz olan bir işlemcinin çevirim zamanı 5 ns dir.
Başarımda belleğin rolü ise BBÇ'nin hesaplanmasında ortaya çıkar. Örneğin ideal BBÇ'si 1,1 çevrim olan bir işlemciyi ele alalım. Bu işlemci zamanının %50'sini aritmetik ve mantık işlemleriyle, %30'unu yükleme ve saklama işlemleriyle ve %20'sini denetimde kullansın. Ayrıca kabul edelim ki bellek işlemlerinin %10'unu önbellekte bulamasın ve bu durum 50 vuruşluk gecikme yaratsın. O halde BBÇ
 BBÇ = BBÇ + Buyruk Başına Ortalama Duraklama
 = 1,1(çevrim) + (0,30(veriBellegiİslemi/buyruk)× 0,10(bulamama/veriBellegiİslemi)× 50(çevrim/bulamama))
 = 1,1 çevrim + 1,5 çevrim
 = 2,6 çevrim
olarak hesaplanır.
Buradan kolayca hesaplanacağı üzere 1,5 çevrim / 2,6 çevrim = 0,58 olup demek ki işlemci zamanının %58 ini belleği beklemekle geçirmektdir.
Eğer bulamama oranı %1 artarsa yani %11 olursa o halde BBÇ 2,75 çevrim olacak ve bu durumda işlemci zamanının %60 ını belleği beklemekle geçirecektir.
O halde oluşacak gecikme zamanı sabit kalmak üzere belleğin boyutunu büyüterek bulamama oranını azaltırsak yürütme zamanı azalır, dolayısıyla başarım artar.


## Ticari Bellek Modülleri.
Piyasalarda satılan belleklerin çoğu belli standartlara göre üretilirler. Şekilde sekiz adet 220 bitlik çipten oluşmuş 1 megabaytlık bir yonga modülünü göstermektedir. 1'den 30'a kadar numaralandırılmış olan bağlantı noktaları tek bir yol üzerinde sıralanmıştır. 220 adet adres alanı için 20 tane adres satırına ihtiyaç olmasına rağmen sadece 10 tane adres girişi vardır. 10 bitlik satır ve sütun için 10 bitlik adresler ayrı ayrı gelirler ve kolon adres storoboskobu ile satır adres storoboskobu, gelen adreslerden kendilerine ait olanı seçerek adresi belirlerler (satır adres storoboskobu belli aralıklarla kapasitörleri şarj etme işlemini de gerçekleştirir). Bu işlem adrese erişim zamanını 2 katına çıkarırmış gibi görünse de, sadece satır ya da sadece sütun adresinin değiştiği durumlarda ortalama erişim zamanı 20 bitlik adres girişi kullanılan duruma göre daha hızlıdır. V1 den V8 e kadar olan 8 adet veriyolu da aynı anda 1 baytlık verinin paralel olarak okunup yazılmasına imkân verir.