Bölüm 1.3: Bilgisayarlar

Bilgisayar ve Programlamaya Giriş
Veri temsiliMetinSaklanan programCPU ve bellekSoyutlama
Sercan KÜLCÜ · Giresun Üniversitesi

Giriş

Öğrenme Çıktıları

Sayı temsili

Sınırlı bit sayısının sonuçlarını (negatif sayılar, taşma, kayan nokta) açıklamak.

Metin temsili

ASCII, Unicode ve dizgi kavramlarını ayırt etmek.

Program yürütme

Saklanan program ve getir–çöz–yürüt döngüsünü açıklamak.

Mimari

CPU, bellek, yazmaç ve veri yolu ilişkisini yorumlamak.

Giriş

Bilgisayarın Temel Parçaları

Girişklavye, sensörCPUkomutları yürütürBellekkomut + veriÇıkış: ekran, yazıcıyazoku
CPU

Komutları yürütür.

Bellek

Veri ve komutları saklar.

Giriş / çıkış

Dış dünya ile veri alışverişi sağlar.

Veri Temsili

Bilgiden Bitlere

Sayılar, harfler, görüntüler ve program komutları bellekte bit dizileri olarak saklanır. Bit dizisinin anlamını veri tipi ve kodlama belirler.

Bilgiharf “A”KodlamaASCII 65Bit dizisi01000001Programküçük harfeçevir: +32Çıktıekranda “a”01000001 (65) + 00100000 (32) = 01100001 (97) = “a”

Veri Temsili · Adım adım

Taban Kavramı

SistemTabanRakamlarÖrnek
İkili20–11101₂
Sekizli80–715₈
Onluk100–913₁₀
Onaltılık160–9, A–FD₁₆
45₁₀ =101101₂(32 + 8 + 4 + 1)

45₁₀ = 101101₂. Sekizli ve onaltılık tabanlar, uzun ikili sayıları kısa yazmanın yoludur.

45₁₀ =101101₂(32 + 8 + 4 + 1)3'lü grup:101= 5101= 5→ 55₈(5·8 + 5 = 45)

8 = 2³ olduğundan bitler sağdan üçerli gruplanır: 101 101 → 55₈.

45₁₀ =101101₂(32 + 8 + 4 + 1)3'lü grup:101= 5101= 5→ 55₈(5·8 + 5 = 45)4'lü grup:0010= 2 = 21101= 13 = D→ 2D₁₆(2·16 + 13 = 45)

16 = 2⁴ olduğundan dörderli gruplanır: 0010 1101 → 2 ve 13 (D) → 2D₁₆.

Veri Temsili

Negatif Tam Sayılar

Modern bilgisayarlar negatif tam sayıları çoğunlukla ikiye tümleyen gösterimle saklar.

Tek sıfır

Pozitif ve negatif sıfır ayrımı oluşmaz.

Aritmetik

Toplama devreleri pozitif ve negatif sayılarda aynı kuralları kullanabilir.

n bit aralığı

−2ⁿ⁻¹ ile 2ⁿ⁻¹−1 arasındadır.

8 bit: −128 … 127
00000000110010200113010040101501106011171000−81001−71010−61011−51100−41101−31110−21111−14 bitilk bit 1 → negatif7 + 1 → −8 (taşma)

Veri Temsili · Adım adım

İkiye Tümleyen: −5 Nasıl Yazılır?

+500000101

8 bitte +5 = 00000101. −5'i bulmak için iki adım yeterli.

+500000101ters çevir11111010

1. Tüm bitleri ters çevir (0 ↔ 1): 11111010. Buna birler tümleyeni denir.

+500000101ters çevir11111010+1 → −511111011

2. Sonuca 1 ekle: 11111010 + 1 = 11111011 = −5. En soldaki 1, sayının negatif olduğunu gösterir.

+500000101−511111011toplam100000000taşan elde atılır8 bitte kalan: 00000000 = 0 ✓

Kontrol: 00000101 + 11111011 = 100000000. 9. bit 8 bite sığmaz ve atılır → 0. Toplama devresi negatifler için ayrıca bir şey yapmaz.

Veri Temsili · Adım adım

Çıkarma Aslında Toplamadır: 5 − 9

76543210a00000101= +5b00001001= +9

İşlemcide ayrı bir çıkarma devresi gerekmez: a − b = a + (−b). Önce b'nin ikiye tümleyeni bulunur.

76543210b00001001= +9NOTher bit ters çevrilirters11110110birler tümleyeni

Bütün bitler ters çevrilir (0 ↔ 1): 11110110.

76543210ters11110110+00000001eksi11110111= −9

1 eklenir: 11110111 = −9. (İşaretsiz okunursa 247 = 256 − 9.)

76543210a00000101+5eksi+11110111−9s11111100= 252 işaretsiz

Sıradan ikili toplama: 5 + 247 = 252 = 11111100. 256'ya ulaşmadığı için 9. bite elde çıkmaz.

76543210s11111100işaret biti 1 → negatifNOT s00000011+100000100= 4 → s = −4

İşaretli okuma: en soldaki bit 1 olduğundan sayı negatiftir. Büyüklük için yine ters çevir + 1: 00000100 = 4 → s = −4 ✓.

a ← 00000101     ; +5
b ← 00001001     ; +9
ters ← NOT b     ; bitleri çevir
eksi ← ters + 1  ; −9
s ← a + eksi     ; 5 + (−9)
yaz(s)           ; işaretli oku

Veri Temsili · Adım adım

Taşma: 8 Bitte 200 + 100

20011001000+ 10001100100

8 bit işaretsiz sayı en fazla 255 olabilir. 200 + 100 toplayalım.

20011001000+ 10001100100= 3001001011009. bit

Gerçek toplam 300 = 100101100₂: sonuç 9 bit gerektirir.

20011001000+ 10001100100= 3001001011009. bit8 bitte kalan: 00101100 = 44

