Ortogonal komut seti - Orthogonal instruction set

Gelen bilgisayar mühendisliği , bir ortogonal komut kümesi bir olan komut kümesi mimarisi tüm talimat türlerinin tümünü kullanabilir adresleme modları . Komut tipi ve adresleme modunun bağımsız olarak değişmesi anlamında " ortogonal " dir. Bir ortogonal komut seti, belirli bir kaydı kullanmak için belirli bir talimat gerektiren bir sınırlama getirmez, bu nedenle komut işlevselliğinin çok az örtüşmesi olur.

Ortogonalite, 1970'lerde işlemci tasarımcıları için büyük bir hedef olarak görülüyordu ve VAX-11 genellikle bu konsept için bir ölçüt olarak kullanılıyordu. Bununla birlikte, 1980'lerde RISC tasarım felsefelerinin ortaya çıkması , daha fazla ortogonaliteye karşı eğilimi önemli ölçüde tersine çevirdi. Modern CPU'lar, gerçek görevleri RISC benzeri bir çekirdekte gerçekleştirmeden önce genellikle bir ön işleme adımında ortogonaliteyi simüle eder.

Temel konseptler

Özünde, tüm genel amaçlı bilgisayarlar aynı temelde çalışır; bir ana bellekte saklanan veriler , merkezi işlem birimi (CPU) tarafından hızlı bir geçici belleğe (örneğin, CPU kayıtları ) okunur , harekete geçirilir ve ardından ana belleğe geri yazılır. Bellek, sayılar olarak kodlanan ve adresleri ile belirtilen , aynı zamanda sayısal bir değer olan bir veri değerleri koleksiyonundan oluşur . Bu, verilere uygulanan aynı işlemlerin adreslerin kendilerine de uygulanabileceği anlamına gelir. Veriler üzerinde çalışılırken geçici olarak işlemci kayıtlarında , çok hızlı bir şekilde erişilebilen karalama defteri değerlerinde tutulabilir. Kayıtlar, örneğin sayı dizilerini bir toplama eklerken kullanılır.

Tek komut, tek operand

İlk bilgisayarlarda, komut seti mimarisi (ISA) genellikle tek bir kayıt kullanıyordu, bu durumda akümülatör olarak biliniyordu . Talimatlar, işlenen için bir adres içeriyordu. Örneğin, bir talimat CPU'nun bu adreste bulunan bellekteki sayıyı almasına ve daha sonra bunu akümülatörde bulunan değere eklemesine neden olabilir. Bu çok basit örnek ISA'nın "tek adresli bir formatı" vardır çünkü her komut verinin adresini içerir. ADD address

Tek adresli makinelerin dezavantajı, toplama gibi basit eylemlerin bile birden fazla talimat gerektirmesidir, bunların her biri kıt hafızayı kaplar ve okunması için zaman gerektirir. İki sayı, 5 + 4 eklemenin basit görevini düşünün. Bu durumda, programın komutla birlikte akümülatöre 5 değerini yüklemesi , 4 için adresi gösteren komutu kullanması ve son olarak sonucu saklaması gerekir. , 9, başka bir hafıza konumuna geri dönün. LOAD addressADD addressSAVE address

Tek komut, çoklu işlenenler

Örneğin, her iki işlenenin adresini tek bir talimatta sağlayarak daha fazla iyileştirme bulunabilir . Bu tür "iki adresli format" ISA'lar çok yaygındır. Konsept , ayrıca bir genişletilmiş olarak katlandığı "üç adresli bir formata" genişletilebilir . ADD address 1, address 2SAVEADD address 1, address 2, address of result

Genellikle temel bilgisayar kelimesinin sadece talimatı ve bir adresi tutmak için gerekenden çok daha büyük olduğu ve çoğu sistemde, bir adres yerine bir sabit tutmak için kullanılabilen artık bitler vardır. İşlenenlerden herhangi birinin bir sabit ile değiştirilmesine izin verirlerse, talimatlar daha da geliştirilebilir. Örneğin, bir hafıza döngüsünü ve diğerini ortadan kaldırır . ADD address 1, constant 1ADD constant 1, constant 2

Birden çok veri

