Mikro kod tam olarak nedir ve bellenimden farkı nedir?


50

Terminoloji olarak "mikro kod" tam olarak nedir ve güncellenebiliyorsa, bellenimden farkı nedir?

Bu soru, mikro kodun değiştirilmesi hakkında da sorduğum (söyleyebildiğim kadarıyla) bu sorunun bir kopyası değil . Burada kesinlikle bu terimlerin doğru kullanılmasını bilmek istiyorum.

Güncelleme

Seçilmiş bir cevabım var, fakat özellikle bundan memnun değilim. Çok fazla cevap verdim ve bu cevapların pek çoğunu aynı derecede tatmin edici bulmuyorum. Öyleyse size iki karemi sunayım.

  1. "İşlemci mikro kodu, işlemci ürün bilgisine benziyor." Bunu daha fazla okudukça, böyle alıyorum. "Microcode" bu bağlamda sadece "işlemci ürün yazılımı" üzerinden pazarlanmaktadır. Ayı benimle, ..
  2. Ya da yanılıyorum ve bunun olduğunu biliyorum! Bu durumda, neden yanlış olduğum hakkında daha kapsamlı bir fikre ihtiyacım var. Yanıldığımı göstermek için okuduğum cevaplarda, onları anlamakta zorlanıyorum.
    • “Veri yürütme vs veri” pek çok cevap bu paradigmayı kullanır, ancak bana göre pek anlamlı olmayan CPU için. Bazı assert firmware, ancak ne tarafından yürütülür. CPU'ya gelince, programlar talimatlar mı yoksa veriler mi?
    • Ürün yazılımı, yazılımı ve donanımı köprülediriyorsa (okuyun: Tanrıların elektrik mühendisliği malzemeleri), o zaman mikro kod da bu ayrımı nasıl tatmin etmiyor?
    • Zaman geçtikçe "Yorumlama", bu daha da az anlamlıdır. Microcode ile "donanım talimatları yorumlanır" demek ne demektir? Bu doğru olsaydı, bir şey yorumlanmasaydı, ancak farklı donanım talimatlarına önceden derlendiyse ve sadece "çalıştırıldıysa" performans kadar mı olurdu? Ayrıca, General MIDI aynı ışıkta nasıl yorumlanmıyor? "MIDI mikrokodu" tarafından yorumlanan ve donanımda çalışan bir dildir. Ya da görsel gösterim için teleprinter talimatlarını yorumlayan aptal terminaller?
    • "Mikro kod" ses kartlarında ve video kartlarında (GPU'larda) çalışan kod için geçerli midir?

Ben bir uzman değilim, ama mikro kodun işlemci üretici yazılımı olduğunu söyleyebilirim. Mikro kodun nasıl yürütüldüğüne ilişkin tüm verilerin intel / AMD tarafından tescilli olacağını hayal ediyorum, ancak nasıl çalışacağını tahmin edebiliyorum. Basit bir CPU setiniz var, hafızadan ve matematik operatörlerinden veri almak gibi temel şeyler. O zaman karmaşık bir komut setine sahipsiniz (örneğin x86 / intel). CPU talimatı bellekten alır ve karmaşık talimatı daha basitlerine dönüştürmek için mikro kodu kullanır. Bir örnek çarpma olacaktır. Çoğu CPU'nun bir çarpma komutu vardır, ancak gerçekte çarpma, çoklu bit değişimlerinden oluşur.
Programmdude

Microcode terimi, CPU „code“ talimatlarının çoğunu kullandığı / temel aldığı anlamına gelir. Temel olarak CPU'ya talimatları ve özellikleri nasıl taklit edeceğini anlatır. Bu yüzden adı. Bir bilgisayar sahibinin bakış açısından, donanım satıcısı tarafından gönderilen bir başka kod daha vardır, bu nedenle alternatif olarak üretici yazılımı olarak özetlenebilir.
18'de eckes

IMO, en basit cevap, "Bir işlemci her komut çalıştırdığında, aslında bir mikro kod programı çalıştırıyor" şeklindedir. Tek bir işlemci talimatı gibi görünen şey, belirli bir mikro kod komutları dizisi, bir 'mikro kod programı'. Her komutun kendi mikro kod programı vardır. Bireysel mikro kod talimatları işlemcinin çeşitli iç bitlerini etkinleştirir / devre dışı bırakır / vb.
Ethan Reesor

Yanıtlar:


57

Yazılım kelimesinin kökeni donanım ve yazılım - donanım üzerine gömülü yazılım arasında bir merkez noktasıdır. Bir donanım aygıtında kalıcı belleğe kaydedildiği yazılımı ifade eder. Örnekler, cihazın kendisi tarafından çalıştırılan kodu depolamak için kullanıldığında donanım cihazlarına gömülü olan EEPROM ve Flash belleğidir.

"Donanım yazılımı" nın bazı donanım türlerinde, sürücü yazılımında saklanması ve cihazda kalıcı olarak bırakılmak yerine, başlatıldığında / başlatıldığında cihaza yüklenmesi daha da yaygınlaşmaktadır. Günümüzde, örneğin, ana bilgisayar işletim sistemine yüklenen bir yazılım sürücüsünde birkaç yüz KB bellenim kodunu saklamak ve bunu sürücü tarafından başlatıldığı gibi aygıta göndermek önemli değildir.

Kabul ettiğiniz ürün yazılımının tanımına bağlı olarak, teknik olarak ürün yazılımı olarak düşünemeyebilirsiniz, çünkü donanımda yerleşik bulunmadığından teknik olarak düşünemezsiniz (donanımı söküp başka bir sisteme yerleştirirseniz, "firmware" versiyonunu korumaz).

Microcode bu "firmware" türünün alt kümesidir. Mikro kod, açılışta bir aygıta yüklenen tüm "bellenim" için genel bir terim değildir. Bunun yerine, mikro kodun temel olarak daha yüksek seviyeli standart CPU talimatları ile bu işlemciye özgü daha düşük seviyeli işlemler arasında çeviri katmanını oluşturduğu CPU'lara özgüdür. CPU tarafından önyüklemede, BIOS tarafından yüklenir, ancak daha sonra işletim sistemi tarafından önyükleme aşamasında da değiştirilebilir.

Mikrokodda yapılan bir güncelleme, CPU donanımının değiştirilmesine gerek kalmadan bir CPU'nun düşük seviyeli davranışının belirli ancak keşfedilmiş hataların etrafında çalışacak şekilde değiştirilmesine izin verebilir. Microcode genellikle en iyi hız ve enerji verimliliği için mümkün olan en yüksek seviyeden en düşük seviyeye kadar olan talimatlara en verimli eşleştirmeyi içerir, bu nedenle bazen bazı hataları gidermek için mikro kodda bir değişiklik yapılması gerektiğinde, performansın düşmesine neden olabilir.

Meltdown'un (yalnızca Intel yongalarını etkileyen güvenlik açığı) yalnızca mikro kod güncellemeleriyle düzeltilemeyeceğini ve çekirdek işletim sistemi işlevselliğinde değişiklik yapmayı gerektirdiğini ve bu da performansı daha da azaltabileceğini unutmayın. Spectre (Intel, AMD ve ARM yongalarını etkileyen güvenlik açığı) yalnızca mikro kod güncellemeleriyle ilgili olarak çalışılabilir.


Düzenlemenizden bu yana bazı sorularınızı cevaplamak için:

  1. Evet, mikro kod temelde işlemci üzerinde çalışan bir ürün yazılımıdır. Özel "mikro kod" terimi, standart makine dilden düşük seviye işlemci talimatlarına çevrilmesi için plan içeren bir işlemci üzerindeki üretici yazılımını belirtir. Bu yüzden bellenimden daha spesifik bir terimdir.

    Yukarıda tartıştığım gibi, kapalıyken CPU'da depolanmadığını, ancak her açılışta üzerine yüklendiğini, böylece geleneksel bellenim gibi çalışmadığını unutmayın. Ancak, şimdi bir çok donanım bunu yapıyor ve hala "firmware" olarak adlandırılıyor, bu yüzden onu firmware olarak adlandırmak kabul edilebilir.

  2. Yanıldığını sanmıyorum. Firmware'in belirli bir makine dilinde yazılması gerekmez ve uygulamanın belirli bir şekilde tetiklenmesi gerekmez. Belli bir düşük seviyede, tüm makine kodu bir işlemci tarafından "okunan" ve belirli bir şekilde yorumlanan "veri" dir.

    "Mikrokod" terimi, diğer cihazlarda aynı şekilde kod yüklü olsalar da, genellikle sadece ana CPU'lar için kullanılır, grafik kartları veya diğer donanımlar için kullanılmaz.


1
İkinci cümleniz yanlış; üretici yazılımı ROM'da depolanan yazılımı içerir. Bir zamanlar çoğu ürün yazılımı ROM'daydı, alternatifler uygun hale gelmeden önce.
Harry Johnston,

1
Açıkçası, "microcode" bir CPU'ya özgüdür. Soru, spesifik olmanın dışında, farklı yapmasıydı. Kapsamın kaldırılması ("CPU"), "doğrudan üst seviye talimatlar ve alt seviye işlemler arasındaki çeviri katmanı" için neredeyse doğrudan bir teklif alırsınız. Bu hemen hemen sadece üretici yazılımının tanımıdır. Tüm donanım yazılımı böyle yapmıyor mu? Çok fazla kelime var ama bence en açıklayıcı ve özlü açıklama yukarıdaki, "İşlemci mikro kodu işlemci ürün bilgisine benziyor."
Evan Carroll,

@Evan, çoğu aygıt talimatlarını dolaylı olarak alır, CPU'da çalışan koddan gönderilir. Yalnızca CPU doğrudan kullanıcı tarafından sağlanan kodu işlemektedir. Ayrıca, çoğu cihazın bellenimi çalıştıran bir tür gömülü CPU içerdiğini ve bu CPU'nun kendi mikro koduna sahip olabileceğini göz önünde bulundurun. Bu ayrım sadece donanım tasarımcıları ve çekirdek programcıları için önemli olabilir, ancak keyfi bir fark değildir.
Harry Johnston,

"çoğu cihaz, bellenimi çalıştıran bir tür gömülü CPU içerir ve bu CPU kendi mikro koduna sahip olabilir" demek istediğim bu. Yani bir ses kartındaki bir midi akışını işleyen kod da "mikro kod" mu? Ya da aptal bir terminalde karakterleri çizen / veren kod görüntüleniyor mu?
Evan Carroll,

Hayır. Bir MIDI akışını işlemek için ses kartında çalışan kod yalnızca normal bir ürün yazılımıdır. Kod işler Mikrokod olacak bir MIDI akışı işlemek için ses kartı üzerinde çalıştığı kodu. (Uygulamada, ses kartı kadar basit bir şeyde gömülü CPU'nun ilk önce mikrokodu gerektirdiğinden emin değilim, ama bu konunun dışında.) Önemli olan bir MIDI akışının veya gönderilen karakterlerin aptal bir terminal, kod değil. Onlar sadece veri.
Harry Johnston,

23

https://wiki.debian.org/Microcode

CPU Mikrokodu

İşlemci mikro kodu, işlemci ürün bilgisine benzer. Çekirdek, işlemcinin donanım yazılımını BIOS güncellemesi ile güncellemeye gerek kalmadan güncelleyebilir. Bir mikro kod güncellemesi geçici bellekte tutulur, böylece BIOS / UEFI veya çekirdek her önyükleme sırasında mikro kodu günceller.

Intel ve AMD işlemcilerinin düzgün çalışması için mikro kodlarında güncelleme yapılması gerekebilir. Bu güncellemeler, yanlış işlemeden kod ve veri bozulmasına ve sistem kilitlenmelerine kadar herhangi bir şeye neden olabilecek hataları / hataları düzeltiyor.

BIOS (veya UEFI), önyükleme sırasında CPU mikro kodunu günceller, ancak çoğu zaman ana kart satıcısı sık sık BIOS / UEFI güncellemeleri yayınlamaz veya kullanıcı bu tür güncellemeleri yüklemez. Bu nedenlerden dolayı, sistem işlemcisinin çok sayıda sistemde eski mikro kodla çalışıyor olması muhtemeldir.

Örnekler:

https://www.win-raid.com/t3355f47-Intel-AMD-amp-VIA-CPU-Microcode-Repositories.html


9
Bu kadar basit değil: Microcode "donanım ile bilgisayarın mimari düzeyi arasında tercüman uygulayan bir teknik" tir. Bu nedenle, mikro kod, birçok dijital işleme öğesinde daha yüksek düzey makine kodu talimatları ya da dahili durum makine sıralaması uygulayan donanım düzeyinde bir talimatlar katmanıdır. Kaynak: en.wikipedia.org/wiki/Microcode

17
Öyleyse bekle ... "tekne" sadece belirli bir tür "araç" mı? Ne işe yaramaz bir kelime! :-)
Harry Johnston,

4
@HarryJohnston Pekala, "bir botu" belirli bağlamlarda diğer araç türlerinden ayırmanın oldukça yararlı olduğunu düşünüyorum ... ve "mikro kod" birçok modern işlemcide bulunan çok özel bir "şey" türüdür ... ( bu nedenle bunun için bir terim olması oldukça arzu edilir).
Radovan Garabík

4
@ RadovanGarabík: Bu tam olarak Harry'nin alaycı ile yapılmış olduğu nokta.
Peter Cordes

4
Anlamadım. "Çekirdek, işlemcinin donanım yazılımını BIOS güncellemesi ile güncelleme ihtiyacı olmadan güncelleyebiliyorsa", o zaman neden "anakart satıcısının sık BIOS / UEFI güncellemeleri yayınlamayacağını" gerçeği "sistem işlemcisi" anlamına geliyor. çok sayıda sistemde eski mikro kod ile çalışıyor olması muhtemel " Çekirdek neden sadece mikrokodu düzeltmiyor? BIOS hiç güncellenmezse ve daha sık güncellenen bir alternatif varsa neden BIOS'a güvenin?
Ajedi32

6

Eh, Intel "mikro kod güncellemeleri" aslında işlemcinin yalnızca mikro kod çeviri biriminden daha fazla güncelleme yaptıkları anlamında "bellenim" güncellemeleridir.

Intel için "mikro kod güncellemeleri" olarak adlandırdığımız bu birleştirilmiş işlemci paketi güncellemeleri, ayrıca diğer farklı mikroişlemcileri (PMU ve güç yönetimi çekirdeği gibi) ve ayrıca farklı kalıp içi işlemci alt sistemleri için çeşitli parametre tablolarını da günceller. Onlar oldukça karmaşık.

Bu bilgiler, mikro kod ve mikro kod güncellemeleriyle ilgili birçok Intel patentinde mevcuttur.


4

"Mikrokod" teriminin temelde kodun ne yaptığını (düşük seviye komutları kullanarak düşük seviyeli komutları yürüttüğünü) belirtirken, "donanım yazılımı" ifadesi temel olarak nasıl depolandığını ve yönetildiğini (yazılımdan daha az kolay güncellendiğini belirtir) , donanımdan daha kolay güncellendi). Bu anlamda bir "uygulama" ile bir "JAR dosyası" arasındaki ayrım gibi - aynı program her ikisi de olabilir, ancak iki farklı bakış açısıyla bakıyorsunuz.

