von Neumann modeli ve komut döngüsü
Bilgisayarın beş parçası, PC/IR/MAR/MDR'nin görevleri ve bir komutun altı fazı (FETCH, DECODE, EVALUATE ADDRESS, FETCH OPERANDS, EXECUTE, STORE RESULT). LC-3 örnekleriyle.
İlk dört haftada parçaları gördün: kapılar, toplayıcı, mux, register, bellek. Bu hafta onları bir araya getirip bilgisayar yapıyoruz. 1946’da John von Neumann’ın tarif ettiği model bugün hâlâ her işlemcinin temelinde. Bu sayfada modelin beş parçasını ve bir komutun nasıl işlendiğini (instruction cycle) öğreneceksin. Örneklerde LC-3 komutlarını kullanıyoruz; komutların ayrıntısı 7-8. haftada.
Vizede bu konudan genelde kısa cevap gelir: beş parçayı say, PC/IR/MAR/MDR ne tutar, altı fazı sırala, FETCH adımlarını yaz, PC = x3000 ise FETCH sonrası ne olur.
von Neumann modeli
+-------------------------------+
| MEMORY |
| MAR MDR |
+-------------------------------+
^ ^
| |
INPUT ---> +------------------------+ ---> OUTPUT
(klavye) | PROCESSING UNIT | (ekran)
| ALU TEMP (R0-R7)|
+------------------------+
^
|
+------------------------+
| CONTROL UNIT |
| PC IR |
+------------------------+
| Parça | Görevi | LC-3’te |
|---|---|---|
| Memory | Program ve veriyi saklar | konum × 16 bit, MAR ve MDR |
| Processing unit | Hesap yapar | ALU (ADD, AND, NOT), R0-R7 |
| Input | Dış dünyadan veri alır | Klavye |
| Output | Dış dünyaya veri verir | Ekran (monitor) |
| Control unit | Hangi adımın yapılacağını yönetir | PC, IR, kontrol FSM’i |
Memory: MAR ve MDR
Belleğe erişmenin tek yolu bu iki register’dır.
- Okuma: adresi MAR’a yaz, bellek o konumun içeriğini MDR’ye koyar.
- Yazma: adresi MAR’a, değeri MDR’ye yaz, yazma sinyalini (WE) ver.
Processing unit
İşlemleri yapan ALU (arithmetic and logic unit) ve ara sonuçları tutan küçük, hızlı register’lardan oluşur. Belleğe gitmek yavaştır; bu yüzden sık kullanılan değerler register’da tutulur. LC-3’te 8 tane var: R0-R7. ALU’nun bir seferde işlediği bit sayısına word length denir (LC-3: 16 bit).
Control unit: PC ve IR
- PC (program counter): sıradaki komutun adresi. Adı “sayaç” ama aslında bir işaretçi.
- IR (instruction register): şu an işlenen komutun kendisi.
Kontrol birimi bir FSM’dir (4. hafta). Her saat çevriminde hangi sinyallerin açılacağına karar verir.
Stored-program kavramı
Programın komutları da bellekte bit olarak durur, aynı veri gibi. Bilgisayar yeni bir iş için yeniden kablolanmaz; belleğe yeni bir program yüklenir. Buna stored-program kavramı denir ve von Neumann modelinin özüdür.
TUZAK · PC’yi IR ile karıştırmak. PC’de bir adres (x3001 gibi), IR’de bir komut (x1263 gibi) var. “PC şu anki komutu tutar” yazmak klasik hata: FETCH’ten sonra PC zaten bir sonrakini gösteriyor.
Komut (instruction)
Bir komut iki parçadan oluşur: opcode (ne yapılacak) ve operands (neyle yapılacak). LC-3’te her komut 16 bittir, opcode en üstteki 4 bit (IR[15:12]).
x1263 = 0001 001 001 1 00011
ADD R1 R1 imm #3 → ADD R1, R1, #3 (R1 ← R1 + 3)
Komut döngüsü (instruction cycle)
Bilgisayar her komut için aynı altı fazı sırayla yapar, sonra bir sonraki komuta geçer. Durmadan, HALT’a kadar.
| # | Faz | Ne olur? |
|---|---|---|
| 1 | FETCH | Komut bellekten IR’ye getirilir, PC artırılır |
| 2 | DECODE | Opcode çözülür: hangi komut, operandlar nerede? |
| 3 | EVALUATE ADDRESS | Bellek erişimi gerekiyorsa adres hesaplanır |
| 4 | FETCH OPERANDS | Operandlar register’dan ya da bellekten alınır |
| 5 | EXECUTE | İşlem yapılır (ALU toplar, AND’ler…) |
| 6 | STORE RESULT | Sonuç hedefine (register ya da bellek) yazılır |
FETCH ayrıntısı
1. MAR ← PC (adresi belleğe gönder)
PC ← PC + 1 (aynı çevrimde PC artar)
2. MDR ← M[MAR] (bellek okunur, birkaç çevrim sürebilir)
3. IR ← MDR (komut IR'de)
PC = x3000 ile başlarsan FETCH bitince PC = x3001, IR = M[x3000]. PC, komut çalışmadan önce artar. Bu ayrıntı 7. haftada PC-relative adres hesabında çok önemli olacak: offset, artmış PC’ye eklenir.
DECODE
IR[15:12] bir 4-to-16 decoder’a girer. Decoder’ın tam bir çıkışı 1 olur: komut belirlenir. Kalan 12 bit, komuta göre farklı alanlar olarak yorumlanır.
Her komut her fazı kullanmaz
| Komut | EVALUATE ADDRESS | FETCH OPERANDS | EXECUTE | STORE RESULT |
|---|---|---|---|---|
ADD R1, R2, R3 | yok | R2, R3 okunur | ALU toplar | R1 ← sonuç |
LDR R4, R2, #-3 | R2 + (-3) | MDR ← M[adres] | yok | R4 ← MDR |
LD R1, ETIKET | PC + offset | MDR ← M[adres] | yok | R1 ← MDR |
ST R1, ETIKET | PC + offset | R1 okunur | yok | M[adres] ← R1 |
BRz ETIKET | PC + offset | yok | Z = 1 ise PC ← adres | yok |
Çözümlü örnek
Bellekte x3000 adresinde LDR R4, R2, #-3 var, R2 = x4005 ve M[x4002] = x00AB.
FETCH MAR ← x3000, PC ← x3001, MDR ← M[x3000], IR ← MDR
DECODE opcode 0110 = LDR, DR = R4, BaseR = R2, offset6 = -3
EVALUATE ADDRESS x4005 + (-3) = x4002
FETCH OPERANDS MAR ← x4002, MDR ← M[x4002] = x00AB
EXECUTE (yok)
STORE RESULT R4 ← x00AB, condition code: P (pozitif)
sonuç: R4 = x00AB, PC = x3001
Bu komut belleğe iki kez gitti: bir kez komutu getirmek, bir kez veriyi okumak için. ADD bir kez gider (sadece FETCH), LDI üç kez (komut, adres, veri).
Sıralı akışı değiştirmek
Normalde her FETCH, PC’yi bir artırır; program satır satır ilerler. Kontrol komutları (control instructions) bu akışı değiştirir. Örneğin BRz komutu, son yazılan değer sıfırsa EXECUTE fazında PC’ye yeni bir adres yazar. Bir sonraki FETCH oradan başlar. Döngüler ve if’ler böyle kurulur (8. hafta).
Saat ve HALT
Kontrol birimi saat çevrimiyle çalışır. Bir komut birkaç çevrim sürer (bellek erişimi genelde en yavaş kısım). Saat durursa bilgisayar durur. LC-3’te HALT (TRAP x25) komutu, işletim sisteminin bir rutinini çağırarak saat sinyalini kapatır.
Sık yapılan hatalar
| Yanlış düşünce | Doğrusu |
|---|---|
| PC şu anki komutu tutar | PC sıradaki komutun adresi; komut IR’de |
| PC komut bittikten sonra artar | FETCH’te, komut çalışmadan önce artar |
| MAR veriyi tutar | MAR adres, MDR veri |
| Her komut altı fazın hepsini kullanır | ADD’de EVALUATE ADDRESS yok, LD’de EXECUTE yok |
| Fazlar: FETCH, EXECUTE, DECODE … | FETCH, DECODE, EVALUATE ADDRESS, FETCH OPERANDS, EXECUTE, STORE RESULT |
| Program ayrı, veri ayrı bellekte | Stored program: aynı bellek |
| x30FF + 1 = x3000 | x3100 |
| Dallanma FETCH’te olur | EXECUTE’ta PC değiştirilir |
Kendini test et
Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.
Name the five components of the von Neumann model.
Cevabı göster
Memory (MAR ve MDR ile), processing unit (ALU ve geçici register'lar), input (klavye), output (ekran) ve control unit (PC ve IR). Program ve veri aynı bellekte durur.
What does the program counter (PC) contain? What does the instruction register (IR) contain?
Cevabı göster
PC bir adres tutar: sıradaki komutun bellekteki yeri. IR ise komutun kendisini (16 bitlik makine kodunu) tutar. PC'nin adı yanıltıcıdır; sayaç değil, işaretçidir (instruction pointer).
Which register holds the address for a memory access, and which holds the data being read or written?
Cevabı göster
Bellek okumak için adres MAR'a (memory address register) yazılır, bellek okunan değeri MDR'ye (memory data register) koyar. Yazmak için adres MAR'a, veri MDR'ye konur ve yazma sinyali verilir.
List the six phases of the instruction cycle in order.
Cevabı göster
Her komut bu sırayı izler. Ama her komut her fazı kullanmaz: ADD bellek adresi hesaplamaz, LD'nin EXECUTE fazı boştur.
Write the register transfers of the FETCH phase.
Cevabı göster
Önce PC'deki adres MAR'a gider ve aynı anda PC bir artırılır. Bellek okunur, komut MDR'ye gelir. Son adımda MDR'deki komut IR'ye kopyalanır. PC, komut çalışmadan ÖNCE artar.
Before the FETCH phase, PC = x30FF. What is the PC after FETCH?
Cevabı göster
FETCH sırasında PC ← PC + 1. x30FF + 1 = x3100 (hex'te F + 1 = 10, elde sola gider). PC, komut ne olursa olsun önce artar; dallanma komutu bunu sonra EXECUTE'ta değiştirebilir.
Which phase does ADD R1, R2, R3 not need?
Cevabı göster
ADD'in operandları register'da. Bellek adresi hesaplanmaz. FETCH OPERANDS'ta R2 ve R3 okunur, EXECUTE'ta ALU toplar, STORE RESULT'ta sonuç R1'e yazılır.
LDR R4, R2, #-3 is executed with R2 = x4005. What address is computed in the EVALUATE ADDRESS phase, and in which phase is memory read?
Cevabı göster
EVALUATE ADDRESS: R2 + (-3) = x4005 - 3 = x4002. FETCH OPERANDS: MAR ← x4002, MDR ← M[x4002]. STORE RESULT: R4 ← MDR. EXECUTE fazı bu komutta boştur.
What is meant by the stored-program concept?
Cevabı göster
von Neumann modelinde program da bir veridir: komutlar bellekte bitler olarak durur ve veri gibi okunur. Bilgisayar yeni bir iş için yeniden kablolanmaz; belleğe yeni program yüklenir.
How does a branch instruction change the sequential flow of a program, and in which phase?
Cevabı göster
Normalde FETCH, PC'yi bir artırır ve program sıradaki komuta geçer. Dallanma (BR, JMP) EXECUTE fazında PC'ye yeni bir adres yazar. Sonraki FETCH bu adresten başlar.
How many memory accesses (including the instruction fetch) does each LC-3 instruction need: ADD, LDR, LDI?
Cevabı göster
ADD: sadece FETCH (komutu okumak). LDR: FETCH + veriyi okumak = 2. LDI: FETCH + bellekten adresi okumak + o adresteki veriyi okumak = 3. Bu yüzden LDI daha yavaştır.
In the LC-3, how wide are the MAR and the MDR? Explain why.
Cevabı göster
MAR adres tutar: LC-3'ün adres uzayı , yani adres 16 bit. MDR bir bellek konumunun içeriğini tutar: addressability 16 bit. İkisi farklı nedenlerle 16 bittir; bir başka makinede farklı olabilirler (örneğin 32 bit adres, 8 bit addressability).
Doğrulama: PC artışı, adres hesapları ve her komutun bellek erişim sayısı kendi yazdığımız LC-3 simülatöründe (verify/SEN2201/lc3.mjs) komut komut çalıştırılarak ölçüldü (verify/SEN2201/05.mjs).