İçeriğe atla

Buyruk kümesi mimarisi

Vikipedi, özgür ansiklopedi
(Komut kümesi sayfasından yönlendirildi)

Buyruk kümesi mimarisi (BKM; İngilizce: instruction set architecture, kısaca ISA), bir işlemcinin makine düzeyinde gerçekleştirebildiği işlemleri, bu işlemlerin kodlanma biçimini, yazmaç organizasyonunu ve bellek erişim modelini tanımlayan soyut arayüzdür. Buyruk kümesi mimarisi; donanım tasarımcıları ile sistem yazılımı (işletim sistemi, derleyici) geliştiricileri arasındaki sözleşmeyi belirler: aynı BKM'yi gerçekleyen farklı donanımlar (farklı transistor teknolojileri, farklı boru hatları) aynı makine kodunu koşturabilir.[1]

BKM kavramı, mikromimari kavramından ayrılmalıdır. Mikromimari, bir BKM'nin somut donanım gerçeklemesidir: boru hattı derinliği, önbellek yapısı, dal tahmincisi ve benzeri uygulama seçimleri mikromimariye aittir. Örneğin x86 BKM'si, Intel Core ve AMD Zen serisi gibi birbirinden farklı pek çok mikromimariyle gerçekleştirilmiştir; ancak tüm bu işlemciler aynı ikili kodu yürütür.[2]

1940'lı ve 1950'li yıllarda her bilgisayar modeli kendine özgü buyruk kümesiyle üretiliyordu; yazılımın bir makineden diğerine taşınması neredeyse olanaksızdı. IBM System/360 (1964), farklı performans sınıfındaki makinelerin tek bir buyruk kümesini paylaşması ilkesini endüstriyel ölçekte uygulayan ilk büyük aileydi ve BKM soyutlamasını yaygınlaştırdı.[3]

1970'lerde işlemci karmaşıklığı hızla arttı; mikrokodla gerçeklenen zengin buyruk kümeleri (CISC anlayışı) hâkim oldu. 1980'lerin başında Patterson ve Hennessy'nin çalışmaları, RISC (azaltılmış buyruk kümesi) yaklaşımını ortaya koydu: basit, sabit uzunluklu buyruklar ve boru hattına uygun tasarım. MIPS (1985), SPARC (1987) ve sonrasında ARM bu yaklaşımı benimsedi. 1990'larda Intel/HP Itanium ile denenen VLIW/EPIC mimarisi beklenen başarıyı kazanamadı.

2010'lu yıllarda mobil pazarın büyümesiyle ARM, düşük güç tüketimi avantajıyla masaüstü ve sunucu pazarına da girdi (Apple Silicon, Ampere). 2015'te Berkeley'de başlatılan RISC-V, açık ve telif ücretsiz bir BKM olarak akademik ve endüstriyel benimsemede hızla büyüdü.[1]

Tasarım parametreleri

[değiştir | kaynağı değiştir]

Dahili depolama modeli

[değiştir | kaynağı değiştir]

İşlenecek verinin işlemci içinde nasıl tutulduğu, BKM'nin temel tasarım seçimlerinden biridir. Üç ana model vardır:

  • Yığıt mimarisi: İşlenenler örtük yığıt üzerinden alınır ve yığıta yazılır; açık yazmaç belirtme gerekmez (örn. Java Bytecode, eski x87 kayan nokta birimi).
  • Biriktirici mimarisi: Tek örtük biriktirici yazmacı tüm işlemlerde hedef ya da kaynak işlevi görür; erken 8 bitlik işlemcilerde yaygındır.
  • Genel amaçlı yazmaç mimarisi: Buyruklar açıkça yazmaç numaraları belirtir; modern RISC ve CISC mimarilerinin büyük çoğunluğu bu modeli izler (örn. RISC-V 32 tam sayı yazmacı, x86-64 16 tam sayı yazmacı).[4]

İşlenen sayısı ve konumu

[değiştir | kaynağı değiştir]

