BASİT BİR BİLGİSAYAR
Giriş
Günümüzde bir bilgisayar tasarlamak, epey eğitim almış bir bilgisayar mühendisinin işidir. Bunun gibi bir giriş ders kitabında (ve bilgisayar organizasyonu dersinde) bugün piyasada bulunanlar gibi bir bilgisayar tasarlamak ve inşa etmek için gerekli tüm bilgileri sunmak imkânsızdır. Bu bölümde, bilgisayar organizasyonunun temellerine ve ardından, CISC ve RISC tasarım felsefelerini yansıtan iki popüler mimari olan Intel ve MIPs makinelerini kısaca inceleyeceğiz. Bu bölümün amacı, bir bilgisayarın nasıl çalıştığını anlamanızı sağlamaktır.
4.1. CPU Temelleri ve Organizasyonu
Bilgisayarların ikili kodlu verileri işlemesi gerektiğini bölüm 2’den (veri gösterimi) biliyoruz. Bir bilgisayar belleği hem verileri hem de program talimatlarını – komutlarını depolamak için kullanılır. Merkezi işlem birimi (CPU), program talimatlarının getirilmesinden, getirilen her bir talimatın kodunun çözülmesinden ve doğru veriler üzerinde belirtilen işlem sırasının gerçekleştirilmesinden sorumludur. Bilgisayarların nasıl çalıştığını anlamak için, önce bileşenlerine ve bu bileşenler arasındaki etkileşimi anlıyor olmak gerekir. Bir sonraki bölümde basit mimariyi tanıtmak için, önce genel olarak modern bilgisayarların birinci soyut katmanı olan kontrol katmanında ki mikro mimariyi inceleyeceğiz.
Tüm bilgisayarların merkezi bir işlem birimi vardır (Central Processing Unit – CPU) ve iki kısımdan oluşur. İlki, iletişimi saatler (clock) tarafından kontrol edilen, depolama birimleri (yazmaç – register), aritmetik ve mantık birimleri (arithmetic and logic units – ALU) ve bunları birbirlerine bağlayan veri yollarından (bus) oluşan olan data hattıdır (datapath). İkinci CPU bölümü, işlemleri sıralamaktan ve doğru verilerin doğru zamanda olması gereken yerde olmasını sağlamaktan sorumlu olan kontrol ünitesidir (control unit). Bu bileşenler talimatların alınması, kodlarının çözülmesi ve işlem sırasına göre yürütülmesi gibi CPU görevlerini yerine getirir. Bir bilgisayarın işlem yapma hızı, datapath ve control unit tasarımı ile doğrudan ilgilidir. Bu nedenle, CPU’nun bu bileşenlerini aşağıdaki bölümlerde ayrıntılı olarak inceleyeceğiz.
Register (Yazmaç)
Registerlar, bilgisayar sistemlerinde adresler ve programların yürütülmesi için gerekli veriler gibi çeşitli ikili verilerin depolanma birimidir. Registerlar işlemcide bulunur, böylece bilgilere çok hızlı bir şekilde erişilebilir. Bölüm 3’te D flip-flopların registerlar yerine kullanılabileceğini gördük. Bir D flip-flop, 1 bitlik bir register ile eşdeğerdir, bu nedenle örneğin 16 bitlik bir register oluşturabilmek için 16 adet D Flip-Flop gerekir.
Bilgisayarların belirli boyutlarda registerları vardır ve veri işleme bu registerlarda saklanan sabit boyutlu ikili word’ler ile yapılır. Yaygın boyutlar 16, 32 ve 64 bit büyüklüğündedir. Bir makinedeki register sayısı mimariden mimariye değişir, ancak tipik olarak 2’nin kuvvetidir. 16 ve 32 en yaygın olanıdır. Registerlar, verileri, adresleri veya kontrol bilgilerini tutarlar. Bununla birlikte bazı registerlar özel amaçlıdır ve yalnızca verileri, yalnızca adresleri veya yalnızca kontrol bilgilerini saklamakla görevlidirler.
Bilgiler registerlara yazılır, registerdan okunur ve birinden diğerine aktarılır. Registerlar, bellekler gibi adreslenmezler (her bellek word’ü 0 ile başlayan benzersiz bir ikili adrese sahiptir). Registerlar, kontrol ünitesi tarafından adreslenirler.
Modern bilgisayar sistemlerinde, bilgiyi depolayan, değerleri kaydıran, değerleri karşılaştıran ve değerleri sayan gibi birçok özel register türü vardır. Geçici değerleri depolayan registerlar, program döngüsünü kontrol eden dizin registerları (index register), işlemler için bilgi yığınlarını yöneten yığın işaretçi registerları (stack pointer register), durumu veya çalışma modunu (taşma, taşıma veya sıfır koşulları gibi) tutmak için durum registerları (status register) ve programcının kullanabileceği registerlar olan genel amaçlı registerlar gibi bir çok tür register vardır. Çoğu bilgisayarın register setleri vardır ve her set belirli bir şekilde kullanılır. Örneğin, Pentium mimarisinde bir data register seti ve adres register seti vardır. Günümüzde ki mimariler, komutların yürütülmesini hızlandırmak çok büyük register setlerine sahiptir.
ALU
Aritmetik mantık birimi (ALU), programın yürütülmesi sırasında gereken mantık işlemlerini (karşılaştırmalar gibi) ve aritmetik işlemleri (toplama veya çarpma gibi) gerçekleştirir. Bir ALU’nun genellikle iki veri girişi ve bir veri çıkışı vardır. ALU’da gerçekleştirilen işlemler status registerındaki bitleri etkiler (bitler, herhangi bir eylemin gerçekleşip gerçekleşmediğini belirtmek için 0 yada 1 olarak ayarlanır). ALU, kontrol ünitesinden gelen sinyallerle kontrol edilir ve bu sayede gerekli işlemleri gerçekleştirir.
CONTROL UNIT
Kontrol birimi (control unit), CPU’nun yöneticisidir. Tüm konutların yürütülmesini ve tüm bilgilerin aktarılmasını izler. Kontrol ünitesi, hafızadan talimatları alır, bu talimatların kodunu çözer, verilerin doğru zamanda doğru yerde olduğundan emin olur, ALU’ya hangi registerları kullanacağını ve hangi işlemi yapacağını söyler, aktif görevlere kesmeler uygular. Control unit, yürütülecek bir sonraki talimat için program-counter register’ını ve mevcut durumu izlemek için status register’ını kullanır.
4.2. Veri Yolu (Bus)
CPU ve diğer bileşenler arasında ki iletişim veri yolları üzerinden yapılır. Veriyolu, sistem içindeki birden çok alt sistemi birbirine bağlayan bir dizi telden oluşur. Paralel hatlardan oluşarak birden fazla bitin aynı anda iletimini sağlar. Aynı anda yalnızca bir aygıt (bir register, ALU, bellek veya başka bir bileşen olabilir) veri yolunu kullanabilir. Bu durum genellikle iletişim darboğazına neden olur. Veri yolunun hızı, uzunluğunun yanı sıra onu paylaşan cihazların sayısına bağlıdır. Cihazlar genellikle eylemleri başlatan ana cihaz (master) ve ana cihazdan gelen isteklere yanıt veren ikincil cihazlar (slave) olarak sınıflandırılır.
Veri yolları Şekil 4.1a’da görüldüğü gibi iki bileşeni birbirine bağlayacak şekilde noktadan noktaya veya Şekil 4.1b’de görüldüğü gibi bir dizi aygıtı birbirine bağlayan (çok noktalı) paylaşımlı bir hat olabilirler.
Bu paylaşım nedeniyle, veri yolu protokolü çok önemlidir. Şekil 4.2, veri hatları (data bus), adres hatları (address bus), kontrol hatları (control bus) ve güç hatlarından oluşan tipik bir veri yolu yapısını gösterir. Bilgiler Data Bus üzerinden bir konumdan diğerine iletilir. Kontrol bus, hangi aygıtın veri yolunu kullanma iznine sahip olduğunu ve hangi amaçla (örneğin, bellekten veya bir G / Ç aygıtından okuma veya yazma) olduğunu gösterir. Ayrıca veriyolu istekleri, kesmeler ve saat senkronizasyon sinyalleri için onayları aktarır. Adres bus, verilerin okunması veya yazılması gereken konumu (örneğin bellekte) belirtir. Güç hatları gerekli elektrik gücünü sağlar. Okuma veya yazma için adres göndermek, verileri bellekten bir register’a aktarmak (bellek okuma) ve bir registerdan belleğe veri aktarma (belleğe yazma) tipik veri yolu işlemleridir. Ek olarak, çevre birimlerinin G / Ç işlemleri için kullanılırlar. Tüm iletişim, veri yolu saatinin darbeleri arasındaki süre olan veri yolu döngüsü içinde gerçekleşir.
Taşıdıkları farklı veri türleri ve onları kullanan çeşitli aygıtlar nedeniyle veriyolları farklı türlere ayrılmıştır. İşlemci-bellek veri yolları, bant genişliğini (veri aktarımı) en üst düzeye çıkarmak ve makinedeki bellek hızını en iyi şekilde kullanmak için genellikle makinenin tasarımına özel olan kısa, yüksek hızlı veri yollarıdır. G / Ç veri yolları işlemci-bellek veri yollarından daha uzundur ve çeşitli bant genişliklerine sahip birçok cihaz türünün iletişimine izin verir. Bu veriyolları birçok farklı mimariyle uyumludur. Panel veri yolu (Şekil 4.3) makinenin kasasına yerleştirilmiş, işlemciyi, G / Ç aygıtlarını ve belleği birbirine bağlar (bu nedenle tüm aygıtlar bir veri yolunu paylaşır). Birçok bilgisayarın bir veri yolu hiyerarşisi vardır, bu nedenle aynı sistemde iki veri yoluna (örneğin bir işlemci-bellek veri yolu ve bir G / Ç veri yolu) veya daha fazlasına sahip olmak alışılmadık bir durum değildir. Yüksek performanslı sistemler genellikle üç tip veri yolunu bir arada kullanır.
Kişisel bilgisayarlar, kendi veri yolu terminolojilerine sahiptir. PC’ler CPU’yu, belleği ve diğer tüm dâhili bileşenleri bağlayan dâhili bir veriyoluna (sistem veriyolu adı verilir) sahiptir. Harici veri yolları (bazen genişletme veri yolları olarak da adlandırılır), harici aygıtları, çevre birimlerini, genişletme yuvalarını ve G / Ç bağlantı noktalarını bilgisayarın geri kalanına bağlar. Çoğu bilgisayarda ayrıca bir çevre aygıtını doğrudan CPU’ya bağlayan yerel veri yolları bulunur. Bunlar çok yüksek hızlı veri yollarıdır ve yalnızca sınırlı sayıda benzer cihazı bağlamak için kullanılabilir. Genişletme veri yolları daha yavaştır ancak birçok bağlantıya izin verirler.
Veri yolları fiziksel olarak bir tel demetinden daha fazlasıdır, özel standartlarda konnektörler, zamanlama ve sinyaller için kesin protokollere sahiptirler. Senkron veri yollarının kendi saatlari vardır ve yalnızca saat darbeleri çalışır. Her cihaz, saatin tıklanma hızına veya saat hızına göre senkronize edilir. Daha önce bahsedilen veri yolu döngü süresi, veri yolu saat hızının tersidir. Örneğin, veri yolu saat hızı 133MHz ise, veri yolu döngüsünün uzunluğu 1 / 133.000.000 veya 7.52ns’dir. İşlemler saat tarafından kontrol edildiğinden, saatteki sapmalar sorunlara neden olma potansiyeline sahiptir, bu nedenle büyük sapmaların önüne geçebilmek için veri yolunun olabildiğince kısa tutulması gerekir. Veri yolunun uzunluğu, hem veri yolu saat hızı hem de veri yolu döngü süresi üzerinde kısıtlamalar getirir. Ek olarak, veriyolu döngü süresi, bilginin veri yolunda iletilmesi için gereken süreden kısa olmamalıdır.
Eş zamansız veri yollarında, kontrol hatları işlemleri koordine eder ve zamanlamayı ayarlamak için karmaşık bir el sıkışma (handshaking) protokolü kullanılır. Örneğin, bellekten bir veriyi okumak için protokol aşağıdakilere benzer adımları gerektirir:
1. ReqREAD: Bu veri yolu kontrol hattı etkinleştirildiğinde verinin bulunduğu belleğin adresi aynı anda uygun veri yolu hatlarına yerleştirilir.
2. ReadyDATA: Bu kontrol hattı, bellek gerekli verileri veri yolunun hatlarına koyduğunda onaylanır.
3. ACK: Bu kontrol hattı, ReqREAD veya ReadyDATA’nın alındı onayını belirtmek için kullanılır.
İşlemleri koordine etmek için saat yerine bir protokol kullanmak, eş zamansız veri yollarının daha geniş bir cihaz yelpazesini destekleyebileceği anlamına gelir.
Bir veriyolu her seferinde yalnızca bir aygıt kullanabildiğinden, veri yolunu kullanabilmek için kullanacak aygıt onu rezerve etmelidir. Daha önce bahsedildiği gibi, bir veri yolunda ki master cihazlar, bilgi aktarımını başlatan cihazlardır. Slave birimler ise bir master cihaz tarafından etkinleştirilen ve veri okuma ve yazma taleplerine yanıt veren birimlerdir (böylece yalnızca master cihazlar veri yolunu rezerve edebilir). Her ikisi de veri yolunu kullanmak için özel zamanlama gereksinimleri dâhilinde çalışan bir iletişim protokolü izler. Bu duruma örnek olarak basit bir sistemdeki işlemci, veri yolu yöneticisi olmasına izin verilen tek cihaz olabilir. Bu durum karmaşadan kaçınmak açısından iyidir, ancak böyle bir durumda işlemci veri yolunu kullanan her işleme dâhil olmaktadır.
Birden fazla ana cihaza sahip sistemlerde, veri yolu tahkimi gereklidir. Veri yolu tahkim planları, belirli master cihazlara öncelik sağlarken aynı zamanda daha düşük öncelikli cihazları da dışlamamalıdır. Veri yolu tahkim planları dört kategoriye ayrılır:
1. Daisy chain tahkim: Bu yöntem de, veriyolunda sırasıyla en yüksek öncelikli aygıttan en düşük öncelikli aygıta geçen bir kontrol uygulanır (düşük öncelikli cihazların veri yoluna erişememesi mümkündür). Basit ancak adil olmayan bir yöntemdir.
2. Merkezi paralel tahkim: Her cihaz veri yoluna giden bir talep kontrol hattına sahiptir ve merkezi bir kontrolcü tarafından veriyolunu hangi cihazın kullanacağı belirlenir.
3. Kendi kendine seçimli dağıtık tahkim: Bu yöntem de cihazlar kimin en yüksek önceliğe sahip olduğunu ve kimin veri yolunu kullanacağını kendileri belirler. 4. Çarpışma algılamasını kullanan dağıtılmış tahkim: Her aygıtın veri yolu için bir talepte bulunmasına izin verilir. Veriyolu herhangi bir çarpışma tespit ederse (aynı anda birden fazla istek), aygıt başka bir istekte bulunmalıdır. (Ethernet bu tür bir tahkimi kullanır.)
4. Çakışma tespitli dağıtılmış tahkim: Her cihazın veri yolu için talepte bulunmasına izin verilir. Veri yolu herhangi bir çakışma tespit ederse (aynı anda birden çok istek), aygıt başka bir istekte bulunur. (Ethernet bu tür bir tahkimi kullanır.)
4.3. Saatler
Her bilgisayar, komutların yürütülme hızını düzenleyen dâhili bir saat içerir. Saat ayrıca sistemdeki tüm bileşenleri senkronize eder ve sistemde meydana gelen her şeyin hızını belirler. CPU, işlem yapmak için saati kullanır ve her komutu yürütmek için belirli sayıda saat darbesi gerekir. Bu nedenle, komut performansı genellikle saniye yerine saat döngüleri (saat darbeleri arasındaki zaman) ile ölçülür. Saat frekansı (bazen saat hızı olarak da adlandırılır), Bölüm 1’de gördüğümüz gibi MHz cinsinden ölçülür, 1MHz saniyede 1 milyon döngüye eşittir (yani 1 hertz saniyede 1 döngüdür). Saat döngü süresi (veya saat periyodu) basitçe saat frekansının tersidir. Örneğin, 800MHz’lik bir makinenin 1 / 800.000.000 veya 1.25ns’lik bir saat döngü süresi vardır. Bir makinenin 2ns döngü süresi varsa, o zaman frekansı 500MHz dir.
Çoğu makine eşzamanlı olduğundan düzenli aralıklarla sinyal üreten bir saati vardır. Registerlar’a saat darbesi ile yeni veriler yüklenir. Saat hızlandırıldığında teorik olarak makinenin daha hızlı çalışacağı doğrudur ancak saat döngü süresini azaltırken bazı sınırlamalarla karşılaşırız. Saat sinyali üretilip ve registerlara yeni veri yüklendiğinde, register çıkışları değişir. Bu değiştirilen çıkış değeri bilgileri, makinede ki diğer register setlerine iletilmelidir ve saat döngüsü, bu değişikliklerin bir sonraki register kümesine ulaşmasına izin verecek kadar uzun olmalıdır. Saat döngüsünün kısa olması, registerlara veri iletiminin sağlanamaması ile sonuçlanabilir. Bu, makinede tutarsız bir duruma neden olur ve bu kesinlikle kaçınılması gereken bir durumdur. Bu nedenle, minimum saat döngü süresi, her register seti çıkışlarından diğer register setlerinin girişlerine kadar maksimum yayılma gecikmesi (propagation delay) kadar büyük olmalıdır
Çoğu makine talimatı 1 veya 2 saat döngüsü gerektirir, ancak bazıları 35 veya daha fazlasını gerektirebilir. Saniyelerle döngüler arasındaki ilişki aşağıdaki formülde gösterilmiştir.
Bir makinenin mimarisi onun performansı üzerinde büyük bir etkiye sahiptir. Aynı saat hızına sahip iki makine, komutları aynı sayıda döngüde yürütmek zorunda değildir. Örneğin, eski bir Intel Pentium makinesinde bir çarpma işlemi 4 saat çevrimi gerektirirken, yeni bir i7 makinede aynı işlem 1 saat döngüsünde yapılabilir, bu da her ikisin de aynı dâhili sistem saatine sahip olmasına rağmen yeni makinenin 4 kat daha hızlı olduğu anlamına gelir. Genel olarak, çarpma işlemi toplamadan daha fazla, kayan nokta işlemleri tam sayı işlemlerinden daha fazla döngü gerektirir ve belleğe erişim, registerlara erişimden daha uzun sürer.
Genel olarak, saat teriminden bahsettiğimizde, sistem saatinden veya CPU ve diğer bileşenleri düzenleyen ana saate atıfta bulunuyoruz. Bununla birlikte, bazı veri yollarının kendi saatleri vardır. Veriyolu saatleri genellikle CPU saatlerinden daha yavaştır ve darboğaz sorunlarına neden olur.
Sistem bileşenleri, bileşenlerin işlevlerini yerine getirmesi için gereken maksimum süreyi belirten önceden tanımlanmış performans sınırlamalarına sahiptir. Üreticiler, bileşenlerinin en zorlu koşullarda bu sınırlar içinde çalışacağını garanti eder. Tüm bileşenleri seri bir şekilde birbirine bağladığımızda, bir bileşenin düzgün çalışabilmesi için kendinden önceki bileşenin görevini tamamlamış olması gerekir, bu performans sınırlarının farkında olmak, böylece bileşenleri doğru şekilde senkronize edebilmemiz önemlidir. Sistem performansını iyileştirmek için belirli sistem bileşenlerinin sınırları hız aşırtma (overclock) yöntemi ile zorlanabilir.
Birçok bileşen potansiyel aday olsa da, hız aşırtmanın en popüler bileşenlerinden biri CPU’dur. Temel fikir, CPU’yu üretici tarafından belirtilen üst sınırın üzerinde saat ve / veya veri yolu hızlarında çalıştırmaktır. Bu işlem, sistem performansını artırabilse de, sistem zamanlama hataları oluşturmamaya veya daha da kötüsü CPU’nun aşırı ısınmasına dikkat edilmelidir. Sistem veriyolu da hız aşırtılabilir, bu da veri yolu aracılığıyla iletişim kuran çeşitli bileşenlerin hız aşırtmasına neden olur. Sistem veri yolunun hız aşırtması, önemli performans iyileştirmeleri sağlayabilir, ancak veri yolunu kullanan bileşenlere de zarar verebilir veya bunların güvenilir olmayan şekilde çalışmasına neden olabilir.
4.4. Giriş / Çıkış Alt Sistemi
Giriş ve çıkış (G / Ç) cihazları, bilgisayar sistemiyle iletişim kurmamızı sağlar. G / Ç, birincil bellek ve çeşitli G / Ç çevre birimleri arasında veri aktarımıdır. Klavyeler, fareler, kart okuyucular, tarayıcılar, ses tanıma sistemleri ve dokunmatik ekranlar gibi giriş cihazları, bilgisayara veri girmemizi sağlar. Monitörler, yazıcılar, hoparlörler gibi çıktı aygıtları bilgisayardan bilgi almamızı sağlar.
Bu cihazlar doğrudan CPU’ya bağlı değildir. Bunun yerine, veri aktarımlarını yöneten bir arayüz vardır. Bu arayüz, sistem veriyolu sinyallerini bağlı cihaz için kabul edilebilir bir formata dönüştürür. CPU, giriş / çıkış registerları aracılığıyla bu harici cihazlarla iletişim kurar. Bu veri alışverişi iki şekilde gerçekleştirilir. Bellek eşlemeli G / Ç’da, arayüzdeki registerlar bilgisayarın bellek haritasında görünür ve belleğe erişim ile bir G / Ç cihazına erişim arasında fark yoktur. Bu yöntem hız açısından avantajlıdır, ancak sistemdeki bellek alanını kullanır. Komut tabanlı G / Ç’da CPU giriş ve çıkışı gerçekleştiren özel komutlara sahiptir. Bu yöntem, bellek alanını kullanmasa da, belirli G / Ç talimatları gerektirir, bu da yalnızca bu belirli talimatları uygulayabilen CPU’lar tarafından kullanılabileceği anlamına gelir. Kesmeler, giriş veya çıkışın kullanıma hazır olduğunu CPU’ya bildirmenin etkili bir yolu olduğundan, G / Ç’de çok önemli bir rol oynar.
4.5. Bellek Organizasyonu ve Adresleme
3. Bölümde basit bir bellek örneğini gördük. Ancak, belleğin nasıl yerleştirildiğini ve nasıl adreslendiğini henüz ayrıntılı olarak tartışmadık. Devam etmeden önce bu kavramları iyi anlamanız önemlidir.
Belleği bir bitler matrisi olarak düşünebiliriz. Her satır bir register’ı temsil eder ve tipik olarak makinenin word boyutuna eşdeğer bir uzunluğa sahiptir. Her registerın benzersiz bir adresi (genellikle bellek konumu olarak anılır) vardır; bellek adresleri genellikle sıfırdan başlar ve yukarı doğru ilerler. Şekil 4.4 bu kavramı göstermektedir.
Bir adres hemen hemen her zaman işaretsiz bir tamsayı ile temsil edilir. Önceki bölümlerden 4 bitin yarım bayt (nibble) ve 8 bitin bayt olduğunu hatırlayın. Normalde bellek bayt adreslenebilirdir, yani her bir baytın benzersiz bir adresi vardır. Bazı makinelerde tek bayttan daha büyük bir word boyutu olabilir. Örneğin, bir bilgisayar 32 bit wordleri işleyebilir (bir seferde 32 biti işleyebileceği anlamına gelir), ancak yine de bir bayt adreslenebilir mimari kullanabilir. Bu durumda, bir word birden fazla bayt kullandığında, en düşük adresli bayt, tüm word’un adresini belirler. Bir bilgisayarın Word adreslenebilir olması da mümkündür, bu da her word’un kendi adresi olduğu anlamına gelir (her bayt olması gerekmez), ancak mevcut makinelerin çoğu 32 bit veya daha büyük wordlere sahip olsalar bile bayt adreslenebilirdir.
8 bitten büyük boyutlarda ki wordlerde bayt adreslemesinin kullanımı kafa karıştırıcı olabilir. Şöyle bir benzetme anlamanıza yardımcı olacaktır; Bellek, apartmanlarla dolu bir sokağa benzer. Her bina (word) birden fazla daireye (bayt) sahiptir ve her dairenin kendi adresi vardır. Tüm daireler 0’dan kompleksteki toplam daire sayısına kadar sıralı olarak numaralandırılmıştır (adreslenmiştir). Binaların kendisi daireleri gruplandırmaya hizmet eder. Bilgisayarlarda ki wordlerde aynı şeyi yapar. Wordler, çeşitli talimatlarda kullanılan temel boyut birimleridir.
Bellek, rasgele erişimli bellek (RAM) yongalarından oluşturulur. Bellek genellikle U x G (uzunluk x genişlik) notasyonu kullanılarak ifade edilir. Örneğin, 4M x 16, belleğin 4M uzunluğunda (4M = 22 x 220 = 222 word’e sahiptir) ve 16 bit genişliğinde (her bir word 16 bittir) olduğu anlamına gelir. Genişlik word boyutunu temsil eder. Bu belleği adresleyebilmek için (word adresleme varsayılarak), 222 farklı öğeyi benzersiz bir şekilde tanımlayabilmemiz gerekir, bu da 222 farklı adrese ihtiyacımız olduğu anlamına gelir. Adresler işaretsiz ikili sayılar olduğundan, ikili olarak 0’dan (222 – 1) ‘e kadar saymamız gerekir. Bu kaç bit gerektirir? İkili sayı olarak 0’dan 3’e kadar saymak için (toplam 4 öğe için) 2 bite ihtiyacımız var. İkili olarak 0’dan 7’ye kadar saymak için (toplam 8 öğe için) 3 bite ihtiyacımız var. İkili olarak 0’dan 15’e kadar saymak için (toplam 16 öğe için) 4 bite ihtiyacımız var. Burada ortaya çıkan bir model görüyor musunuz? Tablo 4.1 için eksik değeri doldurabilir misiniz?
Doğru cevap 5 bittir. Genel olarak, bir bilgisayar 2N adreslenebilir bellek birimine sahipse, her baytı benzersiz şekilde adreslemek için N bit gerektirecektir.
Ana bellek genellikle bir RAM yongasından daha büyük olur ve bu yongalar istenen bellek boyutunu elde edebilmek için tek bir bellek modülünde birleştirilir. Örneğin, 32K x 16 bellek oluşturmanız gerektiğini ve sahip olduğunuz tek şeyin 2K x 8 RAM yongası olduğunu varsayalım. Şekil 4.5’te gösterildiği gibi 16 sıra ve 2 sütun yongayı birbirine bağlayabilirsiniz.
Her bir satır 2K word eder (makinenin word adreslenebilir olduğu varsayılarak), ve istenilen genişlik için aynı satırda iki yonga gerekir (). Bu bellek için adresler 15 bit olmalıdır (erişilebilecek 32K = 25 x 210 word vardır). Ancak her bir yonga çifti (her sıra) yalnızca 11 adres satırı gerektirir (her yonga çifti yalnızca 211 word tutar). Bu durumda, hangi yonga çiftinin istenen adresi tuttuğunu belirlemek için adresin en soldaki 4 bitinin kodunu çözecek bir kod çözücüye ihtiyaç duyulacaktır. Uygun yonga çifti yerleştirildikten sonra, kalan 11 bit, yonga çifti içindeki tam adresi bulmak için başka bir kod çözücüye girilecektir.
Tek bir paylaşılan bellek modülü, erişimin sıralı olmasına neden olur. Belleği birden çok bellek modülüne bölmek bu durumu hafifletmeye yardımcı olmak için kullanılabilir. Düşük sıralı serpiştirmede, adresin düşük sıralı bitleri mudülü seçmek için kullanılır; yüksek sıralı serpiştirmede, adresin yüksek sıralı bitleri kullanılır.
Daha sezgisel organizasyon olan yüksek sıralı serpiştirme, adresleri dağıtır, böylece Şekil 4.6’da 32 adresle gördüğümüz gibi, her modül ardışık adresler içerir.
Düşük sıralı aralıklı bellek, ardışık bellek wordlerini farklı bellek modüllerine yerleştirir. Şekil 4.7, 32 adresteki düşük sıralı serpiştirmeyi göstermektedir.
Düşük sıralı serpiştirme de bir modül kullanılarak yapılan bir okuma veya yazma fiilen tamamlanmadan önce başka bir modülü kullanarak bir okuma veya yazma başlatılabilir (okuma ve yazmalar üst üste gelebilir).
Ele aldığımız bellek kavramları çok önemlidir ve ilerideki bölümlerde karşımıza çıkacaktır. Odaklanılacak temel kavramlar şunlardır: (1) Bellek adresleri işaretsiz ikili değerlerdir (ancak daha kolay olduğu için bunları genellikle onaltılık değerler olarak görürüz) ve (2) Adreslenecek öğelerin sayısı, adresteki bitlerin sayısını belirler. Adres için gerekenden daha fazla bit kullanabilsek de bilgisayar tasarımında küçültme önemli bir kavram olduğundan nadiren yapılır.
4.6. Kesmeler (Interrupt)
Bilgisayar mimarisinin sağlam bir şekilde anlaşılması için gereken temel donanımlar CPU, veriyolları, kontrol ünitesi, registerlar, saatler, G/Ç ve bellektir. Ancak, bu bileşenlerin işlemciyle nasıl etkileşime girdiğini ele alan bir kavram daha var: Kesmeler, sistemdeki normal yürütme akışını değiştiren (veya kesintiye uğratan) olaylardır. Aşağıdakiler dâhil çeşitli nedenlerle bir kesinti tetiklenebilir:
• G / Ç aritmetik hatalar istediğinde (ör. Sıfıra bölme)
• Aritmetik yetersizlikler veya aşırılıklar
• Donanım arızası (ör. Bellek eşlik hatası)
• Kullanıcı tanımlı kesme noktaları (bir programda hata ayıklarken olduğu gibi)
• Geçersiz talimatlar (genellikle işaretçi sorunlarından kaynaklanır
Bu tür kesmelerin her biri için gerçekleştirilen eylemler (kesme işleme – interrupt handling olarak adlandırılır) çok farklıdır. CPU’ya bir G/Ç isteğinin bittiğini söylemek, sıfıra bölme nedeniyle bir programı sonlandırmaktan çok farklıdır. Ancak bu eylemlerin her ikisi de kesmeler tarafından ele alınır çünkü programın normal akışında bir değişiklik gerektirirler.
Kesmeler kullanıcı veya sistem tarafından başlatılabilir, maskelenebilir (devre dışı bırakılabilir veya göz ardı edilebilir) veya maskelenemez (devre dışı bırakılamayan ve onaylanması gereken yüksek öncelikli bir kesinti), talimatlar içinde veya arasında meydana gelebilir, eşzamanlı (bir program her çalıştırıldığında) veya eşzamansız (beklenmedik bir şekilde gerçekleşir) olabilir ve işlendiklerinde programın sona ermesine veya yürütülmeye devam etmesine neden olabilir.
4.7. Gerçek Bilgisayar Örnekleri
Bu bölümde Intel mimarisi ve ardından MIPS mimarisini inceleyeceğiz. Bu mimariler bazı açılardan benzer olsalar da temelde farklı felsefeler üzerine inşa edilmişlerdir. Intel mimarilerinin x86 ailesinin her üyesi bir CISC (Karmaşık Komut Seti Bilgisayarı) makinesi olarak bilinirken MIPS mimarileri RISC (Azaltılmış Komut Seti Bilgisayarı) makinelerinin örnekleridir.
CISC makineleri, karmaşık düzenlere sahip çok sayıda talimatlara sahiptir. Bu talimatların çoğu oldukça karmaşıktır ve tek bir talimat yürütüldüğünde birden çok işlemi gerçekleştirir (örneğin, tek bir assembly dili talimatı kullanarak döngüler yapılabilir). CISC makinelerinin temel sorunu, karmaşık CISC komutlarının sistemleri önemli ölçüde yavaşlatmasıdır. Tasarımcılar daha az karmaşık bir mimariye geri dönmeye ve son derece hızlı bir şekilde çalışacak küçük (ancak eksiksiz) bir komut setini geliştirdiler ve böylece RISC makineleri ortaya çıktılar.
RISC, yanlış bir isimlendirmedir. Talimatların sayısının azaldığı doğrudur. Ancak, RISC makinelerinin temel amacı, talimatları basitleştirerek daha hızlı çalışabilmektir. Her komut yalnızca bir işlem gerçekleştirir, hepsi aynı boyuttadır ve tüm aritmetik işlemler registerlar arasında gerçekleştirilir.
4.7.1. Intel Mimarileri
Intel, birçok farklı mimari üretmiştir. Intel’in ilk popüler yongası olan 16 bitlik 8086, 1979’da tanıtıldı ve IBM PC bilgisayarında kullanıldı. 8086’nın yakın bir kuzeni olan 8 bitlik 8088, birçok bilgisayarda maliyeti düşürmek için kullanıldı. 8086 CPU genel registerlar ve ALU’yu içeren yürütme birimi ile komut kuyruğunu, segment registerı ve komut işaretçisini içeren veri yolu arayüz birimi olarak iki bölüme ayrılır.
1980’de Intel, 8086’ya kayan nokta talimatları ekleyen 8087’yi tanıttı. 1982’de 80286 (16 milyon bayt adresleyebilir) ve 1985’te 80386 (4 milyar bayta kadar) dâhil olmak üzere 8086 ile esasen aynı ISA’yı kullanan birçok yeni yonga piyasaya sürüldü. 80386, genellikle IA-32 olarak adlandırılan (Intel Mimarisi için 32-bit) yonga ailesinde ilk olan 32 bitlik bir yongaydı. Intel, 16-bit 80286’dan 32-bit 80386’ya geçtiğinde, tasarımcılar bu mimarilerin geriye dönük uyumlu olmasını istediler, bu da daha az güçlü ve daha eski bir işlemci için yazılan programların daha yeni ve daha hızlı işlemcilerde çalışması gerektiği anlamına geliyordu. Örneğin, 80286’da çalışan programlar 80386’da da çalışmalıdır. Bu nedenle Intel aynı temel mimariyi korudu.
80386 ve 80486, 32 bit veri yollarına sahip 32 bit makinelerdi. 80486’ya performansı önemli ölçüde artıran yüksek hızlı bir önbellek eklendi.
Pentium serisi (Intel, numaraları ticari olarak markalayamadığı için 80486 gibi numaralardan “Pentium” a değiştirdi), 32-bit registerlara ve 64-bit veri yoluna sahip olan süper skalar işlemciler ile başladı. Bu, CPU’nun birden fazla ALU’ya sahip olduğu ve saat döngüsü başına birden fazla talimat verebileceği anlamına gelmektedir (yani, talimatları paralel olarak çalıştırabilir). Pentium II multimedya ile başa çıkmak için mimarisine MMX teknolojisini ekledi. Pentium III, 3D grafikler için artırılmış destek ekledi (kayan nokta talimatlarını kullanarak). Geçmişte Intel, işlemci serisinde klasik bir CISC mimarisi kullanmaktaydı. Daha yeni olan işlemcilerinde CISC’den RISC komutlarına tercüme edilebilen RISC çekirdeklerine sahip CISC mimarilerini kullanan birleşik bir yaklaşım kullandı. Intel, CISC’den uzaklaşıp RISC’ye doğru kayarak mevcut eğilime uyuyordu.
4.7.2. MIPS Mimarisi
MIPS CPU ailesi, sınıfının en başarılı ve esnek tasarımlarından biri olmuştur. MIPS R3000, R4000, R5000, R8000 ve R10000, MIPS Technologies’e ait birçok tescilli ticari markadan bazılarıdır. MIPS yongaları, bilgisayarlara, çeşitli bilgisayarlı oyuncaklara (Nintendo ve Sony, ürünlerinin çoğunda MIPS CPU kullanır) ek olarak gömülü sistemlerde kullanılır. Ayrıca ünlü Cisco firması MIPS CPU’ları da kullanmaktadır.
İlk MIPS ürünü MIPS I idi, ardından MIPS II’den MIPS V’e kadar devam eder. Mevcut ISA’lar MIPS32 (32 bit mimari için) ve MIPS64 (64 bit mimari için) olarak anılır. MIPS Technologies, Intel gibi ISA geliştikçe geriye dönük uyumluluğu koruma kararı almıştır. Intel gibi, ISA’nın her yeni sürümü, verimliliği artırmak ve kayan nokta değerlerini işlemek için işlemler ve talimatlar içeriyordu. Yeni MIPS32 ve MIPS64 mimarileri, VLSI teknolojisi ve CPU organizasyonunda önemli geliştirmelere sebep olmuştur. Sonuç, geleneksel mimarilere göre kayda değer maliyet ve performans avantajlarıdır.
MIPS programları yazmakla ilgileniyorsanız, ancak bir MIPS makineniz yoksa, kullanabileceğiniz birkaç simülatör vardır. En popüler olanı, MIPS R2000 / R3000 assembly dili programlarını çalıştırmak için kullanılan bir simülatör olan SPIM’dir.
Bölüm Özeti
Bu bölümde, getirme-çözme-yürütme döngüsü ile bilgisayarların gerçekte nasıl çalıştığı anlatıldıktan sonra bazı gerçek bilgisayar mimarilerini üzerinde duruldu.
CPU, bir bilgisayardaki temel bileşendir. İşlemleri ve veri hareketini sağlamaktan sorumlu bir data hattı (veri yolu ile bağlanan ALU ve registerlar) ve zamanlama sinyallerini oluşturmaktan sorumlu bir kontrol biriminden oluşur. Tüm bileşenler birlikte çalışmak için bu zamanlama sinyallerini kullanır. Giriş / çıkış alt sistemi, verilerin bilgisayara girilmesini ve kullanıcıya geri gönderilmesini sağlar.
Getirme-çözme-yürütme döngüsü, bir bilgisayarın bir programı çalıştırmak için izlediği adımlardır. Bir talimat getirilir ve sonra kodu çözülür, gerekli tüm işlenenler daha sonra getirilir ve son olarak komut yürütülür. Kesmeler, bu döngünün başlangıcında işlenir ve kesme işleyicisi tamamlandığında normal getirme-çözme-yürütme durumuna geri döner.
Kaynakça
Abel, Peter. IBM PC Assembly Language and Programming, 5th ed. Upper Saddle River, NJ: Pren- tice Hall, 2001.
Alpert, D., & Avnon, D. “Architecture of the Pentium Microprocessor,” IEEE Micro 13:3, April 1993.
Brey, B. Intel Microprocessors 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium, and Pen- tium Pro Processor, Pentium II, Pentium III, and Pentium IV: Architecture, Programming , and Interfacing, 6th ed. Englewood Cliffs, NJ: Prentice Hall, 2003.
Circello, J., Edgington, G., McCarthy, D., Gay, J., Schimke, D., Sullivan, S., Duerden, R., Hinds, C., Marquette, D., Sood, L., Crouch, A., & Chow, D. “The Superscalar Architecture of the MC68060,” IEEE Micro 15:2, April 1995.
Dandamudi, S. P. Introduction to Assembly Language Programming—From 8086 to Pentium Processors, New York: Springer Verlag, 1998.
Donovan. J. J. Systems Programming, New York: McGraw-Hill, 1972.
Dulon, C. “The IA-64 Architecture at Work,” COMPUTER 31:7, July 1998.
Gill, A., Corwin, E., & Logar, A. Assembly Language Programming for the 68000, Upper Saddle River, NJ: Prentice Hall, 1987.
Goodman, J., & Miller, K. A Programmer’s View of Computer Architecture, Philadelphia: Saun- ders College Publishing, 1993.
Horel, T., & Lauterbach, G. “UltraSPARC III: Designing Third Generation 64-Bit Performance,” IEEE Micro 19:3, May/June 1999.
Jones, W. Assembly Language for the IBM PC Family, 2nd ed. El Granada, CA: Scott Jones, Inc., 1997. Kane, G., & Heinrich, J., MIPS RISC Architecture, 2nd ed. Englewood Cliffs, NJ: Prentice Hall, 1992. Mano, Morris. Digital Design, 2nd ed., Upper Saddle River, NJ: Prentice Hall, 1991.
McLellan, E. “The Alpha AXP Architecture and 21164 Alpha Microprocessor,” IEEE Micro 15:2, April 1995.
MIPS home page: www.mips.com
Patterson, D. A., & Hennessy, J. L. Computer Organization and Design: The Hardware/Software Interface, 2nd ed. San Mateo, CA: Morgan Kaufmann, 1997.
Samaras, W. A., Cherukuri, N., & Venkataraman, S. “The IA-64 Itanium Processor Cartridge,” IEEE Micro 21:1, Jan/Feb 2001.
Comments