İçeriğe atla

Mikroprogramlama

Vikipedi, özgür ansiklopedi
Image
Bir işlemcinin denetim birimi iki biçimde tasarlanabilir. Donanım tabanlı denetimde sinyaller kombinasyonel mantıkla her çevrimde yeniden hesaplanır; mikroprogramlamada aynı sinyaller bellekten okunur.

Mikroprogramlama, bir işlemcinin denetim birimini, bellekte saklanan mikrokod (ya da mikroprogram) aracılığıyla tasarlama yöntemidir. Mikrokod, işlemcinin makine dili buyruklarını, işlemcinin iç bileşenlerini süren daha basit adımlara dönüştüren alt düzey bir denetim katmanıdır; böylece donanımla buyruk kümesi arasında bir soyutlama (ara) katmanı oluşturur.[1][2]

Bir işlemcide her makine buyruğu, mikrobuyruk belleği (control store) adı verilen özel bir bellekte saklanan bir ya da daha çok mikrobuyruğa (microinstruction) karşılık gelir. Her mikrobuyruk, aritmetik mantık birimini, yazmaçları ve işlemci içindeki yolları süren denetim sinyallerini taşır. Böylece tek bir karmaşık makine buyruğu, sırayla yürütülen bir mikrobuyruk dizisiyle gerçeklenir.[1]

Mikroprogramlamanın başlıca alternatifi, denetim işaretlerinin doğrudan mantık devreleriyle üretildiği donanımsal (kabloyla bağlı) denetimdir. Donanımsal denetim daha hızlıdır; mikroprogramlama ise tasarım esnekliği ve karmaşık buyrukları gerçeklemede kolaylık sağlar. Bu nedenle mikrokod, çok sayıda karmaşık buyruğa sahip CISC işlemcilerde (örneğin x86) yaygınken; basit buyruklara dayanan RISC işlemciler çoğunlukla donanımsal denetim kullanır.[2]

Denetim biriminin iki tasarımı

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

Bir işlemcinin denetim birimi, her saat çevriminde veri yolundaki birimlere hangi işi yapacaklarını söyleyen denetim sinyallerini üretir. Bu birimi kurmanın iki yolu vardır ve ikisi de aynı sinyalleri üretir; ayrıldıkları nokta sinyallerin nereden geldiğidir.[3]

Donanım tabanlı denetimde sinyaller bir kapı ağında hesaplanır. İşlem kodu ile o anki durum girdi olarak verilir, sinyal değerleri çıkışta belirir. Bu yaklaşım hızlıdır, çünkü araya bellek erişimi girmez. Buna karşılık denetim mantığı buyruk kümesi büyüdükçe hızla karmaşıklaşır ve tasarım bir kez üretildikten sonra değiştirilemez.[2]

Mikroprogramlamada ise sinyal değerleri bir bellekte satır satır hazır bekler. Denetim birimi, o anda hangi buyruğun hangi aşamasında olunduğuna göre doğru satırı okur ve satırdaki bitleri veri yoluna gönderir. Denetim birimi tasarlamak böylece kapı ağı kurmak olmaktan çıkıp bir bellek doldurmaya dönüşür; yeni bir buyruk eklemek kapı eklemek değil, satır eklemektir.[1]

Bu iki yaklaşım birbirini dışlamaz. Çok çevrimli bir işlemcinin denetim birimi bir sonlu durum makinesi olarak da tasarlanabilir; mikroprogramlama, o durum makinesinin her durumunu bir bellek sözcüğünde saklamanın adıdır.[3]

Mikrobuyruk belleği ve mikrobuyruklar

[değiştir | kaynağı değiştir]
Image
Mikroprogramlı denetim biriminin yapısı. Bir sayaç mikrobuyruk belleğini adresler, okunan satırın alanları denetim sinyallerine açılır, satırdaki sıralama alanı da sayacı besler.

Mikrobuyruk belleği genellikle bir salt okunur bellektir (ROM). Belleğin her satırı bir mikrobuyruktur ve kabaca iki tür bilgi taşır: veri yolundaki birimleri süren denetim sinyalleri ile bir sonraki mikrobuyruğun nasıl seçileceğini belirten sıralama bilgisi.[3]