Belleğe erişilen ortak örüntüler düşünüldüğünde daha fazla karmaşıklık ortaya çıkar. Çok yaygın bir model, tek bir işlemin büyük miktarda benzer veriye uygulanabilmesidir. Örneğin, 1000 numara eklemek isteyebilir. Basit bir iki adresli talimat biçiminde, adresi değiştirmenin bir yolu yoktur, bu nedenle makine dilinde 1.000 ekleme yazılmalıdır . ISA'lar bu sorunu dolaylı adresleme kavramıyla çözer , burada bir sonraki veri noktasının adresi sabit değildir, ancak bellekte tutulur. Bu, programcının bu bellek konumuna ekleme yaparak adresi değiştirebileceği anlamına gelir. ISA'lar ayrıca çoğu zaman bir adresi, bazı durumlarda özel bir dizin kaydı olmak üzere kayıtlarından birinde tutulan bir değeri ekleyerek başlangıç ​​konumundan dengeleme becerisini içerir . Diğerleri bu ilaveyi, onu kullanan talimatların bir parçası olarak otomatik olarak gerçekleştirir.

Adresleme modlarının çeşitliliği, biraz farklı talimatların bolluğuna yol açar. Tek bir talimat için bile tek adresli bir ISA düşünüldüğünde ADD , artık birçok olası "adresleme modumuz" var:

  • Hemen (sabit): - toplayıcıdaki sonuca sabit değeri ekler ADD.C constant 1
  • Doğrudan adres: - adres 1'de saklanan değeri ekleyin ADD.A address 1
  • Dolaylı bellek: - adres 1'deki değeri okuyun, bu değeri başka bir adres olarak kullanın ve bu değeri ekleyin ADD.M address 1

Birçok ISA'nın matematik görevlerinin yanı sıra adresleme için kullanılabilecek kayıtları da vardır. Bu, tek bir adres kaydı kullanılıyorsa, tek adres biçiminde kullanılabilir. Bu durumda, bir dizi yeni mod kullanılabilir hale gelir:

  • Doğrudan kayıt: - kayıt 1'de tutulan adreste saklanan değeri ekleyin ADD.R register 1
  • Yer değiştirme: - sabiti adres yazmacına ekleyin, ardından bellekte bulunan değeri ortaya çıkan bu konuma ekleyin ADD.D constant 1
  • Dizin: - yeni bir adres oluşturmak için kayıt 1'deki değeri adres kaydına ekleyin ve ardından bu konumdaki değeri toplayıcıya ekler ADD.I register 1
  • Otomatik dizin: - Dizin durumunda olduğu gibi, ancak adresi otomatik olarak artırır ADD.AI register 1

Ortogonalite

Ortogonallik, her komutun desteklenen herhangi bir adresleme modunu kullanabilmesi gerektiği ilkesidir. Bu örnekte, doğrudan adresleme sürümü ADD mevcutsa, diğerleri de olmalıdır. Bu tasarımın nedeni estetik değil, amaç bir programın nesne kodunun toplam boyutunu azaltmaktır . ISA, çeşitli adresleme modları sağlayarak, programcının o noktada programlarının ihtiyacına tam olarak uyanı seçmesine ve böylece aynı sonuca ulaşmak için birden fazla talimat kullanma ihtiyacını azaltmasına izin verir. Bu, hem hafızadan tasarruf ederek hem de performansı artırarak toplam talimat sayısının azaltıldığı anlamına gelir. Ortogonalite, genellikle oldukça "bit verimli" olarak tanımlandı.

Ortogonal tasarımın nihai amacı, herhangi bir talimatın herhangi bir adres türünü kullanmasına izin vermek olduğu için, ortogonalitenin uygulanması genellikle işlemcinin parçaları arasına daha fazla kablolama eklenmesi durumudur. Bununla birlikte, aynı zamanda, program sayacının gösterdiği konumda bellekten bir talimatı okuyan ve sonra nasıl işleneceğine karar veren devre olan komut kod çözücüsünün karmaşıklığına da katkıda bulunur .

Yukarıda özetlenen ISA örneğinde, ADD.C doğrudan kodlamayı kullanan talimat , talimatı çalıştırmak için ihtiyaç duyduğu verilere zaten sahiptir ve daha fazla işleme gerek yoktur, kod çözücü, değeri basitçe aritmetik mantık birimine (ALU) gönderir . Bununla birlikte, ADD.A talimat kullanılırsa, adresin okunması gerekir, bu hafıza konumundaki değer okunur ve ardından ALU devam edebilir. Bu olaylar dizisinin tamamlanması çok daha uzun sürer ve daha fazla dahili adım gerektirir.

Sonuç olarak, bir talimatın farklı varyasyonlarını tamamlamak için gereken süre büyük ölçüde değişebilir ve bu da genel CPU tasarımına karmaşıklık katar. Bu nedenle, diklik tasarımda bir değiş tokuşu temsil eder; bilgisayar tasarımcısı, CPU'nun kendisini daha karmaşık hale getirme pahasına kod yoğunluğunu iyileştirmek için programcıya daha fazla adresleme modu sunmayı seçebilir.