Yazmaç yalnızca 8 bit tutar; 9. bit (256) kaybolur → sonuç 44. Buna taşma (overflow) denir: 300 − 256 = 44.

İşaretli 8 bitte de 127 + 1 taşar ve −128 olur. Programlarda tip seçimi bu yüzden önemlidir.

Veri Temsili

İşaretli Taşma ve Elde Farkı

İşlem (8 bit)İkili toplamEldeİşaretli taşmaSonuç
5 + (−9)00000101 + 11110111 = 111111000yok−4 ✓
(−1) + (−1)11111111 + 11111111 = 1 111111101yok−2 ✓
100 + 5001100100 + 00110010 = 100101100var−106 ✗
(−100) + (−50)10011100 + 11001110 = 1 011010101var+106 ✗
Elde (9. bit)

İşaretsiz yorumda sonucun 8 bite sığmadığını gösterir. İşaretli toplamada elde atılır ve sonuç yine doğru olabilir: (−1) + (−1) = −2.

İşaretli taşma

Aynı işaretli iki sayının toplamı ters işaretli çıkarsa oluşur. Farklı işaretli iki sayının toplamı hiçbir zaman taşmaz.

Java’da (byte) (100 + 50) değeri −106’dır: tam sayı taşması hata vermez, sessizce yanlış sonuç üretir.

Veri Temsili

Kayan Noktalı Sayılar

Kayan nokta

Çok büyük ve çok küçük değerleri bilimsel gösterime benzer biçimde saklar.

Sınırlı hassasiyet

Her ondalık değer sonlu bitlerle tam temsil edilemez.

Yuvarlama

Hesaplama sonuçlarında küçük farklar oluşabilir.

Karşılaştırma

Kayan noktalı sonuçlar tolerans değeriyle karşılaştırılabilir.

0.1 + 0.2  →  0.30000000000000004   // double ile hesaplanınca
0.3 yazınca saklanan değer0.299999999999999988900.1 + 0.2 sonucu0.30000000000000004441gerçek 0,3 (double ile tam yazılamaz)iki komşu double arası ≈ 5,55 × 10⁻¹⁷ → 0.1 + 0.2 == 0.3 sonucu false

Veri Temsili · Adım adım

0,1 Neden Tam Saklanamaz?

Kesri sürekli 2 ile çarp; tam kısım bir sonraki bit0,1₁₀ =0,

Ondalık kesir ikiliye nasıl çevrilir? Kesri 2 ile çarp, tam kısmı (0 ya da 1) bit olarak al, kalan kesirle devam et.

Kesri sürekli 2 ile çarp; tam kısım bir sonraki bit0,1 × 2 = 0,2bit 00,1₁₀ =0,0

0,1 × 2 = 0,2 → tam kısım 0.

Kesri sürekli 2 ile çarp; tam kısım bir sonraki bit0,1 × 2 = 0,2bit 00,2 × 2 = 0,4bit 00,1₁₀ =0,00

0,2 × 2 = 0,4 → tam kısım 0.

Kesri sürekli 2 ile çarp; tam kısım bir sonraki bit0,1 × 2 = 0,2bit 00,2 × 2 = 0,4bit 00,4 × 2 = 0,8bit 00,1₁₀ =0,000

0,4 × 2 = 0,8 → tam kısım 0.

Kesri sürekli 2 ile çarp; tam kısım bir sonraki bit0,1 × 2 = 0,2bit 00,2 × 2 = 0,4bit 00,4 × 2 = 0,8bit 00,8 × 2 = 1,6bit 10,1₁₀ =0,0001

0,8 × 2 = 1,6 → tam kısım 1, kesir 1 çıkarılarak devam eder.

Kesri sürekli 2 ile çarp; tam kısım bir sonraki bit0,1 × 2 = 0,2bit 00,2 × 2 = 0,4bit 00,4 × 2 = 0,8bit 00,8 × 2 = 1,6bit 10,6 × 2 = 1,2bit 10,1₁₀ =0,00011…0,2 tekrar geldi → “0011” sonsuza dek sürerSonlu bitle kesilir → küçük yuvarlama hatası

0,6 × 2 = 1,2 → tam kısım 1, kesir 1 çıkarılarak devam eder. Kesir yine 0,2 oldu: açılım döngüye girdi, hiçbir zaman bitmez.

Veri Temsili

Kayan Noktalı Sayılar (IEEE 754)

00111101110011001100110011001101işaret (1)üs (8 bit)kesir (23 bit)0+01111011₂ = 123üs = 123 − 127 = −41,10011001100110011001101₂≈ 1,6000000238değer = (−1)^işaret × 1,kesir × 2^(üs − 127)0,1 (float) = 0x3DCCCCCD≈ 1,6000000238 × 2⁻⁴ ≈ 0,10000000149
  • float 32 bittir (1 + 8 + 23); double 64 bittir (1 + 11 + 52). Normal sayılarda baştaki 1 saklanmaz.
  • 0,1 = 1,1001 1001 1001…₂ × 2⁻⁴: kesir sonsuza dek tekrarlar, 23 bite sığmayınca yuvarlanır.
  • Saklanan değer tam olarak 0,100000001490116119384765625’tir: 0,1’e çok yakın ama eşit değil.

Veri Temsili · Adım adım

−6,25 Sayısını float Olarak Kodlama

x = −6,25 → işaret biti 1işaretüs (8 bit)kesir (23 bit)1

float 32 bittir: 1 işaret + 8 üs + 23 kesir. Sayı negatif olduğundan işaret biti 1; geri kalan işlemler 6,25 üzerinde yapılır.

6 = 110₂ · 0,25 × 2 = 0,5 → 0 · 0,5 × 2 = 1,0 → 1işaretüs (8 bit)kesir (23 bit)1

Tam kısım 6 = 110₂; kesir 0,25, “2 ile çarp, tam kısmı al” yöntemiyle 0,01₂ olur ve kesir 0'a iner. 6,25 = 110,01₂: 0,1'in aksine sonlu ve tam.