Bu arada, mikro kod fikri 1951'de bilgisayar işlemcileri silikonun içine gömülmeden on yıl önce Maurice Wilkes'a dayanıyor.


3

Firmware genellikle, bir android telefon için firmware olan CPU'nun kendisi olmayan bir CPU içeren cihazlar için kod anlamına gelir.

Mikro kod, karmaşık komut setleri (örneğin, 486, 686, AMD-64 vb.) İle yonga üreticilerinin silikon tasarladığı alt seviye talimatlar arasında bir çeviri katmanıdır. Bu nedenle, CPU komut setindeki bazı talimatlar silikonda uygulanmaz, ancak mikro kodla silikonda uygulanan birden fazla talimata çevrilir.


Ancak, tüm bellenim için doğru değil. Talimatlar Silikonda uygulanabilecek, ancak yazılım aracılığıyla güncellenen ve bulunmayan ABI'ler?
Evan Carroll

1
Intel'in "mikro kod güncellemeleri" , mikro kodlama talimatlarının kod çözme şeklini değiştirmek yerine çok daha fazlasını yapabilir . Örneğin, döngü tamponunu (SKL150 hatalarını düzeltmek için Skylake'de) devre dışı bırakabilirler çünkü devre dışı bırakılabilirler çünkü mümkün olduğunda CPU, donanım hatalarının keşfedilmesi durumunda bunu mümkün kılacak şekilde tasarlanmıştır.
Peter Cordes