Mikrobuyruk, veri yolunda denetlenmesi gereken her birim için bir alan içerir. Tipik alanlar program sayacının güncellenmesini, yazmaç öbeğine yazılıp yazılmayacağını, aritmetik mantık biriminin girişlerinin nereden geleceğini, yapılacak işlemi, bellek erişiminin türünü ve sonucun nereden alınacağını belirler. Alan genişlikleri toplandığında mikrobuyruk sözcüğünün boyu ortaya çıkar; küçük bir öğretim tasarımında bu birkaç on bit, gerçek bir buyruk kümesinde onlarca bittir.[1]

Hangi satırın okunacağını bir sayaç belirler. Bu sayaç, makine buyruklarını gösteren program sayacından ayrıdır ve yalnızca mikrobuyruk belleği içinde ilerler. Sıralama üç biçimde olur: sıradaki satıra geçmek, işlem koduna göre belirlenen bir başlangıç satırına dallanmak, ya da buyruk bittiğinde yeni bir buyruğun ilk satırına dönmek.[3]

Mikro işlemler

[değiştir | kaynağı değiştir]
Image
Bellek işlenenli bir toplama buyruğunun mikro işlemlere açılması. Tek bir makine buyruğu, sırayla yürütülen dört adıma bölünür.

Bir makine buyruğunun bölündüğü adımlara mikro işlem (micro-operation) denir. Her mikro işlem, bir saat çevriminde tamamlanabilecek kadar küçüktür: bir yazmacın okunması, aritmetik mantık biriminde tek bir işlem, bir bellek erişimi ya da bir sonucun yazmaca yazılması gibi.[1]

Bir buyruğun kaç mikro işleme bölüneceği buyruğun karmaşıklığına bağlıdır. Yalnızca yazmaçlar üzerinde çalışan bir buyruk az sayıda adımla biterken, bellek işleneni olan ya da birden çok bellek erişimi gerektiren bir buyruk daha uzun bir diziye açılır. Mikroprogramlamanın karmaşık buyruk kümelerinde yaygınlaşmasının nedeni budur: buyruk ne kadar karmaşık olursa olsun, denetim birimi aynı biçimde, yalnızca daha uzun bir mikrobuyruk dizisiyle çalışır.[2]

Yatay ve dikey mikroprogramlama

[değiştir | kaynağı değiştir]
Image
Aynı bellek yazma çevriminin iki kodlanışı. Yatay biçimde bütün denetim bitleri mikrobuyrukta açıkça durur; dikey biçimde tek bir kısa kod durur ve bir kod çözücüden geçirilir.

Mikrobuyrukların kodlanma biçimine göre iki uç yaklaşım vardır:[1][3]

  • Yatay mikroprogramlama: Mikrobuyruk geniştir ve her denetim noktasına ayrı bir bit ayrılır. Bitler doğrudan denetim noktalarına bağlandığı için çözme gerekmez; işlemler aynı çevrimde birlikte yürütülebilir ve tasarım hızlıdır. Karşılığında mikrobuyruk belleği büyür.
  • Dikey mikroprogramlama: Mikrobuyruk dardır; denetim sinyalleri kodlanmış alanlarda tutulur ve kullanılmadan önce bir kod çözücüden geçirilir. Bellek küçülür, ancak her çevrime bir çözme gecikmesi eklenir ve aynı anda yapılabilecek iş sayısı azalır.

Uygulamadaki çoğu tasarım bu iki uç arasında yer alır; sık kullanılan alanlar açıkça, seyrek kullanılanlar kodlanmış tutulur. İki düzeyli mikrokod (nanokod) gibi ara biçimler de kullanılmıştır.[1]

Yazılabilir denetim belleği

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

Mikrobuyruk belleği salt okunur olmak zorunda değildir. İçeriği çalışma sırasında ya da üretimden sonra değiştirilebilen tasarımlara yazılabilir denetim belleği (writable control store) denir. Böyle bir tasarımda üretimden sonra ortaya çıkan hatalar donanım değiştirmeden düzeltilebilir; bazı makinelerde buyruk kümesi yeni mikrobuyruk dizileri eklenerek genişletilebilir de.[1]

Mikroprogramlama, belleğin yazılabilir olup olmamasından bağımsız olarak, bir işlemcinin başka bir makinenin buyruk kümesini yürütmesini de olanaklı kılar. Veri yolu o makinenin buyruklarının sonuçlarını verecek biçimde sürüldüğünde işlemci ona öykünmüş olur. Yöntem 1960'larda eski donanımlar için yazılmış programların yeni makinelerde çalıştırılmasında kullanılmıştır.[1]