Bellek küçük ve pahalı olduğunda, özellikle tambur belleği veya çekirdek bellek çağında , ortogonalite oldukça arzu edilirdi. Bununla birlikte, karmaşıklık çoğu zaman mevcut teknoloji kullanılarak elde edilebileceklerin ötesindeydi. Bu nedenle, 1960'ların çoğu makine, tasarımcıların karşılayabileceği kadar, yalnızca kısmi diklik sunuyordu. 1970'lerde, büyük ölçekli entegrasyonun başlatılması, bilgisayar tasarımlarının karmaşıklığını önemli ölçüde azalttı ve tamamen ortogonal tasarımlar ortaya çıkmaya başladı. 1980'lere gelindiğinde, bu tür tasarımlar tek yongalı bir CPU'ya uygulanabilir.

1970'lerin sonlarında, ilk yüksek güçlü tam ortogonal tasarımların ortaya çıkmasıyla birlikte, hedef, yüksek seviyeli dil bilgisayar mimarisi veya kısaca HLLCA olmak üzere genişledi . Tıpkı makine dilinin bit yoğunluğunu iyileştirmek için diklik istendiği gibi, HLLCA'nın hedefi de ALGOL 68 gibi yüksek seviyeli dillerin bit yoğunluğunu iyileştirmekti . Bu diller genellikle , ISA'ların genellikle doğrudan desteklemediği ve temel ISA'dan gelen birçok bireysel talimat kullanılarak uygulanması gereken geçici değerleri depolayan karmaşık bir yığın türü olan bir etkinleştirme kaydı kullandı . Bu yapılar için destek eklemek, programın ISA'ya daha doğrudan çevrilmesine izin verecektir.

Pratikte ortogonalite

PDP-11

