SEN2201 · 5. hafta · The von Neumann Model (instruction processing)

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.

von Neumann modelstored programmemoryprocessing unitALUcontrol unitprogram counter (PC)instruction register (IR)MARMDRinstruction cyclefetchdecodeevaluate addressfetch operandsexecutestore resultword length

İ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çaGöreviLC-3’te
MemoryProgram ve veriyi saklar2162^{16} konum × 16 bit, MAR ve MDR
Processing unitHesap yaparALU (ADD, AND, NOT), R0-R7
InputDış dünyadan veri alırKlavye
OutputDış dünyaya veri verirEkran (monitor)
Control unitHangi adımın yapılacağını yönetirPC, 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.

#FazNe olur?
1FETCHKomut bellekten IR’ye getirilir, PC artırılır
2DECODEOpcode çözülür: hangi komut, operandlar nerede?
3EVALUATE ADDRESSBellek erişimi gerekiyorsa adres hesaplanır
4FETCH OPERANDSOperandlar register’dan ya da bellekten alınır
5EXECUTEİşlem yapılır (ALU toplar, AND’ler…)
6STORE RESULTSonuç 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

KomutEVALUATE ADDRESSFETCH OPERANDSEXECUTESTORE RESULT
ADD R1, R2, R3yokR2, R3 okunurALU toplarR1 ← sonuç
LDR R4, R2, #-3R2 + (-3)MDR ← M[adres]yokR4 ← MDR
LD R1, ETIKETPC + offsetMDR ← M[adres]yokR1 ← MDR
ST R1, ETIKETPC + offsetR1 okunuryokM[adres] ← R1
BRz ETIKETPC + offsetyokZ = 1 ise PC ← adresyok

Çö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üşünceDoğrusu
PC şu anki komutu tutarPC sıradaki komutun adresi; komut IR’de
PC komut bittikten sonra artarFETCH’te, komut çalışmadan önce artar
MAR veriyi tutarMAR adres, MDR veri
Her komut altı fazın hepsini kullanırADD’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ı bellekteStored program: aynı bellek
x30FF + 1 = x3000x3100
Dallanma FETCH’te olurEXECUTE’ta PC değiştirilir

Kendini test et

Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.

Soru 1kolay

Name the five components of the von Neumann model.

Cevabı göster
Memory, processing unit, input, output, control unit

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.

Soru 2kolay

What does the program counter (PC) contain? What does the instruction register (IR) contain?

Cevabı göster
PC: address of the next instruction; IR: the instruction being processed

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).

Soru 3kolay

Which register holds the address for a memory access, and which holds the data being read or written?

Cevabı göster
MAR holds the address, MDR holds the data

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.

Soru 4kolay

List the six phases of the instruction cycle in order.

Cevabı göster
FETCH, DECODE, EVALUATE ADDRESS, FETCH OPERANDS, EXECUTE, STORE RESULT

Her komut bu sırayı izler. Ama her komut her fazı kullanmaz: ADD bellek adresi hesaplamaz, LD'nin EXECUTE fazı boştur.

Soru 5orta

Write the register transfers of the FETCH phase.

Cevabı göster
MAR ← PC, PC ← PC + 1, MDR ← M[MAR], IR ← MDR

Ö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.

Soru 6kolay

Before the FETCH phase, PC = x30FF. What is the PC after FETCH?

Cevabı göster
x3100

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.

Soru 7orta

Which phase does ADD R1, R2, R3 not need?

Cevabı göster
EVALUATE ADDRESS

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.

Soru 8orta

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
x4002; FETCH OPERANDS

EVALUATE ADDRESS: R2 + (-3) = x4005 - 3 = x4002. FETCH OPERANDS: MAR ← x4002, MDR ← M[x4002]. STORE RESULT: R4 ← MDR. EXECUTE fazı bu komutta boştur.

Soru 9kolay

What is meant by the stored-program concept?

Cevabı göster
Instructions and data are stored in the same memory

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.

Soru 10orta

How does a branch instruction change the sequential flow of a program, and in which phase?

Cevabı göster
It loads a new address into the PC during EXECUTE

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.

Soru 11zor

How many memory accesses (including the instruction fetch) does each LC-3 instruction need: ADD, LDR, LDI?

Cevabı göster
1, 2, 3

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.

Soru 12zor

In the LC-3, how wide are the MAR and the MDR? Explain why.

Cevabı göster
Both 16 bits

MAR adres tutar: LC-3'ün adres uzayı 2162^{16}, 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).

Deftere not kartı

von Neumann 5 parça: Memory (MAR, MDR) | Processing unit (ALU, register) | Input | Output | Control unit (PC, IR) Stored program: komut ve veri AYNI bellekte PC = sıradaki komutun ADRESİ | IR = şu anki komutun KENDİSİ MAR = erişilecek adres | MDR = okunan/yazılacak veri Word length: ALU'nun bir kerede işlediği bit (LC-3: 16) 6 faz: FETCH > DECODE > EVALUATE ADDRESS > FETCH OPERANDS > EXECUTE > STORE RESULT FETCH: MAR<-PC, PC<-PC+1, MDR<-M[MAR], IR<-MDR (PC önce artar!) DECODE: IR[15:12] opcode -> 4-to-16 decoder ADD (register): EVALUATE ADDRESS yok LDR: EA=base+offset | FO: MDR<-M[EA] | SR: DR<-MDR Branch: EXECUTE'ta PC'ye yeni adres Bellek erişimi: ADD 1, LD/LDR 2, LDI 3 Control unit bir FSM; her faz bir veya daha fazla saat çevrimi