Aritmetik buyruklar için yaygın biçimler şunlardır:

  • 3 adres (dest ← src1 op src2): RISC mimarileri; her kaynak ve hedef ayrı belirtilir.
  • 2 adres (dest ← dest op src): x86 klasik biçimi.
  • 1 adres (biriktirici ← biriktirici op src): Biriktirici tabanlı tasarımlar.
  • 0 adres (örtük yığıt): Yığıt mimarileri.

Bunun yanı sıra işlenenlerin bellekten mi yoksa yalnızca yazmaçlardan mı okunacağı da kritik bir seçimdir. Yalnızca yazmaç-yazmaç aritmetiğine izin veren mimarilerde (RISC), bellek erişimi ayrı yükle/sakla buyrukları aracılığıyla yapılır.

Buyruk uzunluğu

[değiştir | kaynağı değiştir]

Sabit uzunluklu buyruklar (örn. MIPS 32 bit, RISC-V temel 32 bit) boru hattı tasarımını ve kod çözmeyi basitleştirir. Değişken uzunluklu buyruklar (örn. x86 1–15 bayt) kod yoğunluğunu artırır ancak çözücü karmaşıklığını yükseltir. RISC-V sıkıştırılmış (C) uzantısı 16 bitlik kodlamalar ekleyerek bu iki yaklaşım arasında bir denge sunar.[1]

Adresleme kipleri

[değiştir | kaynağı değiştir]

Adresleme kipleri, bir buyruğun işleneninin bellekte ya da yazmaçta nasıl konumlandırıldığını tanımlar. Yaygın kipler şunlardır: anlık (sabit değer buyruk içinde), yazmaç doğrudan, bellek doğrudan (mutlak adres), yazmaç dolaylı, taban+öteleme (temel yazmaç + sabit sapma), indisli (iki yazmaç toplamı) ve göreceli (PC'ye göre).

Bayt sıralaması

[değiştir | kaynağı değiştir]

Çok baytlı bir veri sözcüğünün bellekte hangi sırayla saklandığı, Bayt sıralaması tercihi ile belirlenir. big-endian düzeninde en yüksek anlamlı bayt düşük adreste, little-endian düzeninde ise en düşük anlamlı bayt düşük adreste yer alır. x86 little-endian kullanırken IBM POWER big-endian tercih eder. ARM ve MIPS her iki kipte de çalışabilecek biçimde tasarlanmış olup çift-endian (bi-endian) özelliğini destekler; DEC Alpha da çift-endian bir mimariydi. RISC-V varsayılan olarak little-endian olmakla birlikte büyük ve iki-endian uzantı seçenekleri de tanımlanmıştır.[1][3]

Yazmaç organizasyonu

[değiştir | kaynağı değiştir]

Yazmaç sayısı ve genişliği, BKM'nin önemli parametrelerinden biridir. Az sayıda yazmaç (örn. x86'nın orijinal 8 tam sayı yazmacı), kodlama genişliğini azaltır; çok sayıda yazmaç (örn. RISC-V'nin 32 yazmacı, SPARC'ın pencereli yazmaçları) derleyicinin geçici değerleri bellekte saklaması (register spill) gereksinimini azaltır. Özel amaçlı yazmaçlar arasında program sayacı (PC), bayrak/durum yazmacı ve yığıt göstericisi sayılabilir; bunların programcı tarafından erişilebilir olup olmadığı da BKM tanımının parçasıdır.

RISC ve CISC tasarım felsefelerini karşılaştıran temel özellikler aşağıdaki tabloda verilmiştir.[2][4]

RISC ve CISC karşılaştırması
ÖzellikRISCCISC
Buyruk sayısıAz (tipik 50–150)Çok (tipik 200–500+)
Buyruk uzunluğuSabit (genellikle 32 bit)Değişken (x86: 1–15 B)
Bellek erişimiYalnızca yükle/sakla buyruklarıylaAritmetik buyruklar doğrudan erişebilir
Yazmaç sayısıÇok (≥ 32)Az (x86 orijinal: 8)
Mikrokod kullanımıYok/minimalYaygın
Derleyici yüküYüksek (yazmaç atama karmaşık)Orta
Boru hattına uyumİyiDaha güç
ÖrneklerRISC-V, ARM, MIPS, SPARCx86, IBM System/360