3

"Microcode" orjinal terimdir ve bir işlemcinin "genel" komut setine tercüman uygulamak için kullanılan talimatlara atıfta bulunur.

Ancak zamanla, uygulama şemalarındaki birçok değişiklikle birlikte olduğu gibi ayrım daha belirsizleşmiştir. İlk önce yatay ve dikey mikrokodlar vardı, ardından "ana" işlemci komut setinde "mikrokodu" (G / Ç komutlarını uygulamak için) yazmak için çeşitli şemalar vardı. Ardından, sıradan program "run" işlemleri ile kolayca yüklenen kodu, ROM'a kaydedilen kodu (örneğin BIOS için) veya başka bir korumalı ve nispeten değişmez depolamayı ayırt etmek gerekiyordu. Bu nedenle "ürün yazılımı" terimi, bir şekilde depoda daha kalıcı (ve kullanıcı modifikasyonu için daha az erişilebilir) yapılan bu talimatlara atıfta bulunuldu.

Ancak, bu ilk ayrımların yapılmasından bu yana işler pek çok kez değişti ve büküldü ve artık terimler yalnızca belirli bir işlemci ve işletim sistemi ortamında herhangi bir hassasiyetle tanımlanabilir.


+1, buradaki anahtar "mikrokod" teriminin pek çok anlamı olduğudur ve OP'nin diğer anlamlar hakkında değil de "mikrokod güncellemeleri" hakkında bilmek istediğini düşünüyorum.
Peter Cordes,