PDP-11 büyük ölçüde ortogonaldi (esas olarak kayan nokta talimatları dışında). Çoğu tamsayı talimatı, 1 bayt veya 2 baytlık değerlerde çalışabilir ve kayıtlarda saklanan, talimatın bir parçası olarak saklanan, hafızada saklanan veya hafızada saklanan ve yazmaçlardaki adresler tarafından işaret edilen verilere erişebilir. Hatta bilgisayar ve yığın işaretçisi normal veri modu tüm kullanılarak sıradan talimatları ile etkilenebilir. "Anında" modu (ADD # 4, R1 (R1 = R1 + 4) gibi bir komut içindeki sabit kodlu sayılar, "dolaylı kaydet, otomatik artırma" modu olarak uygulandı ve program sayacını (R7) referansı kullanmak için kayıt olarak belirterek dolaylı ve otomatik artış için.

PDP-11, adresleme modları (0-7) ve kayıtlar (R0 – R5, SP, PC) için 3 bitlik alanlar kullandı, bu nedenle (elektronik olarak) 8 adresleme modu vardı. İki otomatik artış modunu Program Sayacına (R7) uygulayan anında ve mutlak adres işlenenleri, toplam 10 kavramsal adresleme modu sağladı.

VAX-11

VAX-11 kayan nokta numaraları dahil tüm veri türlerine PDP-11'in ortogonalliğini uzatıldı. 'ADD' gibi talimatlar sırasıyla ADDB, ADDW, ADDL, ADDP, add byte, word, longword, paketlenmiş BCD ve tek duyarlıklı kayan nokta için ADDF gibi veri boyutuna bağlı değişkenlere bölünmüştür. PDP-11 gibi, Yığın İşaretçisi ve Program Sayacı da genel kayıt dosyasındaydı (R14 ve R15).

Bir VAX-11 talimatının genel biçimi şöyle olacaktır:

opcode [ operand ] [ operand ]  ...

Her bir bileşen bir varlık bayt , işlem kodu 0-255 aralığında bir değere sahiptir, ve her bir işlenen iki oluşan yarım bayt bir kayıt numarası (R0-R15 belirten (genellikle), bir adresleme modunu belirten üst 4 bit ve alt 4 bit ).

PDP-11'in 3 bitlik alanlarının aksine, VAX-11'in 4 bitlik alt baytları 16 mantıksal adresleme modu (0-15) ile sonuçlandı . Bununla birlikte, 0-3 adresleme modları, 6 bit veya daha az anlık veri için "kısa anlık" idi (adresleme modunun 2 düşük sıralı biti, kalan 4 bitin başına eklendiğinde, anlık verinin 2 yüksek sıralı bitidir. bu veri adresleme baytında). 0-3 adresleme modları aynı olduğundan, bu 13 (elektronik) adresleme modu yaptı, ancak PDP-11'de olduğu gibi, Yığın İşaretçisi (R14) ve Program Sayacı (R15) kullanımı toplamda 15'ten fazla kavramsal adresleme modu oluşturdu. (assembler programı kaynak kodunu gerçek yığın işaretçisine veya gerekli program sayacı tabanlı adresleme moduna çevirerek).

MC68000 ve benzeri

Motorola tasarımcıları, montaj dilini ortogonal yapmaya çalışırken, temel makine dili biraz daha azdı. PDP-11'den farklı olarak MC68000 (68k), verileri ve verilerin adreslerini bellekte depolamak için ayrı kayıtlar kullandı. ISA, adreslerin yalnızca bu kayıtlarda kullanılabileceği ölçüde ortogonaldi, ancak hangi kayıtların farklı talimatlar tarafından kullanılabileceği konusunda herhangi bir kısıtlama yoktu . Benzer şekilde, veri kayıtları da talimatlar arasında ortogonaldi.

Buna karşılık, NS320xx serisi orijinal olarak VAX-11 ISA'nın tek çipli uygulamaları olarak tasarlandı. Bunun yasal sorunlar nedeniyle değişmesi gerekmesine rağmen, ortaya çıkan sistem VAX-11'in genel tasarım felsefesinin çoğunu korudu ve tamamen ortogonal kaldı. Bu, 68k'de bulunan ayrı veri ve adres kayıtlarının ortadan kaldırılmasını içeriyordu.

8080 ve takip eden tasarımlar

8-bit Intel 8080 (8085 ve 8051 gibi) mikroişlemci temelde biraz genişletilmiş akümülatör tabanlı bir tasarımdı ve bu nedenle ortogonal değil. Bir montaj dili programcısı veya derleyici yazıcısı, her kayıtta hangi işlemlerin mümkün olduğuna dikkat etmelidir: Çoğu 8 bitlik işlem yalnızca 8 bitlik toplayıcıda (A yazmacı) gerçekleştirilebilirken, 16 bitlik işlemler yapılabilir. yalnızca 16-bit işaretçi / toplayıcı (HL-kayıt çifti) üzerinde gerçekleştirilirken, artış gibi basit işlemler, yedi 8-bitlik yazmaçların hepsinde mümkün olmuştur. Bu, büyük ölçüde tüm işlem kodlarını bir bayt uzunluğunda tutma arzusundan kaynaklanıyordu.

İkili uyumlu Z80 sonradan eklenen önek kodları bu 1 bayt sınırı kaçmak ve daha güçlü bir talimat seti için izin vermek. Intel 8086 için aynı temel fikir kullanıldı , ancak daha radikal uzantılara izin vermek için 8080 ile ikili uyumluluk burada denenmedi. O sırada yüksek kod yoğunluğu uğruna bir dereceye kadar ortogonal olmamayı sürdürdü. Bu mimarinin 80386 ile tanıtılan 32 bit uzantısı, tüm 8086 talimatlarını ve genişletilmiş muadillerini korumasına rağmen biraz daha ortogonaldi. Bununla birlikte, kullanılan kodlama stratejisi hala 8008 ve 8080'den (ve Z80'den) birçok iz göstermektedir. Örneğin, tek baytlık kodlamalar , yazmaçların ve sabitlerin itilmesi ve açılması gibi belirli sık işlemler için kalır ; ve birincil akümülatör, EAX kaydı , belirli işlem türlerinde diğer kayıtlardan daha kısa kodlamalar kullanır. Bunun gibi gözlemlerden bazen hem derleyicilerde hem de elle yazılmış kodda kod optimizasyonu için yararlanılır .

RISC

1970'ler boyunca yapılan bir dizi çalışma, ortogonal modların sunduğu esnekliğin nadiren kullanıldığını veya gerçek problemlerde hiç kullanılmadığını gösterdi. Özellikle, IBM'deki bir çalışma, System / 370 üzerinde çalışan kod izlerini inceledi ve mevcut modların yalnızca bir kısmının gerçek programlarda kullanıldığını gösterdi. Çoğunlukla VAX ile ilgili benzer çalışmalar, aynı modeli gösterdi. Bazı durumlarda, talimatların karmaşıklığının, daha küçük talimatlar dizisinden daha uzun sürdüğü anlamına geldiği gösterildi, bunun kanonik örneği VAX'ın INDEX talimatıydı.