110,01₂ = 1,1001₂ × 2²işaretüs (8 bit)kesir (23 bit)1

Bilimsel gösterime benzer biçimde virgül, solunda tek 1 kalacak kadar kaydırılır: 2 basamak sola → 1,1001 × 2².

üs alanı = 2 + 127 = 129 = 10000001₂işaretüs (8 bit)kesir (23 bit)110000001

Üs alanına gerçek üs değil, 127 eklenmiş hâli (sapma, bias) yazılır: 2 + 127 = 129. Böylece negatif üsler de işaretsiz saklanır.

kesir = 1,1001'in virgülden sonrası → 1001 ve 19 sıfırişaretüs (8 bit)kesir (23 bit)11000000110010000000000000000000

Normal sayılarda baştaki 1 her zaman var olduğu için saklanmaz; yalnızca virgülden sonraki 1001 yazılır, kalan 19 bit 0 ile dolar.

−6,25 = C0C80000₁₆işaretüs (8 bit)kesir (23 bit)11000000110010000000000000000000C0C80000

32 bit dörderli gruplanır: 1100 0000 1100 1000 0000 … → C0C80000. Java'da Float.floatToIntBits(-6.25f) bu değeri verir.

x ← −6,25
işaret ← 1         ; negatif
ikili ← 110,01     ; 6 = 110, 0,25 = 0,01
norm ← 1,1001 × 2² ; virgül 2 sola
üs ← 2 + 127 = 129 ; 10000001
kesir ← 1001 0000… ; baştaki 1 yazılmaz
yaz(onaltılık(bitler))

Metin Temsili

ASCII

ASCII, temel Latin harflerini, rakamları, noktalama işaretlerini ve kontrol karakterlerini sayısal kodlarla eşleştirir.

ASCII 7 bitlik bir koddur: 128 karakter (0–127) tanımlar; bir bayt içinde saklandığında en yüksek bit 0’dır.

A

65

01000001
a

97

01100001
0

48

00110000
Satır sonu (LF)

Kontrol karakteri: 10

00001010
“A” = 6501000001“a” = 970110000132'ler basamağıBüyük ve küçük harfyalnızca bir bitte ayrılır:97 − 65 = 32

Metin Temsili · Adım adım

Bit İşlemleri: Harfin Büyüklüğünü Değiştirme

76543210'G'01000111= 71'g'01100111= 103