3

[Not: bu cevap özellikle en son yapılan düzenlemeye yöneliktir ve aksi takdirde önceden gönderilmiş ses yanıtlarına eklemez.]

Bu nedenle, yinelemek için: microcode (en azından ilk yaklaşıma kadar) , belirli bir ürün yazılımıdır.

"Microcode" bu bağlamda sadece "işlemci ürün yazılımı" üzerinden pazarlanmaktadır.

Şey, pazarlama değil. Pazarlama buna XBoost Pro (TM) veya başka bir şey diyebilirdi . Aksine, bu bir mühendislik terimidir; CPU'ları tasarlarsanız, mikro kod ile CPU'nun diğer üretici yazılımı (ve diğer cihazlara tipik olan üretici yazılımı türü) arasındaki ayrım sizin için önemlidir. Değilse, muhtemelen değildir.

Anakartlar tasarlarsanız ya da işletim sistemleri yazarsanız, daha "tuhaf" ve daha az bilinen "CPU ürün yazılımı güncellemesi" için kısaca "microcode update" kullanın. Çoğu CPU üretici yazılımı güncellemesi öncelikle mikro kodu etkiler, bu nedenle aynı şeye yeterince yakındır. Muhtemelen farkı biliyorsunuzdur, ama onunla ilgilenmenize gerek yok .

Son kullanıcının farkı bilmesi veya umurunda olması gerekmez ve ideal bir dünyada "microcode" kelimesini hiçbir zaman duymaz.

Son spekülatif icra açıkları konusundaki basın yayınlamasında dikkatinizi çektiğini tahmin ediyorum, ancak daha önce dikkat etmeniz gerekmediğini daha açık bir şekilde duymuş olabilirsiniz. Bu güvenlik açıkları, planlanandan daha önce yayınlandı; bu, basın kapsamının aksi olabileceğinden daha az küratörlüğüne neden olabilirdi. Son kullanıcının bakış açısından, BIOS güncellemelerini, işletim sistemi güncellemelerini ve bazı durumlarda uygulama güncellemelerini yüklemeniz gerekir; bunlardan herhangi birinin yeni mikro kod içerdiğini bilmeniz veya bakım yapmanız gerekmez.


Öyleyse, muhtemelen bilmek ya da ilgilenmek zorunda olmadığınızı fark etseniz bile, hala saf meraktan ilginizi çekebilir: mikro kodu diğer aygıt yazılımlarından nasıl ayırt edersiniz?