Günümüzde iki yaklaşım arasındaki sınır belirgin biçimde bulanıklaşmıştır. Modern x86 işlemciler, değişken uzunluklu CISC buyruklarını iç RISC-benzeri mikro-işlemlere dönüştürerek boru hattında çalıştırır. Öte yandan ARM AArch64 gibi RISC mimarilerine, SIMD ve kriptografi uzantılarıyla CISC niteliğinde karmaşık işlemler eklenmiştir.

Buyruk türleri

[değiştir | kaynağı değiştir]

Modern BKM'ler buyrukları işlevlerine göre aşağıdaki kategorilere ayırır:[4]

Veri aktarımı
Bellek ile yazmaçlar arasında veri taşıma (yükle, sakla), yazmaçlar arası kopyalama, yığıt işlemleri (it, çek).
Aritmetik ve mantık (ALU)
Tam sayı ve kayan nokta toplama, çıkarma, çarpma, bölme; bit düzeyi AND, OR, XOR, NOT işlemleri.
Bit işleme ve kaydırma
Mantıksal sola/sağa kaydırma, aritmetik sağa kaydırma (işaret biti korunur), döndürme.
Denetim akışı
Koşulsuz ve koşullu dallanma (bayraklara ya da yazmaç değerine göre), altyordam çağrısı/dönüşü, yazılım kesmesi/sistem çağrısı.
Giriş/Çıkış
Bellek eşlemli G/Ç mimarilerinde bu kategori ayrı buyruk içermeyebilir; bağlantı noktası adresli mimarilerde (örn. x86 IN/OUT) özel buyruklar bulunur.

Genişletilmiş işlem kodu

[değiştir | kaynağı değiştir]

Sabit uzunluklu buyruk sözcüklerinde tüm buyruklar için tek bir sabit alan ayrılması her zaman olanaklı değildir; farklı buyruk biçimleri farklı alan düzenlemeleri gerektirdiğinden opcode alanının genişliği değişebilir. Genişletilmiş işlem kodu (expanding opcode) tekniğinde, kısa opcode değerlerinin bir kısmı "uzantı öneki" olarak ayrılır: bu değerlerden biri görüldüğünde çözücü, buyruğun geri kalanında daha uzun bir opcode aramaya başlar. Böylece sık kullanılan buyruklara kısa, az kullanılan buyruklara daha uzun kodlar atanarak hem buyruk belleği verimliliği artırılır hem de yeterli sayıda farklı buyruk kodlanabilir.[3]

Buyruk işleme döngüsü

[değiştir | kaynağı değiştir]

Temel getir-çöz-yürüt döngüsü şu adımlardan oluşur:

  1. Getirme (Fetch): Bellek, program sayacındaki (PC) adresin içeriğini buyruk yazmacına (IR) aktarır: IR ← M[PC]. PC bir sonraki buyruğa işaret edecek biçimde güncellenir.
  2. Çözme (Decode): Denetim birimi IR içeriğini yorumlar; opcode ve işlenen alanlarını ayırt eder, gerekli yazmacları seçer.
  3. Yürütme (Execute): ALU ya da ilgili işlevsel birim işlemi gerçekleştirir; dallanma buyrukları PC'yi yeniden yükler, bellek buyruklarında adres hesaplanır ve belleğe erişilir.

Gerçek işlemciler bu adımları boru hattı düzeneğiyle çakıştırarak yürütür: bir buyruk yürütülürken bir sonraki çözülmekte, daha sonraki ise getirilmektedir. Paralel ve sıra dışı yürütme teknikleri boru hattı kavramının doğal uzantılarıdır.[1]

Günümüzde yaygın kullanılan başlıca BKM'ler aşağıda karşılaştırmalı biçimde verilmiştir.

Başlıca BKM'ler karşılaştırması
BKMSınıfTam sayı yazmaç sayısıBuyruk uzunluğuEndianLisans
x86 (64-bit)CISC161–15 baytlittle-endianTescilli (Intel/AMD)
ARM AArch64RISC31 + SP32 bit (A64)little-endian (varsayılan)Tescilli (Arm Ltd.)
RISC-V (RV64I)RISC3232 bit (16 bit C uzantısıyla)little-endianAçık (BSD)
MIPS (MIPS64)RISC3232 bitÇift-endianTescilli (MIPS Tech.)

