Bilgisayar Organizasyonu ve Temel İşlemci Yapısı

Bilgisayar Organizasyonu ve Temel İşlemci Yapısı

Sayısal lojikten yazmaç aktarımlarına, mikroişlemlerden komut çevrimine, mikroprogramlı denetimden CPU organizasyonuna uzanan bilgisayar organizasyonu ders notları.

Bu metin, bilgisayar organizasyonu dersinde 2013-2015 döneminde tuttuğum notların genişletilmiş sürümüdür. İlk notlardaki yazmaç aktarımı, mikroişlem ve temel bilgisayar modeli sırasını korudum; daha sonraki gözden geçirmelerde kavramları güncel işlemci terminolojisiyle karşılaştırarak belirgin hataları düzelttim. Eğitim amaçlı temel bilgisayar modeli ile gerçek bir modern mikro mimari aynı şey değildir; metin boyunca bu ayrımı özellikle korudum.

Ünite 1: Sayısal Lojik Devrelerin Temelleri

Sayısal bilgisayar

Sayısal bilgisayar, bilgiyi ayrık sembollerle temsil eden ve bu bilgi üzerinde program tarafından belirlenen işlemleri gerçekleştiren bir sistemdir. Güncel bilgisayarların temel fiziksel gösterimi ikili düzene dayanır.

İki temel mantık değeri:

0
1

olarak gösterilir.

Bu değerler doğrudan belirli bir gerilime eşit değildir. Fiziksel devrede belirli gerilim aralıkları mantıksal 0 ve mantıksal 1 olarak yorumlanır.

Bir bilgisayarın temel işlevsel yapısı şu biçimde özetlenebilir:

Giriş
  ↓
İşlemci ↔ Bellek
  ↓
Çıkış

İşlemci içinde başlıca:

  • aritmetik ve lojik birim,
  • yazmaçlar,
  • kontrol birimi

bulunur.

Ana bellek hem program komutlarını hem de veriyi saklayabilir. Bu yapı klasik saklı program bilgisayarı düşüncesinin temelidir.

Bilgisayar mimarisi ve organizasyonu

Bilgisayar mimarisi ve bilgisayar organizasyonu yakın fakat aynı kavram değildir.

Bilgisayar mimarisi, yazılım tarafından görülebilen programlama modelini kapsar. Örneğin:

  • komut kümesi,
  • yazmaçlar,
  • veri tipleri,
  • komut biçimleri,
  • adresleme biçimleri,
  • bellek adres uzayı.

Bilgisayar organizasyonu ise bu mimarinin donanımda nasıl gerçekleştirildiğini inceler. Örneğin:

  • veri yolları,
  • ALU,
  • kontrol işaretleri,
  • yazmaç bağlantıları,
  • bellek arabirimi,
  • komut yürütme mikroişlemleri.

Aynı komut kümesi farklı mikro mimarilerle gerçekleştirilebilir. Bu ayrım modern işlemcilerde daha da belirgindir.

Lojik kapılar

Sayısal devrelerin temel işlevsel yapı taşları lojik kapılardır.

Temel işlemler:

AND
OR
NOT
XOR
NAND
NOR
XNOR

İki girişli AND:

Y = A B

yalnız her iki giriş de 1 olduğunda 1 üretir.

OR:

Y = A + B

en az bir giriş 1 olduğunda 1 üretir.

NOT:

Y = A'

girişi tersler.

XOR:

Y = A XOR B

girişler farklı olduğunda 1 üretir.

Doğruluk tablosu

Bir lojik işlevin bütün giriş kombinasyonlarına karşı ürettiği çıkışlar doğruluk tablosuyla gösterilir.

İki giriş için:

| A | B | AND | OR | XOR | | --- | --- | --- | --- | --- | | 0 | 0 | 0 | 0 | 0 | | 0 | 1 | 0 | 1 | 1 | | 1 | 0 | 0 | 1 | 1 | | 1 | 1 | 1 | 1 | 0 |

n ikili giriş için:

2^n

farklı giriş birleşimi bulunur.

Boolean cebri

Boolean cebri ikili değişkenler üzerinde tanımlanan cebirdir.

Temel kurallardan bazıları:

A + 0 = A
A + 1 = 1
A A = A
A 0 = 0
A + A = A
A + A' = 1
A A' = 0
(A')' = A

Yutma:

A + AB = A
A(A + B) = A

Dağılma:

A(B + C) = AB + AC

ve Boolean cebrine özgü diğer dağılım:

A + BC = (A + B)(A + C)

şeklindedir.

De Morgan kuralları

De Morgan kuralları:

(AB)' = A' + B'
(A + B)' = A'B'

biçimindedir.

Bu kurallar özellikle NAND ve NOR tabanlı gerçekleştirimlerde önemlidir.

NAND ve NOR evrensel kapılardır. Yalnız NAND veya yalnız NOR kullanılarak herhangi bir Boolean işlev gerçekleştirilebilir.

Karnaugh haritası

Karnaugh haritası az sayıda değişken içeren Boolean işlevlerini görsel komşulukla sadeleştirmek için kullanılır.

n değişkenli bir işlev için:

2^n

hücre bulunur.

Hücrelerin sıralaması Gray kod düzenindedir:

00 01 11 10

Komşu hücreler yalnız bir değişkende farklıdır.

Gruplar:

1, 2, 4, 8, ...

gibi ikinin kuvveti büyüklüğünde seçilir.

Amaç mümkün olduğunca büyük gruplar kurarak değişen değişkenleri ortadan kaldırmaktır.

Karnaugh haritası küçük işlevler için güçlüdür. Daha büyük sayıda değişkende Quine-McCluskey, Espresso benzeri algoritmalar veya modern sentez araçları kullanılır.

Birleşimsel devreler

Birleşimsel, diğer adıyla kombinasyonel, devrede çıkış yalnız o andaki girişlere bağlıdır:

Y(t) = F(X(t))

Devrede geçmiş durumu saklayan bellek elemanı bulunmaz.

Örnekler:

  • toplayıcı,
  • kod çözücü,
  • kodlayıcı,
  • çoklayıcı,
  • karşılaştırıcı.

Yarım toplayıcı

İki biti toplar.

Girişler:

A, B

Toplam:

S = A XOR B

Elde:

C = AB

Tam toplayıcı

Tam toplayıcı iki bit ile önceki basamaktan gelen eldeyi toplar.

Girişler:

A, B, Cin

Toplam:

S = A XOR B XOR Cin

Elde:

Cout = AB + Cin(A XOR B)

n bitlik basit toplayıcı, tam toplayıcıların zincirlenmesiyle oluşturulabilir. Elde bir basamaktan diğerine yayıldığı için bu yapıya ripple-carry adder denir.

Flip-floplar

Flip-flop bir bitlik durum saklayan devredir.

Temel türler:

  • SR,
  • JK,
  • D,
  • T.

Modern senkron tasarımda D flip-flop özellikle yaygındır.

D flip-flop için saat kenarında:

Q(next) = D

olur.

JK flip-flop:

| J | K | Sonraki durum | | --- | --- | --- | | 0 | 0 | Koruma | | 0 | 1 | 0 | | 1 | 0 | 1 | | 1 | 1 | Tersleme |

T flip-flop:

T = 0 -> koru
T = 1 -> tersle

davranışına sahiptir.

Latch ve flip-flop ayrımı

Latch genellikle seviye duyarlıdır. Enable etkin olduğu sürece giriş değişikliklerine tepki verebilir.

Flip-flop ise çoğunlukla saat işaretinin belirli kenarında durum değiştirir.

Bu ayrım zamanlama analizinde önemlidir.

Kenar tetikleme

Pozitif kenar tetiklemeli flip-flop:

0 -> 1

saat geçişinde giriş değerini örnekler.

Negatif kenar tetiklemeli flip-flop:

1 -> 0

geçişinde örnekleme yapar.

Gerçek devrede ayrıca:

  • setup time,
  • hold time,
  • clock-to-Q gecikmesi

gibi zamanlama sınırları bulunur.

Ardışıl devreler

Ardışıl devrede çıkış yalnız anlık girişe değil, önceki duruma da bağlıdır:

Q(next) = F(Q, X)
Y = G(Q, X)

Bu yapı bir durum makinesidir.

Temel tasarım akışı:

Problem
  ↓
Durumlar
  ↓
Durum diyagramı
  ↓
Durum tablosu
  ↓
Flip-flop seçimi
  ↓
Uyarma denklemleri
  ↓
Boolean sadeleştirme
  ↓
Lojik devre

Ünite 2: Sayısal Bileşenler

Tümdevreler

Tümdevre, çok sayıda elektronik elemanın tek yarıiletken yapı üzerinde gerçekleştirilmesidir.

Tarihsel bütünleşme sınıflandırmaları:

  • SSI,
  • MSI,
  • LSI,
  • VLSI

olarak kullanılmıştır.

Bu terimler sayısal tasarım tarihini anlamak için yararlıdır. Güncel işlemciler ve bellekler VLSI ölçeğinin çok ötesinde transistor sayıları içerdiğinden eski sayısal sınırlar artık modern teknoloji sınıflandırması olarak kullanılmaz.

Lojik aileleri

Tarihsel ve temel lojik aileler arasında:

  • TTL,
  • ECL,
  • NMOS,
  • PMOS,
  • CMOS

bulunur.

TTL bipolar transistorlara dayanır.

ECL transistorları doyuma sokmadan yüksek hız hedefleyen tarihsel bir lojik ailesidir.

MOS ailesi alan etkili transistorlara dayanır.

CMOS, N-kanal ve P-kanal MOSFET'leri tamamlayıcı biçimde kullanır ve modern sayısal tümdevrelerin temel teknolojisidir.

CMOS'un dinamik güç bileşeni yaklaşık olarak:

Pdynamic ≈ alpha C V^2 f

ilişkisiyle açıklanabilir.

Burada:

  • alpha: anahtarlama etkinliği,
  • C: etkin anahtarlanan kapasite,
  • V: besleme gerilimi,
  • f: frekanstır.

Kod çözücü

Decoder, n bitlik giriş kodunu en fazla:

2^n

ayrı çıkış hattından birine dönüştürür.

Örneğin 2-to-4 decoder:

00 -> Y0
01 -> Y1
10 -> Y2
11 -> Y3

seçimini gerçekleştirir.

Decoder:

  • adres çözümleme,
  • komut kodu çözme,
  • aygıt seçme,
  • kontrol işareti üretme

işlemlerinde kullanılır.

Kodlayıcı

Encoder, decoder'ın ters yönlü işlevini gerçekleştirir.

2^n girişten aktif olan hattı n bitlik kod olarak üretir.

Basit encoder aynı anda yalnız bir girişin aktif olduğunu varsayar.

Birden fazla giriş etkin olabiliyorsa öncelikli kodlayıcı kullanılır.

Çoklayıcı

Multiplexer, birçok girişten birini seçim hatlarına göre çıkışa aktarır.

2^n veri girişi için n seçim biti gerekir.

2-to-1 MUX:

Y = S'D0 + SD1

şeklinde ifade edilir.

MUX yalnız veri seçmek için değil, Boolean işlevlerin gerçekleştirilmesinde ve ortak veri yolu yapılarında da kullanılabilir.

Yazmaç

Yazmaç, birden fazla flip-flopun ortak kontrol altında bir araya getirilmesiyle oluşturulan küçük ve hızlı saklama birimidir.

n bitlik yazmaç:

n bit

bilgi tutar.

Yazmaçların tipik kontrol işlevleri:

  • yükle,
  • temizle,
  • artır,
  • azalt,
  • kaydır.

İşlemci içindeki yazmaçlar ana belleğe göre çok daha düşük erişim gecikmesine sahiptir.

Kaydırmalı yazmaç

Shift register, saklanan bitleri her saat olayında sağa veya sola kaydırabilir.

Örnek:

1011
↓ sağa kaydır
0101

Yeni giren bitin değeri kaydırma türüne göre belirlenir.

Kullanım alanları:

  • seri-paralel dönüşüm,
  • paralel-seri dönüşüm,
  • bit kaydırma,
  • gecikme,
  • bazı aritmetik işlemler.

İki yönlü kaydırmalı yazmaç

İki yönlü kaydırmalı yazmaç:

  • sola kaydırma,
  • sağa kaydırma,
  • paralel yükleme,
  • durumu koruma

işlevlerini seçim hatlarıyla gerçekleştirebilir.

Bu tür yapının her bitinde bir MUX kullanılarak sonraki girişin hangi kaynaktan alınacağı seçilebilir.

İkili sayıcı

İkili sayıcı belirlenmiş durum dizisini saat darbeleriyle izler.

Üç bitlik sayıcı:

000
001
010
011
100
101
110
111
000
...

şeklinde çalışır.

n bitlik tam ikili sayıcı:

2^n

duruma sahiptir.

Eşzamanlı ve dalgalı sayıcı

Dalgalı sayıcıda bir flip-flopun çıkışı bir sonrakinin saatini tetikleyebilir. Gecikmeler basamaklar boyunca yayılır.

Eşzamanlı sayıcıda flip-floplar ortak saat işaretini kullanır. Sonraki durum lojik denklemlerle birlikte hesaplanır.

Yüksek hızlı tasarımda eşzamanlı yaklaşım daha uygundur.

Ana bellek

Ana bellek çok sayıda adreslenebilir bellek sözcüğünden oluşur.

Genel gösterim:

M[address]

şeklindedir.

Bir bellek biriminin temel işaretleri:

  • adres,
  • veri,
  • okuma,
  • yazma.

RAM

RAM, seçilen konumdaki veriye adres üzerinden erişilebilen ve normal kullanımda okunup yazılabilen bellektir.

İki temel yarıiletken RAM türü:

SRAM: Hücre başına daha fazla transistor kullanır, yenileme gerektirmez, düşük gecikmelidir. Önbelleklerde yaygındır.

DRAM: Daha yoğun saklama sağlar ancak hücrelerin periyodik olarak yenilenmesi gerekir. Ana belleklerde yaygındır.

"Random access" ifadesi adreslenen herhangi bir konuma benzer erişim modeliyle ulaşılabilmesini ifade eder.

ROM ve kalıcı bellek

ROM ailesi tarihsel olarak:

  • mask ROM,
  • PROM,
  • EPROM,
  • EEPROM

biçimlerinde ele alınır.

Flash bellek elektriksel olarak silinip yeniden programlanabilen kalıcı yarıiletken bellek ailesidir.

Günümüzde firmware ve kalıcı depolama uygulamalarında klasik ROM sınıflandırmalarının yanında flash tabanlı çözümler yaygındır.

Ünite 3: Veri Gösterimi

Sayı sistemleri

r tabanlı konumsal sayı sisteminde:

(dn ... d1 d0 . d-1 d-2 ...)r

sayısının değeri:

sum di r^i

ile bulunur.

Bilgisayar sistemlerinde en önemli tabanlar:

  • 2,
  • 8,
  • 10,
  • 16.

İkili sistem

İkili sistem:

0, 1

rakamlarını kullanır.

Örnek:

101101_2

değeri:

1x2^5 + 0x2^4 + 1x2^3 + 1x2^2 + 0x2 + 1
= 45_10

olur.

Sekizli ve onaltılı gösterim

Bir sekizli basamak üç bite karşılık gelir:

7_8 = 111_2

Bir onaltılı basamak dört bite karşılık gelir:

F_16 = 1111_2

Bu nedenle uzun ikili diziler daha kısa olarak:

1011 1100 0110_2
=
BC6_16

biçiminde yazılabilir.

Kesirli sayı dönüşümü

İkili kesirde basamak ağırlıkları:

2^-1, 2^-2, 2^-3, ...

şeklindedir.

Örnek:

0.101_2
=
1/2 + 0/4 + 1/8
=
0.625_10

Onluk kesri ikiliye dönüştürmek için kesir kısmı tekrar tekrar 2 ile çarpılabilir. Her adımda oluşan tam kısım sıradaki biti verir.

Bazı onluk kesirlerin sonlu ikili gösterimi yoktur.

ASCII ve karakter kodları

ASCII 7 bitlik bir karakter kodlamasıdır ve 128 kod noktası tanımlar.

Modern metin sistemlerinde Unicode temel standarttır. Unicode kod noktaları:

  • UTF-8,
  • UTF-16,
  • UTF-32

gibi kodlama biçimleriyle saklanabilir.

UTF-8 ilk 128 karakterde ASCII ile uyumludur.

BCD

Binary Coded Decimal, her onluk rakamı ayrı ikili kodla temsil eder.

8421 BCD'de:

59_10
=
0101 1001_BCD

olur.

Bu değer saf ikili:

111011_2

gösteriminden farklıdır.

BCD onluk basamakların tam korunmasının önemli olduğu belirli uygulamalarda kullanılır.

Tümleyenler

Tabanı r olan sistemde iki önemli tümleyen vardır:

(r - 1) tümleyeni
r tümleyeni

İkili sistemde bunlar:

1'in tümleyeni
2'nin tümleyeni

olarak adlandırılır.

Bir bit dizisinin 1'in tümleyeni bütün bitlerin terslenmesiyle bulunur.

2'nin tümleyeni:

1'in tümleyeni + 1

şeklindedir.

İki'nin tümleyeni

Modern işlemcilerde signed integer gösteriminde standart yaklaşım iki'nin tümleyenidir.

n bitlik signed aralık:

-2^(n-1) ... 2^(n-1)-1

olur.

8 bit için:

-128 ... +127

Çıkarma işlemi

İki'nin tümleyeniyle:

A - B

işlemi:

A + two_complement(B)

biçimine dönüştürülebilir.

Böylece toplama donanımı çıkarma için de kullanılabilir.

Taşma

Signed aritmetikte carry ile overflow aynı kavram değildir.

İki'nin tümleyeninde aynı işaretli iki sayının toplamı karşı işaretli sonuç veriyorsa signed overflow oluşur.

Örnek 8 bit:

01111111   127
00000001     1
--------
10000000  -128 olarak yorumlanır

Matematiksel sonuç 128 8 bit signed aralık dışında olduğundan overflow vardır.

Sabit nokta gösterimi

Fixed-point gösterimde ikili noktanın konumu önceden belirlenmiştir.

Örneğin Qm.n biçiminde:

  • m: tam kısım,
  • n: kesir bitleri

için kullanılabilir.

Sabit nokta:

  • öngörülebilir gecikme,
  • düşük donanım maliyeti,
  • kontrollü hassasiyet

gereken gömülü ve DSP uygulamalarında önemlidir.

Kayan nokta gösterimi

Kayan nokta büyük dinamik aralığı daha az bit ile temsil eder.

IEEE 754 binary32:

1 bit  işaret
8 bit  üs
23 bit kesir

binary64:

1 bit  işaret
11 bit üs
52 bit kesir

kullanır.

Normal sayı:

(-1)^s x 1.f x 2^(e-bias)

biçiminde yorumlanır.

IEEE 754 ayrıca:

  • +0,
  • -0,
  • +sonsuz,
  • -sonsuz,
  • NaN,
  • subnormal

değerlerini tanımlar.

Kayan nokta aritmetiği reel sayı aritmetiğinin tam karşılığı değildir. Yuvarlama hataları normaldir.

Eşlik biti

Parity, tek bitlik basit hata sezme tekniğidir.

Çift eşlikte toplam 1 sayısı çift tutulur.

Tek eşlikte toplam 1 sayısı tek tutulur.

Eşlik biti:

  • tek sayıda bit hatasını sezebilir,
  • hatanın yerini belirleyemez,
  • genel olarak hatayı düzeltemez,
  • çift sayıda bazı bit hatalarını sezemez.

Bu nedenle parity bir hata düzeltme kodu değil, basit hata sezme mekanizmasıdır.

Hata düzeltme yaklaşımı

Daha güçlü kodlarda yalnız hata sezme değil hata konumunu belirleme ve düzeltme de mümkündür.

Hamming kodlarının temel düşüncesi veri bitlerine birden çok bağımsız eşlik denetimi eklemektir.

Kodun minimum Hamming uzaklığı hata sezme ve düzeltme gücünü belirler.

Ünite 4: Yazmaç Aktarımları ve Mikroişlemler

Sayısal bilgisayarın iç yapısı

Bir işlemcinin veri yolu açısından temel bileşenleri:

Yazmaçlar
   ↓
Veri yolları
   ↓
ALU
   ↓
Yazmaçlar

şeklindedir.

Kontrol birimi bu yapıların:

  • hangi kaynağı okuyacağını,
  • hangi işlemi yapacağını,
  • sonucun nereye yazılacağını

belirleyen işaretleri üretir.

Yazmaç aktarım dili

Register Transfer Language, Türkçede yazmaç aktarım dili olarak kullanılabilir.

Bir aktarım:

R2 <- R3

ifadesiyle gösterilir.

Anlamı:

R3 içeriğini R2'ye aktar.

Koşullu aktarım:

C: R2 <- R3

şeklinde yazılabilir.

Anlamı:

if C = 1:
    R2 <- R3

Aynı saat olayında yapılabilen bağımsız işlemler:

D: R2 <- R3, R4 <- R5

biçiminde gösterilebilir.

Mikroişlem

Bir veya birkaç yazmaçtaki bilgi üzerinde tek saat adımında gerçekleştirilebilen temel işleme mikroişlem denir.

Ana gruplar:

  • yazmaç aktarımı,
  • aritmetik mikroişlem,
  • lojik mikroişlem,
  • kaydırma mikroişlemi,
  • bellek mikroişlemi.

Veri yolu

Birden çok birimin ortak iletim hatlarını paylaşması veri yolu yapısını oluşturur.

Veri yolu:

  • veri,
  • adres,
  • kontrol

işaretlerini taşıyan farklı hat gruplarını içerebilir.

Yazmaçlar arasında ortak veri yolu oluşturmak için:

  • MUX,
  • üç durumlu tampon,
  • doğrudan çok portlu bağlantı

gibi yöntemler kullanılabilir.

MUX tabanlı ortak veri yolu

n adet m bitlik kaynaktan biri seçilecekse her bit konumu için MUX kullanılabilir.

Seçim hatları bütün bitler için ortaktır.

Örneğin:

S = 011

belirli bir yazmacı ortak veri yoluna bağlayabilir.

Hedef yazmacın yükleme işareti etkinleştirildiğinde:

Rdest <- bus

aktarımı tamamlanır.

Üç durumlu tampon

Üç durumlu çıkış:

0
1
Z

değerlerinden birini alabilir.

Z, yüksek empedans durumudur.

Ortak hatta yalnız bir sürücünün aktif olması sağlanırsa birden çok kaynak aynı fiziksel bağlantıyı paylaşabilir.

Çip içi modern tasarım araçlarında büyük iç üç durumlu ağlar yerine MUX tabanlı yapılar yaygındır. Üç durumlu sürücüler özellikle fiziksel G/Ç arabirimlerinde önemini korur.

Bellek okuma

Adres yazmacı AR, veri yazmacı DR olsun.

Okuma:

DR <- M[AR]

şeklindedir.

Burada AR okunacak adresi, DR okunan veriyi temsil eder.

Bellek yazma

Yazma:

M[AR] <- DR

şeklinde ifade edilebilir.

Gerçek sistemde bellek arabirimi ayrıca:

  • okuma/yazma işareti,
  • byte enable,
  • hazır/bekle,
  • hata

gibi ek protokol işaretleri içerebilir.

Aritmetik mikroişlemler

Temel aritmetik mikroişlemler:

R3 <- R1 + R2
R1 <- R1 + 1
R1 <- R1 - 1
R1 <- R1 - R2

gibi işlemlerdir.

Toplama tam toplayıcı hücrelerinin paralel bağlanmasıyla gerçekleştirilebilir.

Toplama ve çıkarma birimi

Çıkarma:

A - B
=
A + B' + 1

olduğundan aynı toplayıcı donanımı kullanılabilir.

Kontrol biti SUB ile:

Y = B XOR SUB
Cin = SUB

seçilirse:

SUB = 0 -> A + B
SUB = 1 -> A + B' + 1

elde edilir.

Artırma ve azaltma

Artırma:

R <- R + 1

azaltma:

R <- R - 1

işlemleridir.

Program sayacı, yığın işaretçisi ve döngü sayaçları için sık kullanılır.

Lojik mikroişlemler

Bit düzeyinde:

R <- A AND B
R <- A OR B
R <- A XOR B
R <- NOT A

işlemleri yapılabilir.

Her bit konumu bağımsız işlendiği için n bitlik lojik birim n adet tek bitlik hücrenin paralel çalışmasıyla oluşturulabilir.

Bit maskeleme

Belirli bitleri temizlemek:

R <- R AND mask

Belirli bitleri kurmak:

R <- R OR mask

Belirli bitleri değiştirmek:

R <- R XOR mask

ile yapılabilir.

Bu işlemler modern sistem programlamada da temel öneme sahiptir.

Kaydırma mikroişlemleri

Temel kaydırmalar:

  • lojik sola,
  • lojik sağa,
  • aritmetik sağa,
  • döndürme.

Lojik sağa kaydırmada soldan 0 girer.

Lojik sola kaydırmada sağdan 0 girer.

Signed iki'nin tümleyeni sayıda aritmetik sağa kaydırma işaret bitini korumaya çalışır:

11010000
>> aritmetik
11101000

Dil ve ISA düzeyinde kaydırma davranışının kesin tanımı ilgili standarda göre değerlendirilmelidir.

Döndürme

Rotate işleminde çıkan bit diğer uçtan tekrar girer:

10110001
ROR 1
11011000

Carry üzerinden döndürme bazı tarihsel ve güncel ISA'larda ayrıca bulunabilir.

ALU

Arithmetic Logic Unit, aritmetik ve lojik işlemleri ortak bir donanımda gerçekleştirir.

Tipik girişler:

A
B
operation
carry-in

Tipik çıkışlar:

result
carry
zero
sign
overflow

ALU'nun ürettiği durum bilgileri program durum yazmacında veya bayrak yazmacında tutulabilir.

ALU ile kaydırıcı

Bir veri yolu:

Yazmaçlar
   ↓
ALU
   ↓
Kaydırıcı
   ↓
Hedef yazmaç

biçiminde düzenlenebilir.

Bazı mikro mimarilerde ALU ve barrel shifter paralel veya birleşik veri yolu içinde yer alabilir.

Ünite 5: Temel Bilgisayar Yapısı ve Komutların Yürütülmesi

Eğitim amaçlı temel bilgisayar

Bu derste kullanılan temel bilgisayar, işlemci organizasyonunun anlaşılması için tasarlanmış sade bir akümülatör makinesidir.

Bu model güncel x86, Arm veya RISC-V işlemcisinin birebir yapısı değildir. Ancak:

  • komut getirme,
  • komut çözme,
  • efektif adres bulma,
  • ALU işlemi,
  • bellek erişimi,
  • dallanma,
  • kesme,
  • kontrol işareti üretimi

kavramlarını açık biçimde gösterir.

Temel komut biçimi

16 bitlik eğitim modelinde komut:

I | opcode | address
1     3        12 bit

biçiminde düşünülebilir.

12 bit adres:

2^12 = 4096

bellek sözcüğünü adresleyebilir.

I biti bellek referanslı komutlarda:

0 -> doğrudan
1 -> dolaylı

adresleme seçimi için kullanılır.

Yazmaçlar

Temel bilgisayarın başlıca yazmaçları:

| Yazmaç | Bit | İşlev | | --- | ---: | --- | | AR | 12 | Bellek adresi | | PC | 12 | Sonraki komut adresi | | DR | 16 | Bellekten okunan/yazılan veri | | AC | 16 | Akümülatör | | IR | 16 | Komut yazmacı | | TR | 16 | Geçici veri | | INPR | 8 | Giriş verisi | | OUTR | 8 | Çıkış verisi |

Ek durum ve kontrol bitleri de bulunabilir.

Program sayacı

Program sayacı:

PC

bir sonraki getirilecek komutun adresini tutar.

Komut getirildikten sonra tipik olarak:

PC <- PC + 1

yapılır.

Dallanma, alt program veya kesme sırasında PC başka bir adresle yüklenebilir.

Komut yazmacı

Instruction Register:

IR

o anda çözümlenen ve yürütülen komutu tutar.

Kontrol birimi:

  • opcode,
  • adres alanı,
  • adresleme biti

gibi alanları IR'den alır.

Akümülatör

Akümülatör tabanlı yapıda birçok aritmetik ve lojik işlem bir operandı AC'de tutar:

AC <- AC + M[EA]

Bu yaklaşım donanımı sadeleştirir ancak güncel genel amaçlı yazmaç organizasyonlarına göre daha fazla veri hareketi gerektirebilir.

Doğrudan adresleme

Komutun adres alanı efektif adresi doğrudan verir:

EA = address

Örnek:

LDA X

anlamı:

AC <- M[X]

Dolaylı adresleme

Komutun adres alanı operandın adresinin bulunduğu yeri gösterir:

EA = M[address]

Sonra:

operand = M[EA]

alınır.

Bir ek bellek erişimi gerektirir.

Komut getirme çevrimi

Temel mikroişlemler:

T0: AR <- PC
T1: IR <- M[AR], PC <- PC + 1
T2: opcode <- decode(IR), AR <- IR(address), I <- IR(I)

Bu üç adım:

  • komut adresini belleğe sunar,
  • komutu getirir,
  • program sayacını ilerletir,
  • komut alanlarını çözümler.

Modern işlemcilerde fetch, decode ve execution birçok komut için örtüşebilir. Ancak bu temel sıra kavramları açıklamak için geçerlidir.

Dolaylı adres fazı

Bellek referanslı komutta dolaylı adresleme seçilmişse:

AR <- M[AR]

ile efektif adres alınır.

Bundan sonra komutun yürütme aşaması başlar.

Bellek referanslı komutlar

Temel eğitim makinesinde tipik komutlar:

AND
ADD
LDA
STA
BUN
BSA
ISZ

olarak ele alınır.

AND

DR <- M[AR]
AC <- AC AND DR

işlemlerini gerçekleştirir.

ADD

DR <- M[AR]
AC <- AC + DR
E <- carry

işlemlerini gerçekleştirir.

LDA

DR <- M[AR]
AC <- DR

STA

M[AR] <- AC

BUN

Koşulsuz dallanma:

PC <- AR

BSA

Branch and Save Return Address, alt program çağrısı için kullanılır.

Temel fikir:

M[AR] <- PC
AR <- AR + 1
PC <- AR

Dönüş adresi bellekte saklanır ve yürütme alt programın ilk komutundan devam eder.

Modern ISA'larda dönüş adresi çoğunlukla yazmaç veya yığın kullanılarak korunur.

ISZ

Increment and Skip if Zero:

DR <- M[AR]
DR <- DR + 1
M[AR] <- DR

if DR == 0:
    PC <- PC + 1

Bu komut basit döngü yapılarında kullanılabilir.

Yazmaç referanslı komutlar

Opcode alanının özel değeri, adres alanındaki bitlerin yazmaç üzerinde doğrudan işlem seçmesini sağlayabilir.

Klasik eğitim modelindeki örnekler:

CLA  AC'yi temizle
CLE  E bitini temizle
CMA  AC'yi tümle
CME  E bitini tümle
CIR  sağa döndür
CIL  sola döndür
INC  AC'yi artır
SPA  AC pozitifse atla
SNA  AC negatifse atla
SZA  AC sıfırsa atla
SZE  E sıfırsa atla
HLT  dur

Bu komutlar güncel işlemci komutlarıyla birebir eşleştirilmemelidir. Ama veri yolu ve kontrol mantığını öğretmek için uygundur.

Giriş çıkış komutları

Temel modelde tipik:

INP
OUT
SKI
SKO
ION
IOF

komutları bulunur.

INP giriş yazmacından veri alır.

OUT akümülatörün düşük bitlerini çıkış yazmacına aktarabilir.

ION ve IOF kesme etkinliğini denetler.

Komut çevrimi

Genel olarak:

Getir
  ↓
Çöz
  ↓
Efektif adresi belirle
  ↓
Yürüt
  ↓
Kesme denetimi
  ↓
Sonraki komut

çevrimi kullanılır.

Güncel işlemcilerde bu aşamalar pipeline, out-of-order execution, speculative execution ve önbellek hiyerarşileri nedeniyle fiziksel olarak çok daha karmaşıktır. ISA açısından görülen sonuç yine komutların tanımlanan mimari etkiyi üretmesidir.

Zamanlama ve kontrol

Temel bilgisayarda zaman adımları:

T0, T1, T2, ...

biçiminde oluşturulabilir.

Bir sıra sayacı ve decoder, her saat aralığı için farklı zaman işareti üretebilir.

Kontrol işlevi kabaca:

control =
f(opcode, I, flags, timing)

şeklinde düşünülebilir.

Donanımsal kontrol

Hardwired control:

  • decoder,
  • kapılar,
  • flip-floplar,
  • durum mantığı

ile doğrudan gerçekleştirilir.

Avantajları:

  • düşük kontrol gecikmesi,
  • özel optimizasyon olanağı.

Dezavantajı:

  • karmaşık tasarımın değiştirilmesinin zor olmasıdır.

Kesme

Kesme, normal komut akışının bir olay nedeniyle geçici olarak başka bir işleyiciye yönlendirilmesidir.

Temel süreç:

Normal program
    ↓
Kesme isteği
    ↓
Mimari durumun gerekli kısmını koru
    ↓
Kesme servis rutinine git
    ↓
Olayı işle
    ↓
Durumu geri yükle
    ↓
Programa dön

Kesme ile polling arasındaki temel fark, işlemcinin aygıt durumunu sürekli sorgulamak zorunda olmamasıdır.

Kesme bağlamı

Modern sistemlerde kesme sırasında hangi durumun otomatik, hangisinin yazılımla saklanacağı ISA ve işletim sistemi sözleşmesine bağlıdır.

Korunabilecek durumlar:

  • PC,
  • durum yazmacı,
  • genel amaçlı yazmaçlar,
  • hata kodları.

Kesme, exception ve trap terimlerinin kesin anlamı mimariye göre değişebilir.

Ünite 6: Temel Bilgisayarda Assembly Programlama

Makine dili

Makine dili işlemcinin doğrudan çözümleyebildiği komut bit dizileridir.

Örneğin komut:

opcode + adresleme bilgisi + operand/adres alanı

şeklinde kodlanabilir.

Makine kodu işlemci mimarisine bağımlıdır.

Assembly dili

Assembly dili makine komutlarına simgesel adlar verir.

Örneğin:

LDA X
ADD Y
STA Z

ifadeleri doğrudan bit dizilerine göre daha okunabilirdir.

Assembly dili ile makine dili arasında çoğunlukla yakın ilişki vardır ancak her assembly satırının her mimaride tam olarak tek makine komutuna karşılık gelmesi zorunlu değildir. Makrolar ve pseudo-instruction'lar bu ilişkiyi değiştirebilir.

Assembler

Assembly, programlama dilidir.

Assembler, assembly kaynak kodunu makine koduna dönüştüren araçtır.

Girdi:

kaynak program

Çıktı:

nesne kodu

olabilir.

Bu iki terim birbirine karıştırılmamalıdır.

Assembly satırı

Basit eğitim assembler'ında satır:

etiket   komut/ifade   operand   açıklama

bölümlerinden oluşabilir.

Örnek:

        LDA X
        ADD Y
        STA Z
X,      DEC -20
Y,      DEC 40
Z,      DEC 0
        END

Sembolik adres

Etiket:

X
Y
Z
LOOP

gibi isimleri sayısal bellek adresleri yerine kullanmayı sağlar.

Assembler bu sembolleri gerçek adreslere dönüştürür.

Sözde komutlar

Assembler directive veya pseudo-operation, doğrudan CPU tarafından yürütülen makine komutu değildir.

Eğitim assembler'ında:

ORG
END
DEC
HEX

gibi ifadeler kullanılabilir.

Örneğin:

ORG 200

izleyen kodun yerleşmeye başlayacağı adresi belirler.

İki geçişli assembler

Forward reference nedeniyle sembolün adresi ilk kullanıldığı anda bilinmeyebilir.

İki geçişli yaklaşım:

Birinci geçiş

  • kaynak programı tarar,
  • location counter tutar,
  • etiketleri sembol tablosuna yerleştirir,
  • adresleri belirler.

İkinci geçiş

  • komut adlarını opcode'a dönüştürür,
  • sembolik operandları adreslerle değiştirir,
  • nesne kodunu üretir.

Sembol tablosu

Örnek:

| Sembol | Adres | | --- | ---: | | LOOP | 205 | | X | 230 | | Y | 231 |

Assembler ikinci geçişte bu tabloyu kullanır.

Hata tanılama

Assembler en az şu hata sınıflarını bulabilir:

  • bilinmeyen komut,
  • tanımsız sembol,
  • yinelenmiş etiket,
  • geçersiz sayı,
  • alan taşması,
  • sözdizimi hatası.

Modern assembler ve linker araçları ayrıca:

  • relocation,
  • symbol visibility,
  • section,
  • object format

gibi kavramlarla çalışır.

Döngü

Assembly düzeyinde yüksek seviyeli for yapısı doğrudan bulunmayabilir.

Tipik döngü:

başlangıç
  ↓
işlem
  ↓
sayaç güncelle
  ↓
koşul
 ├─ devam
 └─ çık

şeklinde dallanma komutlarıyla gerçekleştirilir.

Çarpma ve bölme

Temel eğitim bilgisayarında doğrudan MUL veya DIV komutu bulunmayabilir.

Basit çarpma:

  • toplama,
  • kaydırma

ile gerçekleştirilebilir.

Bölme:

  • çıkarma,
  • karşılaştırma,
  • kaydırma

işlemlerinden kurulabilir.

Bu durum komut kümesinin hesaplama bakımından yeterli olabileceğini ancak verimli olmayabileceğini gösterir.

Modern genel amaçlı işlemciler çoğunlukla donanımsal çarpma ve bölme komutları sağlar.

Kaydırma ile çarpma

İşaretsiz veya uygun signed sayı için:

x << 1

matematiksel aralık taşmıyorsa:

2x

ile ilişkilidir.

Benzer biçimde sağa kaydırma ikiye bölme ile ilişkili olabilir. Ancak signed negatif değerlerde yuvarlama davranışı ve dil/ISA tanımı dikkate alınmalıdır.

Alt program

Alt program, belirli görevi gerçekleştiren ve çağrıldığı yere geri dönen komut dizisidir.

Gerekli iki temel bilgi:

  • alt programın giriş adresi,
  • dönüş adresi.

Dönüş adresi:

  • belirli yazmaçta,
  • bellekte,
  • yığında

saklanabilir.

Yinelemeli çağrılar

Tek sabit bellek konumunda dönüş adresi saklayan sistem iç içe veya recursive çağrıları doğrudan desteklemekte zorlanır.

Yığın tabanlı çağrı mekanizması:

push return_address
call
...
pop return_address
return

ile iç içe çağrıları doğal olarak destekler.

Parametre aktarımı

Alt programa parametre:

  • yazmaç,
  • bellek,
  • yığın,
  • çağrı çerçevesi

üzerinden aktarılabilir.

Modern ABI'ler hangi parametrelerin hangi yazmaçlarda veya yığında taşınacağını belirler.

Giriş çıkış programlaması

Temel bilgisayar modelinde G/Ç:

  • veri yazmacı,
  • hazır bayrağı,
  • kesme etkinleştirme biti

ile modellenebilir.

Polling:

while ready == 0:
    bekle

şeklindedir.

Kesme tabanlı G/Ç'de işlemci başka iş yaparken aygıt hazır olduğunda kesme oluşturur.

Programlı G/Ç, kesme ve DMA

Üç temel yaklaşım:

Programlı G/Ç: CPU veri aktarımının her adımıyla ilgilenir.

Kesme tabanlı G/Ç: Aygıt hazır olduğunda CPU'yu haberdar eder.

DMA: Veri bloklarının bellek ile aygıt arasında CPU'nun her sözcük aktarımına katılması gerekmeden taşınmasını sağlar.

Bu üçlü, güncel bilgisayar organizasyonunda da temel kavramsal ayrımdır.

Ünite 7: Mikroprogramlı Kontrol

Kontrol biriminin görevi

Kontrol birimi işlemcideki veri yolunun ne yapacağını belirleyen kontrol işaretlerini üretir.

Örneğin:

AR <- PC

işlemi için:

  • PC çıkışının veri yoluna bağlanması,
  • AR yükleme girişinin etkinleştirilmesi,
  • uygun saat olayı

gerekir.

Bu işaretlerin üretimi iki temel yöntemle yapılabilir:

  • donanımsal kontrol,
  • mikroprogramlı kontrol.

Mikroprogramlı kontrol

Microprogrammed control'de kontrol işaretleri bir kontrol belleğinde saklanan mikrokomutlarla tanımlanır.

Temel yapı:

Kontrol adres yazmacı
        ↓
Kontrol belleği
        ↓
Mikrokomut yazmacı
        ↓
Kontrol işaretleri

Bir mikrokomut işlemci veri yolunda aynı anda yapılabilecek bir veya daha fazla mikroişlemi kodlayabilir.

Kontrol belleği

Kontrol belleği geleneksel eğitim modelinde ROM olarak düşünülebilir.

Her adres bir mikrokomut içerir.

Mikrokomut:

  • veri yolu kontrol alanları,
  • koşul alanı,
  • dallanma alanı,
  • sonraki adres

içerebilir.

Kontrol adres yazmacı

Control Address Register:

CAR

sonraki okunacak mikrokomutun adresini tutar.

Alt program yazmacı

Microprogram kontrolünde:

SBR

mikroprogram alt rutininin dönüş adresini tutmak için kullanılabilir.

Bu, normal programdaki call/return kavramının kontrol birimi içindeki karşılığıdır.

Mikrokomut biçimi

Eğitim modelinde mikrokomut:

F1 | F2 | F3 | CD | BR | AD

gibi alanlara ayrılabilir.

F1, F2, F3 mikroişlem gruplarını seçer.

CD koşulu seçer.

BR sonraki adres üretme yöntemini seçer.

AD hedef mikrokomut adresini taşır.

Bu özel biçim eğitim mimarisine aittir. Gerçek işlemcilerin mikrocode biçimleri üreticiye özgüdür.

Mikroprogram dizileme

Bir sonraki mikrokomut adresi:

  • sıradaki adres,
  • koşullu hedef,
  • komut opcode'undan eşlenen rutin,
  • alt rutin dönüş adresi

gibi kaynaklardan seçilebilir.

Bu işlem microsequencing olarak adlandırılır.

Mapping

Makine komutunun opcode'u ilgili mikroprogram rutininin başlangıç adresine eşlenebilir.

Kavramsal olarak:

opcode
  ↓ mapping
mikroprogram başlangıç adresi

şeklindedir.

Fetch mikroprogramı

Komut getirme mikroişlemleri mikroprogramla da tanımlanabilir:

AR <- PC
DR <- M[AR], PC <- PC + 1
AR <- DR(address)
CAR <- routine_address(opcode)

Gerçek alan ve veri yolu ayrıntıları tasarıma göre değişir.

Dolaylı adres rutini

Dolaylı adresleme için:

AR <- M[AR]

mikroişlemiyle efektif adres elde edilir.

Birden fazla makine komutunun aynı dolaylı adres rutinini kullanması mikroprogram paylaşımına örnektir.

ADD mikroprogramı

Basit ADD:

DR <- M[AR]
AC <- AC + DR

işlemlerini gerçekleştiren mikrokomut dizisiyle tanımlanabilir.

Son mikrokomut yeni makine komutunu almak üzere fetch rutinine döner.

Mikroprogram alt rutini

Ortak mikroişlem dizileri mikroprogram alt rutini olarak kullanılabilir.

Çağrıda:

SBR <- return_microaddress
CAR <- subroutine_address

dönüşte:

CAR <- SBR

mantığı uygulanabilir.

Yatay ve dikey mikroprogramlama

Yatay mikrokomut çok sayıda kontrol bitini doğrudan veya az kodlanmış biçimde içerir.

Avantajı:

  • aynı anda çok sayıda mikroişlem,
  • düşük decode gecikmesi.

Dezavantajı:

  • geniş kontrol sözcüğü.

Dikey mikrokomut daha yoğun kodlanır.

Avantajı:

  • daha dar kontrol belleği.

Dezavantajı:

  • ek çözme mantığı,
  • daha düşük doğrudan paralellik.

Donanımsal ve mikroprogramlı kontrol karşılaştırması

| Özellik | Donanımsal | Mikroprogramlı | | --- | --- | --- | | Temel yapı | Mantık devresi | Kontrol belleği | | Değişiklik | Zor | Görece kolay | | Kontrol gecikmesi | Genellikle düşük | Kontrol belleği erişimi içerir | | Karmaşık ISA | Tasarım zorlaşabilir | Mikrocode ile düzenlenebilir | | Basit pipeline | Uygun | Uygulamaya bağlı |

Modern işlemciler bu ayrımı mutlak biçimde kullanmak zorunda değildir. Aynı çekirdekte donanımsal decode, mikro-op üretimi ve mikrocode mekanizmaları birlikte bulunabilir.

Ünite 8: Merkezi İşlem Birimi

CPU organizasyonu

CPU temel olarak:

Yazmaç dosyası
      ↓
     ALU
      ↓
Yazmaç dosyası

veri yolu ile kontrol biriminden oluşur.

Akümülatör tabanlı tasarım tek ana çalışma yazmacına ağırlık verir.

Genel amaçlı yazmaç organizasyonunda birden çok yazmaç işlem operandı olarak kullanılabilir.

Genel amaçlı yazmaç organizasyonu

Birden çok yazmaç:

R0
R1
R2
...
Rn

bir yazmaç dosyası oluşturabilir.

İki kaynak ve bir hedef kullanan işlem:

R5 <- R2 + R3

için:

  • R2 A girişine,
  • R3 B girişine,
  • ALU ADD işlemine,
  • sonuç R5 yazma girişine

seçilir.

Kontrol sözcüğü

Basit genel yazmaç organizasyonunda kontrol sözcüğü:

SELA
SELB
SELD
OPR

alanlarından oluşabilir.

Burada:

  • SELA: ilk kaynak yazmacı,
  • SELB: ikinci kaynak yazmacı,
  • SELD: hedef yazmacı,
  • OPR: ALU/kaydırma işlemini

seçer.

Bu düşünce modern işlemcideki register specifier ve function alanlarının donanımsal karşılığıdır.

Yazmaç dosyası

Modern register file genellikle:

  • birden çok okuma portu,
  • bir veya daha fazla yazma portu

içerebilir.

İki kaynaklı bir ALU komutu için iki okuma portu doğal bir düzenlemedir.

Daha fazla port:

  • alan,
  • güç,
  • gecikme

maliyetini artırır.

Yığın organizasyonu

Stack son giren ilk çıkar davranışına sahiptir:

LIFO

Temel işlemler:

PUSH
POP

Yığının tepesini:

SP

yığın işaretçisi gösterir.

Yığının büyüme yönü mimari sözleşmeye göre artan veya azalan adresler olabilir.

PUSH

Azalan adresli yığında örnek:

SP <- SP - 1
M[SP] <- R

POP

R <- M[SP]
SP <- SP + 1

Gerçek sıralama ISA'ya göre değişebilir.

Yığın ve alt program

Yığın:

  • dönüş adresleri,
  • yerel değişkenler,
  • kaydedilen yazmaçlar,
  • bazı parametreler

için kullanılabilir.

Fonksiyon çağrısında oluşan düzen stack frame olarak adlandırılır.

Son ekli gösterim

Postfix, ters Polonyalı gösterimde işleç operandlardan sonra gelir.

Örnek:

A B + C *

ifadesi:

(A + B) * C

anlamına gelir.

Stack makinesinde:

PUSH A
PUSH B
ADD
PUSH C
MUL

ile doğal biçimde değerlendirilebilir.

Komut biçimleri

Komut biçimi şu alanlardan bazılarını içerebilir:

  • opcode,
  • kaynak yazmaç,
  • hedef yazmaç,
  • immediate değer,
  • adresleme modu,
  • displacement.

Komut genişliği:

  • sabit,
  • değişken

olabilir.

RISC-V temel komut kümeleri sabit 32 bit komut biçimlerini yoğun kullanırken sıkıştırılmış uzantılar daha kısa komutlar ekleyebilir.

x86 değişken uzunluklu komut biçimi kullanır.

Üç adresli komut

ADD R1, R2, R3

kavramsal olarak:

R1 <- R2 + R3

anlamına gelebilir.

Kaynak operandlar korunur.

İki adresli komut

ADD R1, R2

tasarıma göre:

R1 <- R1 + R2

anlamına gelebilir.

Bir operand aynı zamanda hedeftir.

Tek adresli komut

Akümülatör mimarisinde:

ADD X

genellikle:

AC <- AC + M[X]

olarak yorumlanır.

Sıfır adresli komut

Stack mimarisinde operand adresleri açıkça belirtilmeyebilir:

ADD

yığının tepesindeki iki operandı alıp sonucu tekrar yığına koyabilir.

Adresleme modu

Adresleme modu operandın nasıl bulunacağını tanımlar.

Temel kavram:

EA = effective address

yani efektif adrestir.

Örtük adresleme

Operand komutun anlamından çıkarılır.

Örneğin:

CMA

gibi akümülatör komutunda operand açıkça yazılmayabilir.

Immediate adresleme

Operand komutun içindedir:

LOAD R1, #5

Burada bellekten operand okumaya gerek yoktur.

Doğrudan adresleme

EA = A

Komutun adres alanı operandın adresidir.

Dolaylı adresleme

EA = M[A]

Komuttaki alan doğrudan operandı değil, operand adresinin bulunduğu konumu gösterir.

Yazmaç adresleme

Operand doğrudan yazmaçtadır:

ADD R1, R2

Bellek erişimi gerektirmez.

Yazmaç dolaylı adresleme

Yazmaç bellek adresini taşır:

LOAD R1, [R2]

kavramsal olarak:

R1 <- M[R2]

Otomatik artırmalı adresleme

Kavramsal olarak:

R1 <- M[R2]
R2 <- R2 + d

işlemlerini birleştirir.

Dizi veya ardışık veri dolaşımında yararlı olabilir.

İndeksli adresleme

EA = base_address + index

şeklindedir.

Dizi elemanlarına erişimde kullanılır.

Gerçek işlemcilerde index ayrıca eleman boyutuna göre ölçeklenebilir.

Baz adresleme

EA = base_register + displacement

işlemi özellikle:

  • stack frame,
  • nesne alanı,
  • veri yapısı,
  • bellek bölgesi

erişimlerinde yararlıdır.

PC-relative adresleme

EA = PC + displacement

şeklindedir.

Özellikle:

  • dallanma,
  • konumdan bağımsız kod

için önemlidir.

Efektif adres hesabı

Güncel ISA'larda bir bellek operandı:

base + index*scale + displacement

gibi daha zengin adres hesaplarını destekleyebilir.

Adresleme modu, yalnız sözdizim özelliği değil veri yolu ve adres üretme donanımının da parçasıdır.

Program kontrol komutları

Program akışını değiştiren komutlar:

  • koşulsuz dallanma,
  • koşullu dallanma,
  • call,
  • return,
  • trap/system call,
  • exception return

gibi sınıflara ayrılabilir.

Durum bayrakları

ALU işlemi sonucunda:

  • zero,
  • carry,
  • sign/negative,
  • overflow

gibi durumlar üretilebilir.

Bazı ISA'lar genel amaçlı aritmetik için merkezi flags register kullanır. Bazıları karşılaştırma ve dallanmayı farklı biçimde gerçekleştirir.

RISC yaklaşımı

Reduced Instruction Set Computer yaklaşımının temel düşünceleri tarihsel olarak:

  • basit ve düzenli komut biçimleri,
  • çok sayıda genel amaçlı yazmaç,
  • load/store veri erişimi,
  • pipeline'a uygun yürütme

etrafında şekillenmiştir.

Modern RISC-V ve Arm mimarileri bu düşüncenin güncel örnekleridir.

CISC yaklaşımı

Complex Instruction Set Computer olarak sınıflandırılan mimariler:

  • daha zengin komut biçimleri,
  • değişken uzunluklu kodlama,
  • karmaşık adresleme ve işlemler

içerebilir.

x86 bu sınıflandırmanın temel güncel örneğidir.

RISC ve CISC ayrımının sınırı

Güncel mikro mimarilerde RISC/CISC ayrımı tek başına iç donanım karmaşıklığını açıklamaz.

Örneğin x86 işlemciler karmaşık mimari komutları iç mikroişlemlere dönüştürebilir. RISC işlemciler de:

  • out-of-order yürütme,
  • spekülasyon,
  • büyük önbellekler,
  • gelişmiş branch prediction,
  • vektör birimleri

gibi son derece karmaşık mikro mimari teknikler kullanabilir.

Bu nedenle RISC/CISC esas olarak ISA tasarım geleneğini açıklayan bir çerçeve olarak düşünülmelidir.

Ünite 9: Organizasyondan Modern Mikro Mimariye

Temel modelin güncel karşılığı

Dersin temel bilgisayar modeli:

PC
IR
registers
ALU
memory
control

bileşenlerini açık biçimde gösterir.

Modern işlemci aynı temel kavramları daha fazla paralellik ve ara yapı ile genişletir:

Fetch
  ↓
Decode
  ↓
Rename
  ↓
Schedule
  ↓
Execute
  ↓
Memory
  ↓
Retire

Bu aşamaların tümü her işlemcide bulunmak zorunda değildir. Ancak güncel yüksek performanslı çekirdeklerde yaygındır.

Pipeline

Pipeline farklı komutların farklı aşamalarını aynı anda çalıştırır.

Basit beş aşamalı model:

IF  komutu getir
ID  çöz
EX  yürüt
MEM bellek
WB  geri yaz

İdeal durumda pipeline komut gecikmesini değil, komut başına ortalama tamamlanma hızını artırır.

Veri tehlikesi

Bir komut önceki komutun sonucuna ihtiyaç duyarsa veri bağımlılığı oluşur.

Örnek:

ADD R1, R2, R3
SUB R4, R1, R5

İkinci komut R1 sonucunu bekler.

Basit çözüm:

  • stall.

Daha iyi çözüm:

  • forwarding/bypassing.

Kontrol tehlikesi

Dallanma komutunda sonraki PC henüz kesin bilinmeyebilir.

Çözümler:

  • pipeline bekletme,
  • erken branch çözümü,
  • branch prediction,
  • speculative execution.

Yapısal tehlike

Aynı donanım kaynağına aynı anda birden fazla aşama ihtiyaç duyarsa structural hazard oluşur.

Çözüm:

  • kaynak çoğaltma,
  • port artırma,
  • zamanlama.

Out-of-order yürütme

Komutlar program sırasından farklı bir fiziksel sırada yürütülebilir.

Ama mimari sonuç:

program sırası

ile tutarlı görünmelidir.

Bu amaçla:

  • register renaming,
  • reservation stations/scheduler,
  • reorder buffer

benzeri yapılar kullanılabilir.

Yazmaç yeniden adlandırma

WAR ve WAW gibi isim bağımlılıklarını fiziksel yazmaçlarla ortadan kaldırır.

Mimari yazmaç:

R1

farklı zamanlarda farklı fiziksel yazmaçlara eşlenebilir.

Önbellek hiyerarşisi

İşlemci ile DRAM arasındaki gecikme farkı önbelleklerle azaltılır.

Tipik yapı:

L1
 ↓
L2
 ↓
L3
 ↓
DRAM

Bütün işlemciler aynı seviye düzenini kullanmak zorunda değildir.

Temel ilke yerelliktir.

Zamansal yerellik: Yakın zamanda kullanılan verinin tekrar kullanılma olasılığı.

Mekansal yerellik: Bir adrese yakın verinin yakında kullanılma olasılığı.

Sanal bellek

CPU'nun ürettiği sanal adres:

MMU
 ↓
fiziksel adres

dönüşümünden geçebilir.

TLB yakın zamanda kullanılan adres çevirilerini önbelleğe alır.

Sanal bellek:

  • süreç izolasyonu,
  • koruma,
  • esnek adres uzayı

sağlar.

ISA ile mikro mimari ayrımı

ISA programcıya görünen sözleşmedir.

Mikro mimari bu sözleşmeyi gerçekleştiren donanımdır.

Örneğin iki işlemci:

  • aynı ISA'yı çalıştırabilir,
  • aynı programı çalıştırabilir,
  • farklı pipeline,
  • farklı cache,
  • farklı yürütme birimleri

kullanabilir.

Bu ayrım bilgisayar organizasyonunun en önemli kavramsal sonuçlarından biridir.

Genel Çerçeve

Bilgisayar organizasyonu, lojik kapıdan makine komutuna kadar kesintisiz bir soyutlama zinciridir.

Transistor
   ↓
Lojik kapı
   ↓
Birleşimsel / ardışıl devre
   ↓
Yazmaç, MUX, decoder, ALU
   ↓
Veri yolu
   ↓
Mikroişlem
   ↓
Kontrol birimi
   ↓
Komut çevrimi
   ↓
ISA
   ↓
Assembly
   ↓
Program

Alt düzeyde fiziksel devreler bulunur. Üst düzeyde programcı komut kümesini görür.

İki düzey arasında bilgisayar organizasyonu yer alır.

Bir:

ADD R1, R2, R3

komutu programcı açısından tek işlemdir.

Donanım açısından ise:

R2'yi oku
R3'ü oku
ALU'ya uygula
ADD işlevini seç
durum işaretlerini üret
sonucu R1'e yaz

gibi birçok kontrol ve veri yolu işleminin birleşimidir.

Temel bilgisayar modeli bu dönüşümü görünür hale getirir.

Bu sayfanın QR kodu