İlk farketmek istediğim, tek bir kesin ve hızlı tanımlamanın gerekmediği, bunun bir Bleggs ve Rubes olayı olduğudur . Yine de, mikro kod hakkında söyleyebileceğimiz bazı şeyler var:

  • Mikro kod genellikle bir CPU yerine bir CPU içinde çalışır. Bu üst düzey manzara.

  • Mikro kodun mimarisi normalde, normal bellenim de dahil olmak üzere normal kodun mimarisinden oldukça farklı görünür. Yüksek derecede paralel olması ve donanıma çok daha yakın olması muhtemeldir. Mevcut cevapların birçoğu (kendi cevabınız da dahil) bunu tartışıyor, ancak ayrıntıların CPU tasarımına bağlı olarak değişebileceği belirtilmelidir.

  • Her ne kadar donanım yalnızca üretici tarafından sağlanan ürün yazılımını çalıştıracak şekilde tasarlanmış olsa da, üçüncü taraf ürün yazılımının kullanılması özellikle nadir değildir , ancak muhtemelen garantiyi geçersiz kılar! Üçüncü taraf mikro kodu çok daha nadirdir, ancak eski zamanlarda (bir CPU'nun bir ekmek kutusunun büyüklüğüyle ilgili olduğu zamanlar hakkında konuşuyorum) bazı son kullanıcıların CPU'larındaki mikro kodu değiştireceklerine inanıyorum. Bildiğim kadarıyla, PC'lerde kullanılan CPU türlerinde bu mümkün değil.

  • Microcode tipik olarak bir kamu talimat seti mimarisini çevirir veya uygulamaya yardımcı olur, yani işletim sistemi tasarımcısı ve uygulama programcılarının kullandığı makine kodunu çalıştırır. Bir sonraki bölümde bu konuda daha fazla.


"Veri yürütme vs veri" pek çok cevabı bu paradigmayı kullanır

Kafa karıştırıcı şekilde farklı şekillerde korkuyorum ama kendi yorumuma değineceğim. Bu bölüm aynı zamanda yukarıdaki son madde işaret noktasında genişlemeye de hizmet eder. Buradaki amaç, bir CPU'nun yaptığı (donanım ve mikro kod kombinasyonu ile elde edilen) ve tipik bir cihazın yaptığı (donanım ve donanım yazılımı kombinasyonu ile elde edilen) işi ayırt etmeye çalışmaktır. SATA sabit disk sürücüsü seçeceğim.

SATA sürücüsü, "5,123 numaralı sektörden verileri oku" ve "bu verileri 1.321 sektörüne yaz" satırları boyunca gelen bilgisayardan gelen talimatları izler. Sürücünün bellenimi, donanımın bunu gerçekleştirmesini sağlamaktan sorumludur ve genellikle bir tür gömülü CPU'da çalışan sıradan bir koddur. Sürücünün talimatları, geldikleri sırayla işlenemese de sırayla gelir. Bu talimatlar bir program değildir , ana CPU'da çalışan bir program tarafından gönderilir . Özellikle, hiçbir kontrol akışı yoktur, diğer bir deyişle SATA sürücüsüne hangi talimatların çalıştırılacağını söyleyen bir talimat yoktur.

CPU bilgisayardan sorumludur. Başlatmayı bitirdikten sonra, anakart (BIOS, başka bir ürün yazılımı türü) tarafından sağlanan (işletim sistemi tarafından sağlanan makine kodunu, verilen makine kodunu çalıştırmaya yönlendiren makine kodunu çalıştırmaya yönlendiren) ("makine kodu") çalıştırır. uygulama satıcıları tarafından. CPU, makine kodunu EEPROM'dan (BIOS durumunda) veya RAM'den (işletim sistemi ve uygulamalar için) alır. Özellikle, makine kodu bir kontrol akışına sahiptir: makine kodu CPU'ya daha sonra hangi makine kodunu gerçekleştireceğini söyler. Aynı makine kodunun üzerine tekrar tekrar geçebilir, kodun üzerinde çalıştığı verilere bağlı olarak farklı kod bitleri çalıştırabilirsiniz - SATA kodu gibi bir aygıt arayüz dilindeki talimatlar sınırlı bir dizi basit işlemi yapabilir, ancak makine kodu yapherhangi bir şey . (Ayrıca bkz . Tamamlanma Turing .)

Yukarıdaki son madde işaret noktasını şu şekilde yeniden yazabiliriz: microcode genellikle bir Turing Complete dilini uygular; sıradan bir ürün yazılımı genellikle yapmaz.


Microcode ile "donanım talimatları yorumlanır" demek ne demektir?

Doğru ama muhtemelen kafa karıştırıcı; Önemli olan, kontrol akışı olan ve Turing Complete olan makine kodu ile SATA gibi bir cihaz arayüzü tarafından tanımlanan ve olmayan komutlar arasındaki ayrımdır.


"Mikro kod" ses kartlarında çalışan koda uygulanır mı

Hayır, ses kartları, SATA sürücülerinde olduğu gibi kod değil, talimat alır. Talimatlar "play A sharp" veya "bu verileri bir dalga formu olarak yorumlayıp oynatmak" şeklinde olabilir. Hala çok basit.

ve video kartları (GPU'lar)?

Eski moda video kartları (GPU'lar olmayanlar) SATA sürücülerle aynıdır. Talimatlar "bu pikseli bu renge ayarla" ya da "bu konuma bir A yaz" gibidir.

... GPU'lar karmaşık ve yukarıda anlatmaya çalıştığım iki dünya arasında bir yere oturmuşlar. Onları ana bilgisayarın içinde, kendi işlemcileri olan özel bir bilgisayar olarak düşünmek muhtemelen en basittir. SATA sürücüleri gibi cihazların da gömülü CPU'ları olduğu doğrudur, ancak fark, SATA sürücüsündeki gömülü CPU'nun yalnızca sürücü üreticisi tarafından sağlanan kodu çalıştırmasıdır; oysa ki GPU'lar işletim sistemi ve / veya uygulama satıcısı tarafından sağlanan kodu da çalıştırmaktadır. Gerçekten bu tamamen ayrı bir soru.


TL; DR: microcode, donanımın bir Turing Complete talimat seti uygulamasına yardımcı olan belirli bir üretici yazılımıdır.


1

Mikro kod ( "kontrol deposu" ) geçici veya kalıcı bir bellekte bulunan veridir - genellikle veri çıkış sinyalleri paralel donanım işlevsel birimlerinin kontrol sinyali girişlerine, rastgele kontrol mantığına, vb. Bağlanan oldukça küçük ama çok geniş bir hafızadır. Mikrokod belleğin adres girişleri, bir veya daha fazla donanım bloğunun kontrol sinyallerini etkin bir şekilde sıralamak için bir seferde bir hafıza kelimesi ("mikro program talimatı") içinden geçen bir durum makinesi tarafından sağlanır . Bu zaman çoklayıcı donanımı ve karmaşık işlemlerin önemli ölçüde daha az rasgele mantıkla uygulanmasına izin verir.

Modern mikroişlemcilerde, fiziksel silikon mikro mimarisini ortak bir "makine kodu" arayüzü olan daha genel bir mimarlık ailesine soyutlamak için gerekli olan bir mikro kodlama / sıralama birimi hiyerarşisi olabilir. Örneğin, talimat kod çözücülerini ve kayan nokta birimlerini uygulamak için birkaç mikro kod / sekans katmanı olabilir.

Geleneksel anlamda bellenim, geçici olmayan bir bellekte bulunan ve nadiren olması beklenen veya hiç değişmeyen beklenen herhangi bir yazılım / veridir. Bu, sürekli değişen sistem belleğinde saklanan veya daha çok yazılan ve çalıştırılan yazılımı doğrudan karşılaştırır. Mikro kod özellikle donanımın dizilimini kontrol etmek için bir mikro programı temsil eden verileri ifade eder.

Mikro kod üretici yazılımına uygulanabilir / üretici yazılımı mikro kod içerebilir, ancak bunlar aynı değildir.


1
Modern x86 CPU'lar tanımladığınızdan çok daha kablolu; Haswell / Skylake'i değil, boru hattı olmayan bir 386'yı tarif ediyor gibisiniz. Intel'in "mikro kod güncellemeleri", mikro kodlama talimatlarının kod çözme şeklini değiştirmek yerine çok daha fazlasını yapabilir . Örneğin, döngü tamponunu (SKL150 hatalarını düzeltmek için Skylake'de) devre dışı bırakabilirler çünkü devre dışı bırakılabilirler çünkü mümkün olduğunda CPU, donanım hatalarının keşfedilmesi durumunda bunu mümkün kılacak şekilde tasarlanmıştır.
Peter Cordes,

@PeterCordes 1) x86 mimarisi, mikro kod kavramını sunmakla alakasızdır 2) cevabımı anladım mıydı, kontrol sinyallerini sıraladığınızı kabul ettiğimizi kabul ettim - allude

1
Hayır, Intel Uops gerçekten kontrol sinyalleri değildir. Klasik bir MIPS boru hattındaki gibi mantık birimlerini doğrudan programlamazlar. Uopslar, hangi uops'ların diğer hangi uops'lar üzerinde veri bağımlılığına sahip olduğunu bulmak için sıra dışı zamanlayıcı tarafından okunur. Bu, 6502 gibi bir şeyden çok farklı bir iç modeldir; burada tek bir talimatın uygulanmasının çoklu aşamaları bir kod çözme ROM'undan okunur. Tarif ettiğiniz şey, mikro kod teriminin bir tarihsel anlamıdır, ancak modern CPU'lar için “mikro kod güncellemeleri” ne değildir.
Peter Cordes,

Nerede (ya da bu konudaki soruda) Intel ya da x86 mikro işlemlerinden bahsettim (kontrol mağazasında "mikro program" ile aynı değil)? Ayrıca, bir kontrol deposundan sağlanan tam anlamıyla bir şey, sinyalin sekanslı veya statik, mantıksal veya telli olup olmadığı bir kontrol sinyalidir. Tarif ettiğim şey, "mikro kod güncellemeleri" de olan mikro kodun gerçek tanımı. Cevabımın sıralama kısmına asılırsınız, çünkü bir Haswell'deki söz konusu sinyallerin çoğu statik olacaktır. Kayıt için, birçok edilir sıralandı, sıralama ardışık ya OoOE kesinlikle birbirini dışlayan değil.

1
Bu yüzden doğru olarak "bir mikro kodlanmış komut nedir" sorusunu yanıtlıyorsunuz , ancak bir CPU için bir "mikro kod güncellemesi", "mikro kod" kelimesinin aynı teknik anlamına sahip değil. Bu, OP'nin kargaşasının kökeninde olduğu gibi açıkça yapılması gereken önemli bir nokta.
Peter Cordes

0

Ürün yazılımı , bir ROM'a veya diğer geçici olmayan belleğe yerleştirilen yürütülebilir koddur.

Ürün yazılımının orijinal ve birincil amacı, bir CPU başladığında orada olmaktır, bu nedenle CPU'nun hangi sistemini başlatmak veya başlatmak için çalıştırılacak kodu vardır. PC'lerde, üretici yazılımı çalışan işletim sistemine hizmet vermek için kullanılır ve ayrıca fanları, gücü ve diğer bazı şeyleri kontrol eden yerleşik denetleyicilerin kodunu ve arka planda çalışan ME / PSP kodunu tutar .

Sabit diskler, USB aygıtları vb. Gibi donanım yazılımı alan çevresel aygıtlarda yerleşik bir CPU bulunur.


Mikro kod çalıştırılabilir kod değil, bir cihazın dahili olanakları tarafından kullanılan bir koddur.

WRMSR komutuyla Intel veya AMD işlemcilere yüklenir. Ürün yazılımının bir cihaza yüklenmesi, bir ROM veya flash ortamının programlanmasını veya donanım yazılımını kabul etmek için cihazda bulunacak küçük bir yükleyici programına güvenmeyi içerir.

Ürün yazılımı ve mikro kod güncellemeleri benzer bir kategoridedir - donanımın çalışması için yapmanız gerekenler ve zaman zaman güncellenmesi gerekebilir - ancak bunlar çok farklı şeylerdir.

Birçok CPU'daki karmaşık talimatlar doğrudan donanıma bağlı değildir, fakat ana CPU'daki daha küçük bir CPU benzeri tesiste "uygulanır". Microcode bu işlemleri kontrol eder. Bu, en azından mikro kod içeren bir "MicroROM" olan Motorola 68000'e dayanıyor.

Intel veya AMD işlemcilerden başka hiç kimse mikro kodun gerçekte ne kontrol ettiğini veya ne yaptığını bilmiyor, çünkü ayrıntıları serbest bırakmıyor. Bunu kesmek için girişimler var. Referans .

Pratik olarak, mikrokod güncellemeleri temel olarak, bilinen CPU modellerinde / adımlarında sorunlara yol açan talimatları devre dışı bırakmak için kullanılır ve Intel'den en son CPU'lar, güvenilir bir şekilde çalışması için genellikle en az bir mikro kod güncellemesi gerektirir.


6502 PLA kod çözme ROM'unu okuyorsanız, bir CPU mikro kodunun gerçekte neler yapabildiğini / gerçekte ne elde edilebileceği üzerine bazı perspektifler elde edilebilir - 6502 eski bir 8 bit CPU'dur ve talimatları dahili bir PLA tarafından sıralanır / kontrol edilir. PLA, her bir talimatın her aşamasında çipin hangi kısımlarının yer aldığını söyleyecektir (6502 talimatları 2 ila 7 döngü arasında değişmektedir). Önbellek, süperskalar mimarisi, dal kestirimi, vs. gibi şeylerden çok önce.


1
Intel'in "mikro kod güncellemeleri" , mikro kodlama talimatlarının kod çözme şeklini değiştirmek yerine çok daha fazlasını yapabilir . Örneğin, döngü tamponunu (SKL150 hatalarını düzeltmek için Skylake'de) devre dışı bırakabilirler çünkü devre dışı bırakılabilirler çünkü mümkün olduğunda CPU, donanım hatalarının keşfedilmesi durumunda bunu mümkün kılacak şekilde tasarlanmıştır.
Peter Cordes,

1
6502 PLA hakkında ilginç bir nokta var, ancak boru hattı olan CPU'ların bundan daha fazla kablolu olması gerekiyor. Klasik MIPS, iç mantığı doğrudan buna benzer bir şekilde doğrudan kontrol etmek için talimat-sözcüğün farklı alanlarını kullandı, ancak elbette bir boru hattı işlemcisinde, duraklar yoksa potansiyel olarak her boru hattı aşaması için bir tane olmak üzere birden fazla talimat var. (Ya da daha yüksek, her bir boru hattı aşamasında 2 veya daha fazla ve sıra dışı için daha da karmaşıktır.) Modern CPU'ların iç kısımlarının çoğu kabloludır, ancak mikro kod güncellemelerinin çimdikleyebileceği topuzlarla.
Peter Cordes,

0

terminoloji

Bunda yalnız kullanım-bağlamını kullanarak bu kendim cevap olacak bu pdf .

  • Firmware - Microcode , CPU'nun firmware tarafından sağlanan bir yolla güncellenir.

    "Genellikle, önyükleme işlemi sırasında anakart ürün yazılımı (örneğin, BIOS veya UEFI) veya işletim sistemi tarafından CPU'ya bir mikrokod yama yüklenir ."

  • Microcode - "Talimat Kod Çözme Ünitesi (IDU)" tarafından kullanılan verilerdir. Bir IDU, kablolu veya mikro kodlamalı olabilir . Bu bağlamda mikro kodlanmış, sadece programlanmış demektir. ALSO , "çok sayıda mikro kod" anlamına gelir . IDU

    IDU kontrol ünitesinde merkezi bir rol oynar ve komut kaydının içeriğine dayalı kontrol sinyalleri üretir.

  • Makro talimatı , kodu çözülmek üzere IDU'ya gönderilen bir talimat, herhangi bir miktarda Mikro talimatı geri getirebilir .

  • Mikro-talimat bir önceden hesaplanmış "kontrol sözcüğü", tüm durum ve bir saat döngüsü için çalıştırılacak talimatlar. Kontrol sinyallerini üretmek için CPU'ya gönderilir .

Yani bu bağlamda, mikro kodu firmware ile güncellersiniz. Makro komutunu, CPU üzerinde yürütülmek üzere bir "mikro komut" haline getirmek için mikro kodlanmış IDU'ya makro komutları gönderir ve bu onları kontrol sinyallerine dönüştürür.

Bunu okudum

Mikrokod olan veriler , ancak mikrokodları güncellenmesi yapılır yoluyla firmware. Ve kafa karıştırıcı bir şekilde, dahili bir arama tablosuna esasen neyin önemli olduğundan bahsettiğinizden , çipin esasen çipte depolanması ve çipin yürütme akışında kullanılması nedeniyle kesinlikle kendi yazılımıdır . Sanırım General MIDI, donanım PostScript ve aptal terminaller için kontrol sinyallerinin aynı anlamda donanım olarak da yorumlandığını ve bir şeyin talimat aldığını ve nihayetinde bir çeşit yorum sürecinde "kontrol sinyalleri" ürettiğini iddia edebileceğinizi düşünüyorum. .

İşlemci içerisindeki bu süreçler ve bileşenler için özel bir isimlerimiz var: İşlemci üzerindeki "IDU" ve IDU'nun kullandığı belirli "giriş" için kullanılan "mikro kodlamalar": "mikro kod". Bu süreçle ilgili bilgiler tescilli ve kapalıdır. Modemlerden (ATDT ve bir Hayes modemindeki benzeri), MIDI kartlarına kadar başka herhangi bir teknolojiye benzer olduğunu, ancak belirli arama tablosuna "microcode" adını vermiyoruz ve bunun yerine "firmware" terimini kullandık. Yanıp sönme işlemi ve tüm yük yongasında saklanır.


2
Linux (ve Windows) CPU mikro kodunu, bahsettiğiniz anakart ürün yazılımından tamamen bağımsız olarak güncelleyebilir. Anakart firmware yapar son CPU mikrokodları ve herhangi bir kod diskten yüklenmeden önce onu uygulamak için bir mekanizma içerirler, ancak bir süre için anakart firmware güncellemediğiniz bile, yine de sadece yazılım güncelleyerek en son işlemci mikrokodları sahip olabilir. Mobo firmware ve CPU microcode arasındaki bağlantıdan çok büyük bir anlaşma yapıyorsunuz. Firmware’in her açılışta mikro kodu güncellemesi yararlıdır, ancak gerekli değildir (bazen kararlılık dışında).
Peter Cordes,

2
Ayrıca, tüm x86 makro talimatlarının hepsi, mikro kod sıralayıcı ROM'da aranarak çözülmez. Intel CPU'larda, 4 veya daha az uop'a (mikro-op) dekode olan talimatlar dekodere kodlanmıştır. Çoğu talimat , kelimenin bu anlamıyla "mikro kodlanmış" değildir . Tamsayılı bölme ( divve idiv), ancak FP bölmesi bile tek uop'tur (daha yüksek performans için kritik olduğundan, çok aşamalı yinelemeli mantık, bölme birimi içinde mikro kodlu uops yerine yerine yapılır).
Peter Cordes

@PeterCordes bu cevabı yazan adam sensin, daha teknik olarak doğru yapmak için cevabımın herhangi birini düzenlemek için hissediyorum. Sen carte blanche aldın. Gerçi, eğer zamanında yetersizseniz, bu değişiklikleri bu gece yapmaya çalışacağım.
Evan Carroll

Etrafı aşarsam, başladığım cevabı yazmayı bitiririm. Şimdilik, Harry Johnston'ın cevabı muhtemelen şu ana kadar bilmek istediğinizi düşündüğüm cevaba cevap vermede muhtemelen en iyisidir (ki bu bir "mikro kod güncellemesi" gerçekten güncellenir, bu da "CPU mikro kodunun" yaptığı ile aynı değildir) çünkü aşırı basitleştirilmiş bir isim, genel halkın izleyebileceği tek kelimeli bir isim gerektiren teknik işlerde olduğu gibi.)
Peter Cordes

0

Temel ISA tasarımında, MIPS kavramlarını modellenmiş bir RISC işlemcisinin çalışma ve tasarımında ders aldım. İşte hatırlamaya geldiğim şey

Anladığım kadarıyla, kayıtlar, ALU'lar, çoklayıcılar ve bellek modülleri gibi bir işlemcinin temel blokları, işlerini yapabilmeleri için belirli sinyalleri gerektirir. Bu sinyalleri "onay" sinyalleriniz olarak adlandırırsınız, çünkü bu blokları çalıştırmak için gereken sinyallerdir. İşlemciler aslında ALU'ların, bellek modüllerinin, yazmaçların ve diğer donanımların bir spagetti bloğudur. Yani, her bir CPU, işlerini yapmak için belirli kontrol sinyalleri dizisi göstermelidir (ANDI, ORI, JMP, BNE, BEQ, vb. Gibi temel komutları kastediyorum). Müfredatın hızı bana o sırada kontrol üniteleri hakkında hiçbir şey öğretmediği için, bir talimat setinin test edilmesi ve hata ayıklanması sırasında sinyalleri kendim (tam anlamıyla tüm MIPS talimatlarını okuyordum) geçerken söylemek zorunda olduğumda karışık duygular yaşadım.

Öte yandan, assembler dili komut sözcüğü içerisindeki opkodlara ve onların işleyişlerine kadar uzanır (temelde veri yolunuzun genişliği). MIPS açısından, talimat kelimenizin ilk 6 biti opcode'unuzdur. Sadece matematiksel incelemeyle, ALU'nuzu, kayıt cihazınızı, hafızanızı, mux'larınızı "iddia edemezsiniz".

Sahip olmadığınız sürece hayır ... BİR TALİMAT VERGİSİ. Komut kodu çözücüsü temelde kodunuzu alır ve donanımınızı çalıştırmak için gereken TÜM "onaylama" sinyallerinizi oluşturur. Ancak, talimat kod çözücüler mimariler arasında uygulamada farklılık gösterir ve bazı durumlarda programlanabilir. Mikro kod, talimat kod çözücünün programlanabilir bölümünü etkiler.

Donanım yazılımının , donanıma gömülü herhangi bir bilgi için genel bir terim olduğuna inanıyorum . Bazı durumlarda, bit akımı EEPROM ve flash bellek gibi donanımlarda kodlanıp saklanabildiği için mikro kodu da belirtir. Ancak çoğu zaman, FPGA'larda kullanılan kod, asm ve hatta VHDL / Verilog bit akışlarını derler. Bana göre Mikrokod, tercih edilen işlemcide "onaylama sinyallerini" belirtmek için kullanılan anlambilim gibi gözüküyor.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.