x86 mimarisi 1978'de 16 bit olarak başlamış, 32 bit (IA-32) ve 64 bit (x86-64/AMD64) uzantılarıyla bugüne gelmiştir. MMX, SSE, AVX ve AVX-512 gibi SIMD uzantıları yüksek başarımlı hesaplama uygulamaları için kritik öneme sahiptir.

ARM mimarisi düşük güç tüketimiyle mobil pazarda hâkim konuma gelmiş; AArch64 mimarisi sunucu ve masaüstü pazarına da yayılmıştır. NEON SIMD uzantısı ve Scalable Vector Extension (SVE) vektör işlem yeteneklerini genişletir.

RISC-V, 2010'lu yıllarda Berkeley Üniversitesi'nde geliştirilen açık bir BKM standardıdır. Temel tam sayı çekirdeği (I) küçük tutulmuş; sıkıştırılmış (C), çarpma-bölme (M), atomik (A), kayan nokta (F/D), vektör (V) gibi modüler uzantılarla isteğe bağlı biçimde zenginleştirilmektedir. Açık lisans yapısı, özel silikon tasarımlarında ve akademik araştırmalarda geniş benimsemeye yol açmıştır.[1]

MIPS mimarisi RISC anlayışını 1985'te ticarileştiren öncü tasarımlardan biridir; hem big-endian hem little-endian kipte çalışabilecek biçimde tasarlanmıştır. Uzun süre ağ işlemcilerinde ve gömülü sistemlerde yaygın kullanılmış olmakla birlikte günümüzde pazar payı daralmıştır.

Geriye dönük uyumluluk ve BKM yaşam döngüsü

[değiştir | kaynağı değiştir]

Geniş bir yazılım tabanına sahip BKM'lerde geriye dönük uyumluluk güçlü bir ekonomik bağ oluşturur. x86 mimarisinin onlarca yıl süren evriminde yeni buyruklar ve kipler eklenmiş; ancak eski 16/32 bit ikili kodların çalışmaya devam etmesi sağlanmıştır. Bu durum donanım karmaşıklığını artırır, çünkü işlemci hem eski hem yeni kodlama biçimlerini desteklemek zorundadır.

Açık BKM'ler (özellikle RISC-V) bu gerilimi farklı biçimde yönetir: standart tarafından "dondurulmuş" (ratified) uzantılar kalıcı kabul edilirken yeni uzantılar isteğe bağlı bileşenler olarak eklenir; böylece donanım geliştiricisi yalnızca ihtiyaç duyduğu uzantıları gerçekler.

Bir BKM'nin yaşam döngüsü açısından bakıldığında, pazar çıkışından mirasın yönetimine uzanan süreç, yazılım uyumluluğu ile donanım yeniliği arasındaki dengeyi belirler. MIPS ve SPARC gibi mimarilerin pazar payını yitirmesi buna somut örnekler sunarken ARM ve x86 ticari güçleri sayesinde uzun ömürlü olmuştur.[2]

Ayrıca bakınız

[değiştir | kaynağı değiştir]
  1. 1 2 3 4 5 6 Patterson, David A.; Hennessy, John L. (2020). Computer Organization and Design RISC-V Edition: The Hardware/Software Interface (2 bas.). Morgan Kaufmann. ISBN 978-0128203316.
  2. 1 2 3 Hennessy, John L.; Patterson, David A. (2019). Computer Architecture: A Quantitative Approach (6 bas.). Morgan Kaufmann. ISBN 978-0128119051.
  3. 1 2 3 Tanenbaum, Andrew S.; Austin, Todd (2012). Structured Computer Organization (6 bas.). Pearson. ISBN 978-0132916523.
  4. 1 2 3 Stallings, William (2019). Computer Organization and Architecture (11 bas.). Pearson.

Genel kaynaklar

[değiştir | kaynağı değiştir]

Dış bağlantılar

[değiştir | kaynağı değiştir]