Mikroprogramlama kavramı 1951'de Maurice Wilkes tarafından ortaya atıldı. Wilkes, denetim biriminin düzensiz mantık devreleri yerine, bellekte saklanan düzenli bir mikrobuyruk dizisiyle tasarlanmasını önerdi; bu yaklaşım denetim birimi tasarımını sistematik ve kolayca değiştirilebilir kılıyordu.[4] Kavram ilk kez EDSAC 2 (1958) gibi bilgisayarlarda uygulandı.

Mikroprogramlama, 1964'te tanıtılan IBM System/360 ailesiyle yaygınlaştı: aynı buyruk kümesi, farklı fiyat ve başarım düzeyindeki donanımlarda mikrokod sayesinde gerçeklenebiliyor, hatta eski makinelerin öykünümü (emülasyon) yapılabiliyordu.[1] Ailenin modellerini birbirinden ayıran şey büyük ölçüde mikrobuyruk belleğinin içeriğiydi; en hızlı model ise mikroprogram kullanmayıp denetimi doğrudan donanımla gerçekliyordu. 1970'ler ve 1980'lerde mikrokod, karmaşık buyruk kümeli işlemcilerin neredeyse tümünde standart bir teknik hâline geldi. 1980'lerde güç kazanan RISC akımı ise basit buyruklar ve donanımsal denetimle mikrokodun ağırlığını azalttı.[2]

Günümüzdeki kullanımı

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

Çağdaş yüksek başarımlı işlemciler iki yaklaşımı birleştirir. x86 işlemcilerinde değişken uzunluklu karmaşık buyruklar önce daha basit mikro işlemlere çevrilir; sık kullanılan basit buyruklar bu çeviriyi donanımla doğrudan yaparken, karmaşık buyruklar mikrokoddan okunan dizilerle yürütülür.[2][5]

Günümüzde Intel ve AMD gibi üreticiler, hata düzeltmeleri ve güvenlik önlemleri için mikrokod güncellemeleri yayımlar. Bu güncellemeler işletim sistemi ya da BIOS/UEFI yoluyla her açılışta işlemciye yüklenir ve kalıcı değildir; güç kesildiğinde işlemci yeniden özgün mikrokoduyla açılır.[5]

Mikroprogramlamanın üstünlükleri:[1][3]

  • Karmaşık buyrukların gerçeklenmesini kolaylaştırır ve denetim birimi tasarımını sistematik kılar.
  • Aynı buyruk kümesinin farklı donanımlarda gerçeklenmesini ve başka mimarilerin öykünümünü kolaylaştırır.
  • Üretimden sonra ortaya çıkan tasarım hatalarının (errata) ya da güvenlik açıklarının mikrokod güncellemesiyle düzeltilebilmesini sağlar.

Sınırlılıkları:[2]

  • Denetim belleğine erişim ek gecikme getirdiğinden, mikroprogramlı denetim genellikle donanım tabanlı denetimden yavaştır.
  • Mikrobuyruk belleği yonga üzerinde yer kaplar; yatay kodlamada bu alan belirgin biçimde büyür.
  • Basit ve düzenli buyruk kümelerinde getirdiği esnekliğin karşılığı alınamaz; RISC tasarımlarının donanım tabanlı denetime dönmesinin nedeni budur.
  1. 1 2 3 4 5 6 7 8 9 10 11 Tanenbaum, Andrew S. (2013). Structured Computer Organization (6 bas.). Pearson. ISBN 978-0-13-291652-3.
  2. 1 2 3 4 5 6 7 Patterson, David A.; Hennessy, John L. (2017). Computer Organization and Design: The Hardware/Software Interface (5 bas.). Morgan Kaufmann. ISBN 978-0-12-407726-3.
  3. 1 2 3 4 5 6 Mano, M. Morris (1993). Computer System Architecture (3 bas.). Prentice Hall.
  4. ↑ Wilkes, M. V. (1951). "The Best Way to Design an Automatic Calculating Machine". Report of the Manchester University Computer Inaugural Conference. ss. 16–18.
  5. 1 2 Hennessy, John L.; Patterson, David A. (2017). Computer Architecture: A Quantitative Approach (6 bas.). Morgan Kaufmann. ISBN 978-0-12-811905-1.