Aynı dönemde, yarı iletken bellekler hızla büyüyor ve maliyeti düşüyordu. Ancak hızları aynı oranda gelişmiyordu. Bu, bellekten verilere erişmek için gereken sürenin CPU'ların hızına kıyasla göreceli olarak arttığı anlamına geliyordu . Bu, daha fazla yazmacın dahil edilmesi ve CPU'nun üzerinde çalışması için daha geçici değerler verilmesi gerektiğini savundu. Daha fazla sayıda yazmaç, kayıt numarasını kodlamak için bilgisayar kelimesinde daha fazla bit gerekeceği anlamına geliyordu, bu da talimatların kendilerinin yer açmak için sayılarının azaltılmasını öneriyordu.

Son olarak, Andrew Tanenbaum tarafından hazırlanan bir makale , bir programdaki tüm sabitlerin% 97'sinin 0 ile 10 arasında olduğunu ve 0'ın toplamın% 20 ila 30'unu temsil ettiğini gösterdi. Ek olarak, bir programdaki tüm değerlerin% 30 ila% 40'ı sabittir ve basit değişkenler (diziler veya benzerlerinin aksine)% 35 ila% 40'lık bir diğer değerle. İşlemci 32 bit gibi daha büyük bir komut kelimesi kullanıyorsa, komutun kendisi çok fazla bit kullanmadığı sürece tek bir komutta iki sabit ve bir kayıt numarası kodlanabilir.

Bu gözlemler, işlemci tasarımının birincil hedefi olarak ortogonal tasarımın terk edilmesine ve 1980'lerde RISC felsefesinin yükselmesine yol açtı. RISC işlemcileri genellikle yalnızca iki adresleme moduna sahiptir, doğrudan (sabit) ve yazmaç. Daha eski işlemcilerde bulunan diğer tüm modlar, verileri kayıtlara ve kayıtlardan taşıyan yükleme ve depolama talimatları kullanılarak açıkça işlenir. Yalnızca birkaç adresleme modu mevcut olabilir ve bu modlar, talimatın verilere atıfta bulunmasına veya bir kontrol aktarımını içermesine bağlı olarak değişebilir .

Notlar

Referanslar

  1. ^ Null, Linda; Lobur Julia (2010). Bilgisayar Organizasyonu ve Mimarisinin Temelleri . Jones & Bartlett Yayıncılar. s. 287–288. ISBN   978-1449600068 .
  2. ^ Tariq, Jamil (1995), "RISC vs CISC: Why less is more" , IEEE Potentials (August / September) , 7 Mayıs 2019 tarihinde alındı
  3. ^ "Temel Bilgisayar Organizasyonu ve Tasarımı" (PDF) . Hesaplamalı Duyusal-Motor Sistemleri Laboratuvarı.
  4. ^ a b c d e Tullsen, Dean. "Komut Seti Mimarisi" (PDF) . UCSD.
  5. ^ a b c d e f g Hennessy, John; Patterson, David (2002-05-29). Bilgisayar Mimarisi: Nicel Bir Yaklaşım . s. 151. ISBN   9780080502526 .
  6. ^ "PDP-11'e Giriş" . Sydney Üniversitesi .
  7. ^ a b "PDP-11 talimat referansı" (PDF) . Toronto Üniversitesi .
  8. ^ a b c "Komut Seti Mimarisine Başka Bir Yaklaşım — VAX" (PDF) . Bremen Üniversitesi .
  9. ^ Veronis, Andrew (2012-12-06). 68000 Mikroişlemci . s. 54. ISBN   9781468466478 .
  10. ^ Tilson, Michael (Ekim 1983). "Unix'i Yeni Makinelere Taşıma" . BYTE . s. 266 . Erişim tarihi: 31 Ocak 2015 .
  11. ^ "NS32532" . Datormuseum .
  12. ^ Patterson, DA ; Ditzel, DR (1980). "İndirgenmiş komut seti bilgisayarı için durum". ACM SIGARCH Bilgisayar Mimarisi Haberleri . 8 (6): 25–33. CiteSeerX   10.1.1.68.9623 . doi : 10.1145 / 641914.641917 . S2CID   12034303 .
  13. ^ Tanenbaum, Andrew (1978). "Makine mimarisi için yapılandırılmış programlamanın etkileri" . ACM'nin İletişimi . 21 (3): 237–246. doi : 10.1145 / 359361.359454 . hdl : 1871/2610 . S2CID   3261560 .