BLGM 325 Bilgisayar Mimarisi ve Organizasyonu Hasan Kmrcgil
BLGM 325 Bilgisayar Mimarisi ve Organizasyonu Hasan Kömürcügil Doğu Akdeniz Universitesi 1
Bilgisayar Organizasyonu 2
Tasarım Prensipleri • Kompleks Komut Kümesi Bilgisayar (CISC) krş. Basitleştirilmiş Komut Kümesi Bilgisayar (RISC) • Donanım tarafından direk olarak çalıştırılan komutlar • Basit komutlar (kod çözmesi kolay) • Sadece load/store komutu ile belleğe erişim • Birçok yazmaç (register) 3
Komut Kümesi krş. Donanım ¡ Bir bilgisayarın komut kümesi l ¡ Daha iyi bir işlemci tasarımı için, l ¡ donanıma direk bağlı olan bir programın elemanlarıdır Komutlar basit olmalı ve komutların çalışması ise hızlı olmalıdır. MIPS komut kümesinin özellikleri l l komutlar C ve Pascal için optimize edilmiştir. Donanımda uygulama daha basittir. 4
RISC İşlemcisinin Tasarım Prensipleri ¡ Üç tasarım prensibi var: l Basitlik düzenli olmaya yardımcı olur l Küçük daha hızlıdır l İyi tasarım uzlaşmaya gereksinim duyar 5
Programlama Dilleri ¡ Birçok programlama dili vardır. Ancak, genellikle 2 kategoriye ayrılırlar l Üst-düzeyli diller makineden bağımsız dillerdir ¡ l C, Fortran, Pascal, Basic Düşük-düzeyli diller makineye bağlı dillerdir ¡ Çevirme dili (assembly language) 6
Çevirici Dilleri ¡ ¡ ¡ Çevirme dilleri, makine dillerinin metin olarak temsil edilmesinden oluşur Çevirme dilindeki bir cümle, bir makine komutunu temsil eder Çevirme dili, üst-düzey programlar ile makine kodu arasında kalan bir katmandır 7
Makine Dili ¡ ¡ ¡ Makine dili bilgisayarın doğal dilidir Kelimeler (words) komutlar olarak adlandırılır Kelime haznesi ise komut kümesidir Bit görünümündeki makine işlemleri donanım tarafından yürütülür Bu derste, MIPS komutlarına odaklanacağız l l Diğer RISC-tabanlı komut kümeleri de benzerdir Farklı komut kümelerinin birçok ortak noktaları vardır. Bunun nedeni, bu komutların benzer fonksiyonları yapıyor olmalarından kaynaklanır 8
Dilleri Montaj Etme temp = v[k]; Üst Düzey Dil Programı Derleyici Çevirme Dili Programı Çevirici Makine Dili Programı Makine Yorumlama Kontrol Sinyal Tanımlama v[k] = v[k+1]; v[k+1] = temp; lw lw sw sw $15, $16, $15, 0000 1010 1100 0101 1001 1111 0110 1000 0($2) 4($2) 1100 0101 1010 0000 0110 1000 1111 1001 1010 0000 0101 1100 1111 1000 0110 0101 1100 0000 1010 1000 0110 1001 1111 Üst/Düşük Kontrol hatları 9
Çevirici Dili Komutları Temel bir komutun 4 bileşeni vardır: ¡ 1. 2. 3. 4. İşleç (operatör) adı Sonucun saklanacağı yer 1 inci işlenen (operand) 2 inci işlenen (operand) add dst, src 1, src 2 l ¡ Basit ve sabit formatlı komutlar, donanımın uygulamasını daha basit yapar (“Basitlik düzenli olmaya yardımcı olur”) Birçok mimaride, birden fazla kullanılan elemanlar ile ilgili bir kısıtlama yoktur 10
Çevirici Komutları Çevirici Dili Komut Formatı: a) [etiket: ] işlem [işlenen 1 [işlenen 2 [işlenen 3]]] [ # [yorum]] b) Etiketler: Spesifik bir bellek adresi ile ilgili bir sembol c) İşlemler: 1) Çevirici direktif (Assembler directive) 2) Makine komutu (Machine instruction) d) İşlenenler: 1) Yazmaç adları (register names) (örnek: $0, $29) 2) Sabit değer (Immediate value) Numerik ifade 3) Adres etiketi (komut veya veri, örnek: Loop 2: , my. Val: ) e) Yorumlar: # sembolünden sonra yazılan bir metin. Bu metin, çevirici tarafından dikkate alınmaz. 11
Aritmetik İşlemler ¡ C dilindeki toplama işlemini dikkate alalım a = b + c; ¡ MIPS için add operatörünü kullanalım add a, b, c ¡ Yine, MIPS için sub operatörünü (a=b–c ) kullanalım sub a, b, c ¡ Çevirme dilindeki bir kodu okumak ve anlamak zor olduğu için, genellikle # sembolünden sonra yorumlar eklenir 12
Kompleks İşlemler ¡ Daha kompleks ifadeleri nasıl yazarız? a = b + c + d - e; ¡ Yukarıdaki ifadeyi birden fazla komut kullanarak şöyle yazarız add t 0, b, c add t 1, t 0, d sub a, t 1, e ¡ # t 0 = b + c # t 1 = t 0 + d # a = t 1 - e Derleyiciler (compilers) kodu üretirken genellikle geçici değişkenler kullanırlar (t 0, t 1 gibi) 13
Veri Temsiliyeti (Gösterimi) ¡ ¡ Bit: 0 veya 1 Bit dizgeleri (strings) l l ¡ ¡ ¡ 8 bit= 1 16 bit = 32 bit = 64 bit = bayt (byte) 0. 5 kelime (half-word) 1 kelime (word) 2 kelime (double-word) Karakterler – 1 bayt, genellikle ASCII formatında Tam sayılar – 2’lik bütün (complement) Kayan noktalı sayılar – sabit (mantissa) ve eksponent formatınında yazılırlar (m 2 e) 14
Veri Saklanması ¡ ¡ ¡ Üst-düzey programlarda, veri değişkenler içinde saklanır Pratikte, veri nerede saklanır? Cevap: Birden fazla yerde saklanabilir l l Yazmaçlar (Registers) RAM veya disk belleklerinde 15
Yazmaç Organizasyonu ¡ ¡ Yazmaç organizasyonu, bir işlemci mimarisini tanımlayan etkenlerden biridir Operatör/İşlenen için 3 mekanizma var l l l ¡ Akümülatör – kaynak ve sonuç için sacede bir yazmaç kullanan bir mimaridir (örnek: 8088) Stak – işlenenler stak içine atılır veya stakdan alınır (örnek: Intel) Genel Amaçlı Yazmaç – veriyi saklamak için sınırlı sayıda yazmaçlar kullanılır (örnek: günümüzdeki sistemler) Bir yazmaç veriyi saklayan yüksek-hızlı bir bellekdir. 16
Genel Amaçlı Yazmaçlar ¡ Genel amaçlı yazmaçları kullanarak, veriye farklı yollarla erişilebilir l Load-Store (L/S) – veri yazmaçlara yüklenir, daha sonra işlenir ve bellekte saklanır (örn: RISC komut kümeleri) Donanım, işlenenler için basittir ¡ Saat çevrimi (cycle) kısa tutulabildiği için, küçük daha hızlıdır (smaller is faster) Verimlilik üzerine vurgu ¡ l Bellek-Bellek – işlenenler bellek adreslerini hem kaynak, hem de alıcı (destination) olarak kullanabilir (örnek: Intel) 17
MIPS Mimarisi ¡ MIPS bir yükle-sakla (load-store) mimarisidir l l l Her yazmaç 32 bit genişliğindedir (word) MIPS mimarisinin 32 tane genel amaçlı yazmaçı vardır (bazıları spesifik amaçlar için ayrılmıştır) Ayrıca, MIPS mimarisinin 32 kayan noktalı yazmaçı vardır 18
Yazmaç Adları ¡ Yazmaçlar şu şekilde tanımlanır: $<0 -31 arası bir numara> ¡ Kural olarak aşağıdaki adlar kullanılır l $zero otomatik olarak sıfır içerir l $s 0, $s 1, … $s 7 kayıt için kullanılır l $t 0, $t 1, … $t 9 geçici saklama için l ¡ ¡ Geriye kalanlar uygun bir şekilde kullanılır Derleyiciler bu yazmaçlardaki kuralları kullanır ve gereğini yapar Bu derste, bu yukarıda geçen kuralları dikkate almayacağız 19
Yazmaçların Kullanılması ¡ Amaçlar l ¡ Mümkün olduğu sürece veriyi yazmaçların içinde saklamak Konular l Sınırlı sayıda yazmaç vardır ¡ l Tüm yazmaçlar kullanımda ise, bazı yazmaçların içeriği belleğe yazılabilir Diziler ¡ ¡ Veri yazmaçta saklanmak için çok büyük olabilir İndeksi hesaplamaya gerek var 20
Aritmetik İşlemler: II ¡ Aşağıdaki C dilindeki toplama işlemini dikkate alınız (b=$17 ve c=$18) a = b + c; ¡ MIPS dilindeki eşdeğer toplama, yazmaçları ve add komutunu kullanarak şöyle yazılabilir: add $8, $17, $18 ¡ # a = b + c a=b–c işlemi, MIPS içindeki sub komutunu kullanarak şöye yazılabilir sub $8, $17, $18 # a = b - c 21
Kompleks İşlemler: II ¡ İçinde birden fazla işlem gerektiren daha karışık ifadeleri nasıl yazarız? a = b + c + d - e; ¡ Bu durumda, birden fazla komut kullanarak aşağıdaki gibi yazılabilir add $8, $17, $18 add $8, $19 sub $8, $20 # $8 = b + c # $8 = $8 + d # a = $8 - e 22
Sabitler ¡ ¡ Sabitlerle ilgili toplama yapma ihtiyacı ortaya çıkar Bu durumda, addi komutu kullanılır addi dst, src 1, immediate ¡ Yukarıda geçen, «immediate» 16 -bit bir sabittir 23
Örnek ¡ Aşağıdaki C kodunu dikkate alınız a++; ¡ Bu kodun, MIPS dilindeki eşdeğeri aşağıdaki gibi yazılır addi $1, 1 # a = a + 1 24
MIPS Basit Aritmetik Komut Örnek Anlamı Açıklama add $1, $2, $3 $1 = $2 + $3 2 kaynak yazmaç, 1 hedef yazmaç subtract sub $1, $2, $3 $1 = $2 – $3 2 kaynak yazmaç, 1 hedef yazmaç add immediate addi $1, $2, 100 $1 = $2 + 100 1 kaynak yazmaç, 1 hedef yazmaç add unsigned addu $1, $2, $3 $1 = $2 + $3 2 kaynak yazmaç, 1 hedef yazmaç subtract unsign subu $1, $2, $3 $1 = $2 – $3 2 kaynak yazmaç, 1 hedef yazmaç add imm unsign addiu $1, $2, 100 $1 = $2 + 100 1 kaynak yazmaç, 1 hedef yazmaç 25
Bellekteki Veriyi Yazmaçlara Yüklemek ¡ ¡ ¡ Veriyi bellekte saklamak veya bellekten yazmaça yüklemek için veri transfer komutları kullanılır (loadstore) «load» komutu veriyi bellekten yazmaca transfer eder «store» komutu veriyi yazmaçtan belleğe transfer eder lw komutu kullanıldığı zaman, bellekten yazmaca 1 kelime (word) veri transfer edilir lw komutu 3 kısımdan oluşur 1. 2. 3. İşlem adı (Operator name) Hedef yazmaç (Destination register) Baz yazmaç adresi ve sabit (Base register address and constant offset) lw dst, offset(base) 26
Belleğe Erişim ¡ ¡ ¡ Belleğe erişim load ve store komutlarıyla mümkündür Sıralanmış kelimeler, yarım kelimeler, ve baytlar Kaydırım tabanlı adresleme (displacement based addressing) Sabit Yazmaçlar Baz Bellek + Yüklenecek veri/ Saklanacak yer 27
Dizilere Erişim ¡ ¡ ¡ Diziler bellekteki baz adreslerini gösterirler Sabit değer kullanılarak, indeks bulunur Adresleme bayt cinsinden olduğu için, indeksi 4 ile çarpmak gerekir l l Baz adresi A olan bir tam sayı dizi dikkate alınız Erişilmeye çalışılan verinin indeksi 5 olduğunu varsayalım Bu durumda verinin bellekteki adresi A + 5 * 4 olur C dilinin aksine, çevirici dili işaretçi aritmetiğini desteklemez! 28
Dizi için Örnek ¡ Aşağıdaki işlemi dikkate alınız a = b + C[9]; ¡ Eğer a=$17, b=$18, ve C’nin başlama adresi $19 içindeyse, eşdeğer MIPS kodu aşağıdaki gibi yazılır lw $8, 36($19) add $17, $18, $8 # $8 = Memory[$19+36] # a = b + C[9] 29
Kompleks Dizi Örneği ¡ Aşağıdaki işlemi dikkate alınız a = b + C[i]; ¡ Eğer i=$19, ve C’nin başlama adresi $10 içindeyse, eşdeğer MIPS kodu aşağıdaki gibi yazılır add $8, $19 add $9, $8 add $11, $10, $9 lw $12, 0($11) add $14, $13, $12 ¡ # # # $8 = 2 * i $9 = 4 * i $11 = C + 4*i $12 = Memory[C[i]] a = b + C[i] Not: Çarpma işlemi daha sonra anlatılacak 30
Yazmaçdan Belleğe Veri Saklama ¡ ¡ Veriyi saklama işlemi, veriyi yükleme işinin tam tersidir. Yazmaçtaki bir kelimeyi (16 bit) bellek içindeki bir adresin işaret edildiği yere yazmak sw komutu ile mümkündür. sw src, offset(base) 31
Veriyi Dizide Saklama: Basit ¡ Aşağıdaki işlemi dikkate alınız A[3] = b + c; ¡ Eğer b=$17, c=$18, ve A’nın başlama adresi 0 ise, eşdeğer MIPS kodu şu şekilde yazılır add $16, $17, $18 sw $16, 12($0) # $16 = b + c # Memory[A[3]] = b + c 32
Veriyi Dizide Saklama: Kompleks ¡ Aşağıdaki işlemi dikkate alınız A[i] = b + c; ¡ Eğer b=$17, c=$18, i=$9, ve A’nın başlangıç adresi $7 içindeyse, eşdeğer MIPS kodu aşağıdaki gibi yazılabilir add $16, $17, $18 add $8, $9 add $8, $8 add $10, $7, $8 sw $16, 0($10) # # # $16 = b + c $8 = 2 * i $8 = 4 * i $10 = A + 4*i Memory[A[i]] = b + c 33
Bellek Adresleme ¡ ¡ ¡ Hemen hemen tüm mimariler bayt adreslemeyi destekler Farklı mimariler bit sıralamada farklı yollar izlerler vardır. Bunlara bayt sıralama denir Bazı mimariler, verimliliği artırmak için veri saklama yolunu sınırlarlar 34
Bayt Sıralama ¡ Bayt sıralama için 2 temel yol vardır l l l Big Endian – the “big end” önce gelir ve MSB bit en düşük bellek adresidir Little Endian – the “little end” önce gelir ve LSB bit bellek adresini oluşturur (Intel) MIPS “ big endian” kullanır 3 2 1 Little Endian bayt 0 0 MSB LSB 0 1 2 3 Big Endian bayt 0 35
Bayt Sıralama: Örnek ¡ Bellekte bulunan 32 bit veriyi dikkate alınız Little Endian LSB Big Endian MSB Bellek Adresi l l Little Endian MSB Big Endian LSB AB CD 00 00 0 1 2 3 Big endian: AB CD 00 00 (2882338816) Little endian: 00 00 CD AB (52651) 36
Sıralama Kısıtlamaları MIPS içinde, verinin aşağıdaki gibi adreslenmesi gerekir ¡ 0 1 2 3 Sıralı Değil 4 bayt’lık bellek erişimi ¡ 0 4 8 12 16 37
Çevirme Dili Programlama Ortamı MIPS Çevirme Dili Yazımı: a) Sayılar 10 luk tabandadır b) Hex sayıların önünde “ 0 x” bulunur. c) Etiketlerin (label) sonunda “: ” bulunur d) Açıklamalar “#” dan sonra yapılır. e) Çevirme dili cümleleri birden fazla satıra bölünemez. 38
Bir Bilgisayarın Klasik Organizasyonu: MIPS CPU Kontrol Birimi Program Sayaçı Sabit Rd 0. . 31 Yazmaç Dosyası Rs 32 yazmaç (32 bit/yazmaç) Rt Yardımcı_işlemci Kuraldışı Giderici Durum Yazmaçı Neden Yazmaçı ALU Aritmetik Mantık Birimi Hi/Lo yazmaç çifti(64) 32 bit adres ve 32 bit veri yolları 0 x 0000 BELLEK RAM, ROM, IO Aygıtları 0 x. FFFF 39
Kontrol Değiştirme ¡ Bilgisayarların ayırt edici özelliklerinden bir tanesi de aşağıdaki koşulları değerlendirebilmeleridir l l ¡ ¡ If-then-else Döngüler (Loops) Kontrol akışını değiştirmek de önemlidir Koşullu komutlar «branches» olarak bilinir Koşulsuz değişiklikler «jumps» olarak adlandırılır «Target» branch/jump’ın etiketidir 40
Koşullu Komutlar: Eşitlik ¡ En basit koşullu test, beq komutunu eşitlik ile kullanmakla olur beq reg 1, reg 2, label ¡ Aşağıdaki kodu dikkate alınız L 1: ¡ if (a == b) goto L 1; // Do something // Continue beq komutunu kullanarak L 1: beq $19, $20, L 1 # Do something # Continue 41
Koşullu Komutlar: Eşit Değil ¡ bne komutu eşit değil için bne reg 1, reg 2, label ¡ Aşağıdaki kodu dikkate alınız L 1: ¡ if (a != b) goto L 1; // Do something // Continue bne komutu kullanarak L 1: bne $19, $20, L 1 # Do something # Continue 42
Koşulsuz Komut: Jump ¡ j komutu «label» etiketine atlar j label 43
If-then-else için örnek ¡ Aşağıdaki koda bakınız if (i == j) f = g + h; (doğru) i == j? (yanlış) else f = g – h; i != j i == j if (koşul) st 1; else st 2; f=g+h if (koşul) goto L 1; st 2; goto L 2; L 1: st 1; L 2: f=g-h Çıkış 44
If-then-else Çözüm ¡ f => $16 g => $17 h => $18 i => $19 j => $20 Etiketler yarat ve eşitlik komutunu kullan True: Exit: beq $19, $20, True sub $16, $17, $18 j Exit add $16, $17, $18 # # Branch if i == j f = g – h Go to Exit f = g + h 45
- Slides: 45