“G” = 71, “g” = 103: fark 32 = 2⁵. Büyük ve küçük harf yalnızca 5. bitte (sağdan, 0'dan sayarak) ayrılır.

76543210c01000111'G'mOR00100000k01100111= 103 → 'g'

OR: maskede 1 olan bit sonuçta 1 olur, öteki bitler aynen kalır. Büyük harf küçüğe döndü.

76543210k01100111'g'NOT mAND11011111b01000111= 71 → 'G'

AND ters maskeyle: maskedeki bit 0'a çekilir, ötekiler korunur. Küçük harf yeniden büyük oldu.

76543210b01000111'G'mXOR00100000t01100111= 103 → 'g'

XOR: maskedeki bit ters çevrilir. Aynı maskeyle ikinci kez XOR, eski değeri geri verir.

76543210c01000111= 71<< 1her bit bir basamak sola, sağdan 0 girers10001110= 142 = 71 × 2

Sola kaydırma: her bit bir basamak yükselir, sağdan 0 girer → değer 2 ile çarpılır. Sağa kaydırma (>> 1) 2'ye böler: 71 → 35.

c ← 'G'            ; 71 = 01000111
m ← 00100000       ; maske: 5. bit (32)
k ← c OR m         ; biti 1 yap
b ← k AND (NOT m)  ; biti 0 yap
t ← b XOR m        ; biti ters çevir
s ← c << 1         ; sola kaydır

Metin Temsili

Unicode

Unicode, farklı yazı sistemlerindeki karakterlere benzersiz kod noktaları atar.

Kod noktası

Karakterin evrensel numarasıdır.

A → U+0041
UTF-8

Unicode karakterlerini değişken uzunlukta bayt dizileriyle kodlar.

Geniş kapsam

Türkçe karakterler, farklı alfabeler, matematik simgeleri ve emoji.

Dosya kodlaması

Aynı kod noktası farklı Unicode dönüşüm biçimleriyle saklanabilir.

karakterkod noktasıUTF-8 baytları (onaltılık)uzunlukAU+0041411 baytğU+011FC49F2 bayt€U+20ACE282AC3 bayt😀U+1F600F09F98804 bayt

Metin Temsili · Adım adım

UTF-8 Kodlama: “ğ”

“ğ” → kod noktası U+011F = 287

Unicode, “ğ” harfine U+011F (onluk 287) kod noktasını atar. UTF-8 bu sayıyı baytlara nasıl yazar?

“ğ” → kod noktası U+011F = 28711 bit:00100011111

287 ikili yazılır: 00100011111. 7 bite sığmaz (ASCII değil) ama 11 bite sığar → 2 bayt gerekir.

“ğ” → kod noktası U+011F = 28711 bit:001000111115 bit6 bit

2 baytlık UTF-8 şablonu 110xxxxx 10xxxxxx: 11 bit, 5 + 6 olarak ikiye bölünür.

“ğ” → kod noktası U+011F = 28711 bit:001000111115 bit6 bitşablon:11000100= C4₁₆10011111= 9F₁₆

Bitler şablona yerleşir: 11000100 10011111 = C4 9F. Baştaki 110 ve 10, baytın görevini söyler.

“ğ” → kod noktası U+011F = 28711 bit:001000111115 bit6 bitşablon:11000100= C4₁₆10011111= 9F₁₆Başka örnekler:A41 (1 B)ğC4 9F (2 B)€E2 82 AC (3 B)😀F0 9F 98 80 (4 B)

ASCII karakterleri 1 bayttır; Türkçe harfler 2, € 3, emoji 4 bayt tutar. UTF-8 bu yüzden değişken uzunlukludur.

Metin Temsili

Dizgiler

Dizgi (string), sıralı karakterlerden oluşan veri tipidir.

Merhaba␣+DünyaMerhaba␣Dünyauzunluk: 13 karakter · UTF-8'de 14 bayt (“ü” 2 bayt)
Uzunluk

Karakter veya kod birimi sayısı.

Birleştirme

İki dizgiyi uç uca ekleme.

Arama

Bir karakteri veya alt dizgiyi bulma.

Karşılaştırma

İçerik ve sıralama ilişkisini denetleme.

Ekranda görünen karakter sayısı ile bellekteki bayt (kod birimi) sayısı her zaman aynı değildir.

Veri Temsili

Yapılandırılmış Bilgi

Bitler daha büyük yapılar içinde düzenlenerek anlam kazanır.

Bit1Bayt01000001Karakter“A”Alanad = “Ayşe”Kayıtno · ad · notDosyakayıt 1, 2, 3 …123Ayşe
  • Bir öğrenci kaydı numara, ad ve not alanlarından oluşabilir.
  • Dosya biçimi, alanların nasıl sıralandığını ve yorumlandığını tanımlar.

Veri Temsili

Veri Temsilinde Sık Yapılan Hatalar

Sık yapılan hataDoğrusu
Tabanı yazmadan okumak: “1101 bin yüz birdir”1101₂ = 13. Taban alt simgeyle ya da 0b/0x önekiyle belirtilir.
10₁₆'yı on sanmak10₁₆ = 16; onaltılıkta on, A ile yazılır.
İkiye tümleyende yalnız bitleri çevirmek11111010 birler tümleyenidir (−5 değil); 1 eklenince 11111011 = −5.
Kayan noktalı sonuçları == ile karşılaştırmak0,1 + 0,2 ≠ 0,3; |a − b| küçük bir toleranstan küçük mü diye bakılır.
Rakam karakteri ile sayıyı karıştırmak'7' karakterinin kodu 55'tir; sayısal değeri '7' − '0' = 7.
Karakter sayısını bayt sayısı sanmakUTF-8'de “çağ” 3 karakter, 5 bayttır (ç 2 + a 1 + ğ 2).
Elde ile işaretli taşmayı karıştırmakElde işaretsiz yorumun, taşma işaretli yorumun sorunudur; biri olurken öteki olmayabilir.

Bilgisayar Mimarisi

Mantık Kapıları

ABANDORXORNOT A
000001
010111
100110
111100
  • AND iki girdi de 1 ise, OR girdilerden en az biri 1 ise 1 verir; NOT girdiyi tersine çevirir.
  • XOR (özel veya): girdiler farklıysa 1. Toplayıcıda sonuç basamağını üretir.
ABAND (VE)ABOR (VEYA)ABXOR (ÖZEL VEYA)ANOT (DEĞİL)

Kapılar birkaç transistörden kurulur; işlemcideki tüm işlemler bu temel kapıların birleşiminden oluşur.

Bilgisayar Mimarisi · Adım adım

Yarım Toplayıcı: Kapılardan Toplamaya

A?B?XORANDSUMCARRYA XOR BA AND BSonuç iki bitle yazılır: CARRY SUM

Yarım toplayıcı iki tek bitlik sayıyı (A, B) toplar. SUM = A XOR B sonuç basamağını, CARRY = A AND B eldeyi verir. Yalnızca iki kapı yeterlidir.

A0B0XORANDSUM = 0CARRY = 0A XOR BA AND B0 + 0 = 00₂ = 0(CARRY, SUM) sırasıyla yazılır

0 + 0: XOR(0, 0) = 0, AND(0, 0) = 0 → 00₂ = 0.

A0B1XORANDSUM = 1CARRY = 0A XOR BA AND B0 + 1 = 01₂ = 1(CARRY, SUM) sırasıyla yazılır

0 + 1: XOR(0, 1) = 1, AND(0, 1) = 0 → 01₂ = 1. Elde oluşmadı.

A1B1XORANDSUM = 0CARRY = 1A XOR BA AND B1 + 1 = 10₂ = 2(CARRY, SUM) sırasıyla yazılır

1 + 1: XOR(1, 1) = 0 (basamak 0), AND(1, 1) = 1 (elde 1) → 10₂ = 2. Onluk sistemdeki 9 + 1 = 10 gibi, elde bir üst basamağa gider.

Yarım toplayıcı gelen eldeyi almaz. Çok bitli toplama için üç girişli tam toplayıcı gerekir (iki yarım toplayıcı ve bir OR kapısı).

Bilgisayar Mimarisi · Adım adım

Tam Toplayıcı Zinciri: 0110 + 0111

TT0tam toplayıcıa0 = 0b0 = 1s0 = ?TT1tam toplayıcıa1 = 1b1 = 1s1 = ?TT2tam toplayıcıa2 = 1b2 = 1s2 = ?TT3tam toplayıcıa3 = 0b3 = 0s3 = ?c=0c=?c=?c=?c=?

Dört tam toplayıcı (TT) zincir hâlinde bağlıdır: her birinin elde çıkışı soldakinin elde girişidir. 6 + 7 hesaplanacak.

TT0tam toplayıcıa0 = 0b0 = 1s0 = 1TT1tam toplayıcıa1 = 1b1 = 1s1 = ?TT2tam toplayıcıa2 = 1b2 = 1s2 = ?TT3tam toplayıcıa3 = 0b3 = 0s3 = ?c=0c=0c=?c=?c=?

i = 0: a0 = 0, b0 = 1, c = 0 → t = 1, s0 = 1; iki giriş birden 1 olmadığı için elde 0.

TT0tam toplayıcıa0 = 0b0 = 1s0 = 1TT1tam toplayıcıa1 = 1b1 = 1s1 = 0TT2tam toplayıcıa2 = 1b2 = 1s2 = ?TT3tam toplayıcıa3 = 0b3 = 0s3 = ?c=0c=0c=1c=?c=?

i = 1: 1 + 1 + 0 → t = 0, s1 = 0, a1 AND b1 = 1 olduğundan elde 1 (onluktaki 5 + 5 gibi).

TT0tam toplayıcıa0 = 0b0 = 1s0 = 1TT1tam toplayıcıa1 = 1b1 = 1s1 = 0TT2tam toplayıcıa2 = 1b2 = 1s2 = 1TT3tam toplayıcıa3 = 0b3 = 0s3 = ?c=0c=0c=1c=1c=?

i = 2: 1 + 1 + 1 = 3 = 11₂ → s2 = 1, elde yine 1.

TT0tam toplayıcıa0 = 0b0 = 1s0 = 1TT1tam toplayıcıa1 = 1b1 = 1s1 = 0TT2tam toplayıcıa2 = 1b2 = 1s2 = 1TT3tam toplayıcıa3 = 0b3 = 0s3 = 1c=0c=0c=1c=1c=0

i = 3: 0 + 0 + 1 → s3 = 1, elde 0. Son elde 0 olduğu için sonuç 4 bite sığdı.

TT0tam toplayıcıa0 = 0b0 = 1s0 = 1TT1tam toplayıcıa1 = 1b1 = 1s1 = 0TT2tam toplayıcıa2 = 1b2 = 1s2 = 1TT3tam toplayıcıa3 = 0b3 = 0s3 = 1c=0c=0c=1c=1c=0

Sonuç 1101₂ = 13 = 6 + 7 ✓. Elde sağdan sola dalga gibi ilerler (dalgalı elde toplayıcı): her TT bir öncekini bekler, bu yüzden bit sayısı arttıkça gecikme büyür.

a ← 0110  ; 6
b ← 0111  ; 7
c ← 0     ; ilk elde
i = 0, 1, 2, 3 için: ; sağdan sola
  t ← a[i] XOR b[i]
  s[i] ← t XOR c
  c ← (a[i] AND b[i]) OR (t AND c)
yaz(c, s)

Bilgisayar Mimarisi

Depolanan Program Kavramı

Bellek1000LOAD 10041001ADD 10051002STORE 10061003HALT1004121005810060programveriaynı bellek, aynı adres sistemi

Program komutları ve işlenecek veriler aynı bellekte sayısal kodlar olarak saklanır. İşlemci komutları sırayla okuyup yürütür.

Esneklik

Aynı donanım farklı programlarla farklı görevler yapar.

Güncelleme

Davranış donanımı değiştirmeden yazılımla değişebilir.

Genel amaçlılık

Tek sistem hesaplama, iletişim ve medya görevlerini yürütebilir.

Bilgisayar Mimarisi

Getir–Çöz–Yürüt Döngüsü

1. GetirPC'deki adresten komut → IRPC ← PC + 12. Çözkontrol birimiopcode + işlenen3. YürütALU / bellek işlemisonuç yazmaca / belleğetekrar
  • Program sayacı (PC) sıradaki komutun adresini, komut yazmacı (IR) getirilen komutu tutar.
  • Kontrol birimi işlem kodunu (opcode) yorumlar.
  • ALU veya başka bir birim işlemi gerçekleştirir.
  • Komut ve veri çoğu zaman RAM yerine işlemcideki önbellekten gelir; yazmaç ve önbellek RAM’den çok daha hızlıdır.

Bilgisayar Mimarisi

CPU'nun Temel Bölümleri

CPUKontrol birimisıra ve sinyallerALU+ − AND OR karşılaştırYazmaçlarPCIRACCÖnbelleksık kullanılan veri ve komutRAM
Kontrol birimi

Komutların sırasını ve veri hareketini yönetir.

ALU

Aritmetik ve mantıksal işlemleri yapar.

Yazmaçlar

İşlem sırasında kullanılan küçük ve hızlı depolama alanlarıdır.

Önbellek

Sık kullanılan veri ve komutları işlemciye yakın tutar.

Bilgisayar Mimarisi · Adım adım

Veri Yolları: Bellekten Okuma

CPUBellek[1004] = 12Adres yoluKontrol yoluVeri yoluG/Ç birimleri da aynı yollara bağlı

Üç yol CPU'yu bellek ve G/Ç birimlerine bağlar. Örnek: CPU, 1004 adresindeki değeri okuyacak.

CPUBellek[1004] = 12Adres yolu1004Kontrol yoluVeri yoluG/Ç birimleri da aynı yollara bağlı

Adres yolu: CPU hangi hücreyi istediğini gönderir → 1004. Tek yönlüdür (CPU'dan çıkar).

CPUBellek[1004] = 12Adres yoluKontrol yoluOKUVeri yoluG/Ç birimleri da aynı yollara bağlı

Kontrol yolu: CPU OKU sinyalini gönderir (yazma olsaydı YAZ). Zamanlama sinyalleri de bu yoldadır.

CPUBellek[1004] = 12ACC ← 12Adres yoluKontrol yoluVeri yolu12G/Ç birimleri da aynı yollara bağlı

Veri yolu: bellek hücrenin içeriğini (12) CPU'ya gönderir. Veri yolu çift yönlüdür.

YolGörev
Veri yoluCPU, bellek ve aygıtlar arasında veriyi taşır.
Adres yoluİşlem yapılacak bellek veya aygıt konumunu belirtir.
Kontrol yoluOkuma, yazma ve zamanlama sinyallerini taşır.

Bilgisayar Mimarisi

Bellek Adresleri

Adresİçerik
1000LOAD 1004
1001ADD 1005
1002STORE 1006
1003HALT
100412
10058
10060
  • Her bellek hücresinin bir adresi vardır.
  • Komutlar adres kullanarak veriye ulaşır.
  • Aynı bit dizisi komut veya veri olarak yorumlanabilir.
  • HALT olmasaydı CPU 1004'teki 12'yi de komut sanıp çalıştırmaya çalışırdı.
1000LOAD 10041001ADD 10051002STORE 10061003HALT1004121005810060program (komutlar)veriPC sırayla ilerler: getir → çöz → yürütHALT olmasaydı: 12 komut sanılırdı

Bilgisayar Mimarisi · Endianness

Çok Baytlı Değerler ve Bayt Sırası

Bellek bayt adreslidir: her adres 1 bayt tutar. 32 bitlik bir int 4 ardışık adrese yayılır; baytların hangi sırayla yazılacağına bayt sırası denir.

adres 100adres 101adres 102adres 103Büyük uçlu12345678Küçük uçlu785634120x12345678 =12 34 56 78(12 en anlamlı)
Büyük uçlu

En anlamlı bayt en küçük adreste. Ağ protokolleri bu sırayı kullanır (ağ bayt sırası).

Küçük uçlu

En az anlamlı bayt en küçük adreste. x86-64 ve yaygın ARM sistemleri bu sırayla çalışır.

Sorun

Ham ikili veri ters sıralı makinede okunursa 0x12345678, 0x78563412 olarak görülür.

Tek bayt (ör. ASCII karakter) için sıra sorunu yoktur; UTF-8 de bayt bayt okunduğu için bayt sırasından etkilenmez.

Bilgisayar Mimarisi · Getir–çöz–yürüt adım adım

Programı Adım Adım Çalıştırma

GETİRÇÖZYÜRÜTCPUPC1000IR—ACC0ALUadres yoluveri yolu1000LOAD 10041001ADD 10051002STORE 10061003HALT1004121005810060

Başlangıç: PC = 1000 (ilk komutun adresi), ACC = 0. CPU döngüye başlar.

GETİRÇÖZYÜRÜTCPUPC1001IRLOAD 1004ACC0ALUadres yoluveri yolu1000LOAD 10041000LOAD 10041001ADD 10051002STORE 10061003HALT1004121005810060

Getir: PC'deki 1000 adres yoluna çıkar, komut LOAD 1004 veri yoluyla IR'ye gelir. PC bir artar → 1001.

GETİRÇÖZYÜRÜTCPUPC1001IRLOAD 1004ACC0ALUadres yoluveri yolu1000LOAD 10041001ADD 10051002STORE 10061003HALT1004121005810060

Çöz: kontrol birimi IR'yi ayırır: opcode LOAD, adres 1004 → bellek[1004] okunup ACC'ye yüklenecek.

GETİRÇÖZYÜRÜTCPUPC1001IRLOAD 1004ACC12ALUadres yoluveri yolu1004121000LOAD 10041001ADD 10051002STORE 10061003HALT1004121005810060

Yürüt: 1004 adresi okunur, 12 ACC'ye yüklenir.

GETİRÇÖZYÜRÜTCPUPC1002IRADD 1005ACC12ALUadres yoluveri yolu1001ADD 10051000LOAD 10041001ADD 10051002STORE 10061003HALT1004121005810060

Getir: PC'deki 1001 adres yoluna çıkar, komut ADD 1005 veri yoluyla IR'ye gelir. PC bir artar → 1002.

GETİRÇÖZYÜRÜTCPUPC1002IRADD 1005ACC12ALUadres yoluveri yolu1000LOAD 10041001ADD 10051002STORE 10061003HALT1004121005810060

Çöz: kontrol birimi IR'yi ayırır: opcode ADD, adres 1005 → bellek[1005] ACC'ye eklenecek.

GETİRÇÖZYÜRÜTCPUPC1002IRADD 1005ACC20ALU12 + 8= 20adres yoluveri yolu100581000LOAD 10041001ADD 10051002STORE 10061003HALT1004121005810060

Yürüt: 1005 adresindeki 8 okunur, ALU 12 + 8 = 20 hesaplar, sonuç ACC'ye yazılır.

GETİRÇÖZYÜRÜTCPUPC1003IRSTORE 1006ACC20ALUadres yoluveri yolu1002STORE 10061000LOAD 10041001ADD 10051002STORE 10061003HALT1004121005810060

Getir: PC'deki 1002 adres yoluna çıkar, komut STORE 1006 veri yoluyla IR'ye gelir. PC bir artar → 1003.

GETİRÇÖZYÜRÜTCPUPC1003IRSTORE 1006ACC20ALUadres yoluveri yolu1000LOAD 10041001ADD 10051002STORE 10061003HALT1004121005810060

Çöz: kontrol birimi IR'yi ayırır: opcode STORE, adres 1006 → ACC bellek[1006]'e yazılacak.

GETİRÇÖZYÜRÜTCPUPC1003IRSTORE 1006ACC20ALUadres yoluveri yolu1006201000LOAD 10041001ADD 10051002STORE 10061003HALT10041210058100620

Yürüt: ACC'deki 20 veri yoluyla 1006 adresine yazılır.

GETİRÇÖZYÜRÜTCPUPC1004IRHALTACC20ALUadres yoluveri yolu1003HALT1000LOAD 10041001ADD 10051002STORE 10061003HALT10041210058100620

Getir: PC'deki 1003 adres yoluna çıkar, komut HALT veri yoluyla IR'ye gelir. PC bir artar → 1004.

GETİRÇÖZYÜRÜTCPUPC1004IRHALTACC20ALUdurduadres yoluveri yolu1000LOAD 10041001ADD 10051002STORE 10061003HALT10041210058100620

Çöz: opcode HALT → CPU durur. Sonuç bellek[1006] = 20. 4 komut, 4 getir–çöz–yürüt turu.

1000: LOAD  1004 ; ACC ← bellek[1004]
1001: ADD   1005 ; ACC ← ACC + bellek[1005]
1002: STORE 1006 ; bellek[1006] ← ACC
1003: HALT       ; dur
1004: 12         ; veri
1005: 8          ; veri
1006: 0          ; sonuç

Bilgisayar Mimarisi · Getir–çöz–yürüt adım adım

Dallanma: Döngüde PC Nasıl Değişir?

1000: LOAD  1010  ; ACC ← sayaç
1001: JUMPZ 1008  ; ACC = 0 ise atla
1002: ADD   1011  ; ACC ← ACC + toplam
1003: STORE 1011  ; toplam ← ACC
1004: LOAD  1010
1005: SUB   1012  ; ACC ← ACC − 1
1006: STORE 1010  ; sayaç ← ACC
1007: JUMP  1000  ; PC ← 1000
1008: HALT
1010: 2   1011: 0   1012: 1
CPUPC1000ACC0Bellek1010 sayaç21011 toplam01012 bir1

sayaç 2'den geriye sayar; döngü bitince toplam = 2 + 1 olacak.

CPUPC1002ACC2Bellek1010 sayaç21011 toplam01012 bir1

LOAD → ACC = 2. JUMPZ: ACC ≠ 0, atlama yok; PC sıradaki 1002'de kalır.

CPUPC1004ACC2Bellek1010 sayaç21011 toplam21012 bir1

ADD: 2 + 0 = 2; STORE → toplam = 2.

CPUPC1007ACC1Bellek1010 sayaç11011 toplam21012 bir1

LOAD, SUB, STORE: sayaç 2 − 1 = 1.

CPUPC1000ACC1Bellek1010 sayaç11011 toplam21012 bir1PC ← 1000

JUMP 1000: getirmede 1008 olan PC'nin üzerine 1000 yazılır. Döngü başa döndü.

CPUPC1000ACC0Bellek1010 sayaç01011 toplam31012 bir1PC ← 1000

İkinci tur aynı 8 komutu yürütür: toplam = 1 + 2 = 3, sayaç = 0, yine JUMP.

CPUPC1008ACC0Bellek1010 sayaç01011 toplam31012 bir1PC ← 1008

LOAD → ACC = 0. JUMPZ bu kez atlar: PC ← 1008, döngü gövdesi atlanır.

CPUPC1009ACC0Bellek1010 sayaç01011 toplam31012 bir1

HALT: CPU durur. 19 komut getirildi (8 + 8 + 3). Java'daki while döngüsü bu tür koşullu ve koşulsuz atlamalara dönüşür.

Bilgisayar Mimarisi

von Neumann Mimarisi

CPUKontrol birimiALUYazmaçlar (PC, IR, ACC)Bellekprogram komutları + veriler(ortak)tek yol: darboğazGirişÇıkış
  • Program komutları ve veriler ortak bellekte tutulur.
  • CPU komutları sırayla işler; dallanma komutları bu sırayı değiştirebilir.
  • Komut ve veri aynı yoldan geldiği için CPU–bellek aktarımı performansı sınırlar (von Neumann darboğazı).

Bilgisayar Mimarisi

von Neumann ve Harvard Mimarisi

von NeumannCPUBellekkomut + veritek yolHarvardkomut belleğiCPUveri belleği
Özellikvon NeumannHarvard
BellekKomut ve veri ortak bellekteKomut ve veri ayrı belleklerde
YolTek yol: komut ve veri sırayla taşınırİki yol: komut ve veri aynı anda okunur
EsneklikProgram, veri gibi yüklenip değiştirilebilirProgram belleği çoğunlukla sabittir (flash)
Yaygın kullanımGenel amaçlı bilgisayarlarMikrodenetleyiciler, sinyal işlemciler

Günümüz işlemcileri ikisini birleştirir: ana bellek ortaktır, çekirdeğe en yakın L1 önbellek ise komut ve veri için ayrıdır (değiştirilmiş Harvard).

Bilgisayar Mimarisi

Komutların Kodlanması

Makine komutu genellikle yapılacak işlemi ve kullanılacak değer veya adresleri belirtir.

ADD 1005 →0010001111101101opcode (4 bit) = 2 → ADDadres (12 bit) = 1005Örnek (varsayımsal) kodlar: HALT = 0000 · LOAD = 0001 · ADD = 0010 · STORE = 0011
Opcode (işlem kodu)

İşlemin türünü tanımlar.

ADD
İşlenen (operand)

İşlemde kullanılacak yazmaç, değer veya adres.

R1, R2
Komut biçimi

Bit alanlarının sayısını ve yerini mimari belirler.

Komut kümesi

İşlemcinin doğrudan anlayabildiği komutların tamamı.

Bilgisayar Mimarisi · RISC / CISC

Komut Kümesi Tasarımı: RISC ve CISC

ÖzellikRISCCISC
Komut kümesiAz sayıda, basit komutÇok sayıda, karmaşık komut
Komut uzunluğuSabit (ör. 32 bit)Değişken (x86-64’te 1–15 bayt)
Bellek erişimiYalnızca LOAD / STORE komutlarıİşlem komutları doğrudan bellek işleneni alabilir
ÖrnekARM, RISC-Vx86-64

RISC: bellekteki a = a + b

LOAD  R1, a
LOAD  R2, b
ADD   R1, R1, R2
STORE R1, a

CISC (x86-64): aynı iş

MOV EAX, [b]
ADD [a], EAX

4 komut yerine 2 komut; ama ikinci komut içeride okuma, toplama ve yazma adımlarına bölünür.

Bilgisayar Mimarisi

Mimari Sınırlar

Sonlu bellek

Aynı anda saklanabilecek veri miktarı sınırlıdır.

Sonlu hız

Her komut zaman ve enerji tüketir.

Temsil hataları

Sınırlı bit sayısı taşma ve yuvarlama üretebilir.

Veri darboğazı

CPU, bellekteki veriyi beklerken boş kalabilir.

Paralellik sınırı

Her problem eşit ölçüde paralelleştirilemez.

Güvenlik

Program ve veri aynı sistem kaynaklarını paylaştığı için yalıtım gerekir.

CPU1 tur ≈ 0,3 ns (3 GHz)RAMerişim ≈ 100 nsdar veri yoluveri bekleniyor…100 ns ÷ 0,3 ns ≈ 300 tur: önbellek bu bekleyişi azaltmak için vardır

Bilgisayar Mimarisi · Örnek

Performans: Komut Sayısı, CPI ve Saat Hızı

CPU süresi = komut sayısı × CPI ÷ saat hızı

CPI: komut başına ortalama saat turu sayısı

Program: 2 × 10⁹ komutSaat hızıCPISüre
İşlemci A3 GHz1,52 × 10⁹ × 1,5 ÷ (3 × 10⁹) = 1,0 sn
İşlemci B4 GHz2,52 × 10⁹ × 2,5 ÷ (4 × 10⁹) = 1,25 sn
A, daha iyi derleyiciyle (1,6 × 10⁹ komut)3 GHz1,51,6 × 10⁹ × 1,5 ÷ (3 × 10⁹) = 0,8 sn
Komut sayısı

Algoritma, derleyici ve komut kümesine bağlıdır.

CPI

İç tasarıma ve bellek beklemelerine (önbellek ıskaları) bağlıdır.

Saat hızı

Üretim teknolojisi, güç ve ısı sınırlarına bağlıdır.

B’nin saat hızı daha yüksek olduğu hâlde A 1,25 kat hızlıdır: tek bir sayı performansı belirlemez.

Programlama

Programlama Soyutlama Düzeyleri

Problem ve algoritma“iki sayıyı topla”Yüksek düzeyli dil · Javatotal = a + b;Derleyici / sanal makineJava bayt kodu: iaddAssemblyADD R1, bMakine komutları0010 0011 1110 1101Sayısal devrelertoplayıcı devre · transistörlersoyuttan somuta

Her düzey bir alttakinin ayrıntısını gizler. Yüksek düzeyli dil okunabilir ve taşınabilirdir; assembly ve onun ikili karşılığı olan makine komutları belirli bir işlemci mimarisine özgüdür. Örnek satırlar gösterim amaçlıdır.

Programlama · Kodu adım adım çalıştır

Kod İzleme: total = a + b

CPUR10ALUBelleka12b8total0

Tek Java satırı işlemcide üç komuta dönüşür. Bellekte a = 12, b = 8 var.

CPUR112ALUBelleka12b8total0

LOAD: a'nın değeri bellekten yazmaca taşınır → R1 = 12. ALU yalnızca yazmaçlarla çalışır.

CPUR120ALU12+8=20Belleka12b8total0

ADD: b okunur, ALU 12 + 8 = 20 hesaplar, sonuç R1'e yazılır.

CPUR120ALUBelleka12b8total20

STORE: R1'deki 20 belleğe, total değişkeninin yerine yazılır. Java satırı tamamlandı: total = 20.

// Java: int total = a + b;
LOAD  R1, a      ; R1 ← a
ADD   R1, b      ; R1 ← R1 + b
STORE R1, total  ; total ← R1

Özet

Bölüm Özeti

  • Bilgisayar bütün verileri bit dizileriyle temsil eder.
  • İkili gösterim tam sayılar için kesin, kayan nokta bazı ondalıklar için yaklaşık olabilir.
  • ASCII ve Unicode karakterleri sayısal kodlarla eşleştirir.
  • Saklanan program yaklaşımında komutlar ve veriler bellekte tutulur.
  • Mantık kapıları toplayıcı gibi devrelerin yapı taşıdır; ikili toplama tam toplayıcı zinciriyle yapılır.
  • CPU, komutları getir–çöz–yürüt döngüsünde yürütür.
  • Yüksek düzeyli diller donanım ayrıntılarını soyutlar.

Özet

Kontrol Soruları

  1. 1101₂ sayısı onluk sistemde kaçtır?
  2. 8 bit işaretli tam sayı aralığı nedir?
  3. ASCII ile Unicode arasındaki temel fark nedir?
  4. Program komutlarının bellekte saklanması hangi avantajı sağlar?
  5. Veri, adres ve kontrol yollarının görevleri nelerdir?
  6. Bir assembly komutu ile makine komutu arasındaki ilişki nedir?

Özet

Alıştırmalar

  1. 8 bit ikiye tümleyen gösterimde 11111110 hangi sayıdır?
  2. 3F₁₆ sayısını ikili ve onluk sisteme çevirin.
  3. “ç” (U+00E7) karakterini UTF-8 ile kodlayın; kaç bayt tutar?
  4. 8 bit işaretsiz yazmaçta 250 + 10 işleminin sonucu ne olur? Neden?
  5. “Programı Adım Adım Çalıştırma” örneğinde 1004 = 7 ve 1005 = 5 olsaydı program bitince 1006'da ne olurdu? Kaç komut getirilirdi?
  6. int fark = a - b; satırı için LOAD / SUB / STORE ile assembly karşılığını yazın.
Cevapları göster
  1. Tersi alınıp 1 eklenir: 00000001 + 1 = 00000010 = 2 → sayı −2.
  2. 3F₁₆ = 0011 1111₂ = 63.
  3. U+00E7 = 00011100111 → 11000011 10100111 = C3 A7, 2 bayt.
  4. 260 8 bite sığmaz; 9. bit atılır → 4 (taşma).
  5. 1006 = 7 + 5 = 12; 4 komut getirilir (LOAD, ADD, STORE, HALT).
  6. LOAD R1, a · SUB R1, b · STORE R1, fark.

Özet

Kaynaklar

  • Patterson ve Hennessy, Computer Organization and Design.
  • Bryant ve O'Hallaron, Computer Systems: A Programmer's Perspective.
  • Unicode Consortium, The Unicode Standard.
  • IEEE 754, Floating-Point Arithmetic.

Son

Bilgisayarlar
Sonraki sunum: İnternet · Çalışma soruları · Simülatörler: Sayı Tabanı Dönüştürücü, Mantık Kapıları, Basit CPU: Getir–Çöz–Yürüt · Terim sözlüğü
1 / 1Sercan KÜLCÜ, Tüm hakları saklıdır.