Apa sebenarnya mikrokode dan apa bedanya dengan firmware?


50

Sejauh terminologi, apa sebenarnya "mikrokode" dan jika dapat diperbarui, apa bedanya dengan firmware?

Pertanyaan ini bukan duplikat dari pertanyaan ini (sejauh yang saya tahu) yang saya juga tanyakan tentang memodifikasi mikrokode. Di sini saya benar-benar ingin tahu cara menggunakan istilah-istilah ini dengan benar.

Memperbarui

Saya punya jawaban yang dipilih, tetapi saya tidak terlalu puas dengannya. Saya telah menggunakan banyak jawaban dan saya menemukan banyak tanggapan yang sama-sama tidak memuaskan. Jadi izinkan saya hadir untuk Anda dua frame saya,

  1. "Mikrokode prosesor mirip dengan firmware prosesor." Ketika saya membaca ini semakin banyak, itulah cara saya menerimanya. "Microcode" dalam konteks ini hanya pemasaran lebih dari "firmware prosesor." Bersabarlah dengan saya, ..
  2. Atau, saya salah, dan saya tahu itu terjadi! Dalam hal ini, saya perlu ide yang lebih menyeluruh tentang mengapa saya salah. Dalam jawaban yang saya baca untuk menunjukkan bahwa saya salah, saya berjuang memahami mereka,
    • "Eksekusi vs data" banyak jawaban menggunakan paradigma ini, tetapi untuk CPU itu tidak masuk akal bagi saya. Beberapa firmware menegaskan dieksekusi, tetapi dengan apa? Ketika datang ke CPU, apakah program instruksi atau data?
    • Jika firmware menjembatani perangkat lunak dan perangkat keras (baca: teknik elektro para Dewa), lalu bagaimana mikrokode tidak juga memuaskan perbedaan itu.
    • "Menafsirkan" seiring berjalannya waktu, ini semakin tidak masuk akal. Apa artinya mengatakan "instruksi perangkat keras ditafsirkan" dengan Microcode. Jika itu benar, apakah sesuatu akan berkinerja baik jika tidak diinterpretasikan tetapi dikompilasi dengan instruksi perangkat keras yang berbeda dan hanya "dieksekusi"? Juga, bagaimana Jenderal MIDI tidak ditafsirkan dalam cahaya yang sama? Ini adalah bahasa yang ditafsirkan oleh "mikrokode MIDI" dan berjalan pada perangkat keras. Atau, terminal bisu yang menafsirkan instruksi teleprinter untuk tampilan visual?
    • Apakah "mikrokode" berlaku untuk kode yang berjalan pada kartu suara, dan kartu video (GPU) ?

Saya bukan ahli, tetapi saya akan mengatakan bahwa mikrokode adalah firmware prosesor. Saya membayangkan semua data tentang bagaimana mikrokode dieksekusi akan menjadi milik Intel / AMD, tetapi saya bisa menebak bagaimana cara kerjanya. Anda memiliki satu set CPU sederhana, hal-hal dasar seperti mengambil dari memori dan operator matematika. Kemudian Anda memiliki set instruksi yang kompleks (seperti x86 / intel). CPU mendapatkan instruksi dari memori dan menggunakan mikrokode untuk mengubah instruksi kompleks menjadi instruksi yang lebih sederhana. Salah satu contohnya adalah multiplikasi. Sebagian besar CPU memiliki instruksi multiply, tetapi sebenarnya mengalikan terdiri dari beberapa bit shift.
Programmdude

Istilah Microcode mengacu pada fakta bahwa ia menggunakan / mendasari banyak instruksi "kode" CPU. Ini pada dasarnya memberitahu CPU bagaimana meniru instruksi dan fitur. Karena itu namanya. Dari sudut pandang pemilik komputer, ini adalah seperangkat kode lain yang dikirimkan oleh vendor perangkat keras, sehingga dapat diringkas sebagai firmware.
eckes

IMO, jawaban sederhana terbaik adalah, "Setiap kali prosesor menjalankan instruksi, itu sebenarnya menjalankan program mikrokode." Apa yang Anda anggap sebagai instruksi prosesor tunggal adalah urutan tertentu dari instruksi mikrokode, sebuah 'program mikrokode'. Setiap instruksi memiliki program mikrokode sendiri. Instruksi mikrokode individu mengaktifkan / menonaktifkan / dll berbagai bit internal prosesor.
Ethan Reesor

Jawaban:


57

Asal usul kata firmware adalah titik tengah antara perangkat keras dan perangkat lunak - perangkat lunak yang tertanam pada perangkat keras. Ini merujuk pada perangkat lunak yang disimpan dalam memori yang tidak mudah menguap pada perangkat keras. Contohnya adalah EEPROM dan memori Flash yang disematkan ke perangkat perangkat keras, ketika digunakan untuk menyimpan kode yang dijalankan oleh perangkat itu sendiri.

Ini menjadi lebih umum di beberapa jenis perangkat keras untuk "firmware" untuk disimpan dalam perangkat lunak driver dan dimuat ke perangkat ketika itu di-boot / diinisialisasi, daripada meninggalkannya secara permanen di perangkat. Misalnya, ini bukan masalah besar, untuk menyimpan beberapa ratus KB kode firmware dalam driver perangkat lunak yang dimuat ke OS host, dan mengirimkannya ke perangkat seperti yang diinisialisasi oleh driver.

Ini sering masih disebut sebagai "firmware" walaupun tergantung pada definisi firmware yang Anda terima, Anda mungkin tidak secara teknis menganggapnya firmware karena tidak ada pada perangkat keras (jika Anda melepaskan perangkat keras dan meletakkannya di sistem lain, itu tidak akan mempertahankan versi "firmware").

Microcode adalah bagian dari "firmware" jenis terakhir ini. Microcode bukan istilah umum untuk semua "firmware" yang dimuat ke perangkat saat boot. Alih-alih, ini khusus untuk CPU, di mana mikrokode pada dasarnya membentuk lapisan terjemahan antara instruksi CPU tingkat tinggi dan operasi tingkat rendah khusus untuk CPU itu. Itu dimuat ke CPU saat boot, oleh BIOS, tetapi dapat diganti nanti di tahap boot oleh OS juga.

Pembaruan ke mikrokode dapat memungkinkan perilaku tingkat rendah CPU dimodifikasi untuk mengatasi bug yang belum ditemukan, tanpa perlu mengganti perangkat keras CPU. Microcode biasanya berisi pemetaan yang paling efisien dari instruksi tingkat tinggi ke rendah mungkin untuk kecepatan dan efisiensi energi terbaik sehingga kadang-kadang ketika perubahan ke mikrokode diperlukan untuk memperbaiki beberapa bug, itu dapat mengakibatkan penurunan kinerja.

Perhatikan bahwa Meltdown (kerentanan yang hanya mempengaruhi chip Intel) tidak dapat diperbaiki dengan pembaruan mikrokode saja dan memerlukan perubahan pada fungsionalitas OS inti, yang dapat mengurangi kinerja lebih lanjut. Specter (kerentanan yang memengaruhi chip Intel, AMD, dan ARM) mungkin dapat diselesaikan hanya dengan pembaruan mikrokode.


Untuk menjawab beberapa pertanyaan spesifik Anda sejak pengeditan:

  1. Ya, mikrokode pada dasarnya adalah firmware yang berjalan pada prosesor. Istilah khusus "mikrokode" secara khusus merujuk pada firmware pada prosesor yang berisi cetak biru untuk menerjemahkan dari bahasa mesin standar ke instruksi prosesor tingkat rendah. Jadi ini adalah istilah yang lebih spesifik daripada firmware.

    Perhatikan bahwa ketika saya bahas di atas tidak tersimpan di CPU saat sedang dimatikan tetapi dimuat ke dalamnya setiap kali Anda boot jadi dalam arti itu tidak berfungsi seperti firmware tradisional. Namun, banyak perangkat keras melakukan ini sekarang dan masih disebut "firmware" sehingga menyebutnya sebagai firmware dapat diterima.

  2. Saya tidak berpikir Anda salah. Firmware tidak harus ditulis dalam bahasa mesin tertentu dan pelaksanaannya tidak harus dipicu dengan cara tertentu. Pada level rendah tertentu semua kode mesin adalah "data" yang "dibaca" oleh prosesor dan ditafsirkan dengan cara tertentu.

    Istilah "mikrokode" biasanya hanya digunakan untuk CPU utama dan bukan kartu grafis atau perangkat keras lain, meskipun perangkat lain tersebut mungkin memuat kode ke dalamnya dengan cara yang sama.


1
Kalimat kedua Anda salah; firmware termasuk perangkat lunak yang disimpan dalam ROM. Sekali waktu sebagian besar firmware ada di ROM, sebelum alternatif menjadi terjangkau.
Harry Johnston

1
Jelas, "mikrokode" khusus untuk CPU. Pertanyaannya adalah selain spesifik apakah itu berbeda. Menghapus lingkup ("CPU"), Anda mendapatkan kutipan hampir langsung dari "lapisan terjemahan antara instruksi tingkat yang lebih tinggi dan operasi tingkat yang lebih rendah". Itu hanya definisi dari firmware. Bukankah itu yang dilakukan semua firmware? Ini banyak kata, tapi saya pikir deskripsi yang paling deskriptif dan singkat adalah di atas, "Mikrokode prosesor mirip dengan firmware prosesor."
Evan Carroll

@Van, sebagian besar perangkat menerima instruksi mereka secara tidak langsung, dikirim dari kode yang berjalan pada CPU. Hanya CPU yang memproses kode secara langsung yang disediakan oleh pengguna. Juga pertimbangkan bahwa sebagian besar perangkat berisi CPU tertanam dari beberapa jenis yang menjalankan firmware, dan CPU itu mungkin memiliki mikrokode sendiri. Perbedaannya mungkin hanya penting bagi perancang perangkat keras dan pemrogram kernel, tetapi itu bukan arbitrer.
Harry Johnston

"Sebagian besar perangkat mengandung CPU tertanam yang menjalankan firmware, dan CPU itu mungkin memiliki mikrokode sendiri" itulah yang saya maksud. Jadi kode yang memproses aliran midi pada kartu suara juga "mikrokode"? Atau kode yang menarik / menampilkan karakter pada terminal bisu?
Evan Carroll

Tidak. Kode yang berjalan pada kartu suara untuk memproses aliran MIDI hanyalah firmware biasa. Kode yang memproses kode yang berjalan pada kartu suara untuk memproses aliran MIDI akan berupa kode mikro. (Dalam praktiknya saya tidak yakin bahwa CPU yang tertanam pada sesuatu yang sederhana seperti kartu suara akan memerlukan mikrokode di tempat pertama, tapi itu intinya.) Kuncinya adalah aliran MIDI, atau karakter yang dikirim ke terminal bodoh, bukan kode. Mereka hanya data.
Harry Johnston

23

https://wiki.debian.org/Microcode

Mikrokode CPU

Mikrokode prosesor mirip dengan firmware prosesor. Kernel dapat memperbarui firmware prosesor tanpa perlu memperbarui melalui pembaruan BIOS. Pembaruan mikrokode disimpan dalam memori yang tidak stabil, sehingga BIOS / UEFI atau kernel memperbarui mikrokode selama setiap booting.

Prosesor dari Intel dan AMD mungkin perlu memperbarui mikrokode mereka untuk beroperasi dengan benar. Pembaruan ini memperbaiki bug / errata yang dapat menyebabkan apa pun dari pemrosesan yang tidak benar, hingga kerusakan kode dan data, dan penguncian sistem.

BIOS (atau UEFI) memperbarui mikrokode CPU selama boot, namun sebagian besar vendor motherboard tidak akan mengeluarkan pembaruan BIOS / UEFI yang sering, atau pengguna tidak akan menginstal pembaruan tersebut. Karena alasan ini, prosesor sistem kemungkinan akan berjalan dengan mikrokode usang pada sejumlah besar sistem.

Contoh:

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


9
Ini tidak sesederhana itu: Mikrokode adalah "suatu teknik yang memaksakan seorang juru bahasa antara perangkat keras dan tingkat arsitektur sebuah komputer". Dengan demikian, mikrokode adalah lapisan instruksi tingkat perangkat keras yang menerapkan instruksi kode mesin tingkat tinggi atau urutan mesin keadaan internal di banyak elemen pemrosesan digital. Sumber: en.wikipedia.org/wiki/Microcode

17
Jadi tunggu ... "perahu" hanyalah jenis "kendaraan" tertentu? Kata yang tidak berguna! :-)
Harry Johnston

4
@ HarryJohnston Yah, saya menganggap agak berguna untuk membedakan "perahu" dari jenis kendaraan lain dalam konteks tertentu ... dan "mikrokode" adalah jenis "sesuatu" yang sangat spesifik yang ada di banyak CPU modern ... ( karena itu agak diinginkan untuk memiliki istilah untuk itu).
Radovan Garabík

4
@ RadovanGarabík: Itulah maksud Harry, dibuat dengan sarkasme.
Peter Cordes

4
Saya tidak mengerti. Jika "Kernel dapat memperbarui firmware prosesor tanpa perlu memperbarui melalui pembaruan BIOS", lalu mengapa fakta bahwa "vendor motherboard tidak akan sering mengeluarkan pembaruan BIOS / UEFI" berarti bahwa "prosesor sistem adalah kemungkinan akan berjalan dengan mikrokode yang ketinggalan zaman pada sejumlah besar sistem "? Mengapa kernel tidak hanya menambal mikrokode? Mengapa mengandalkan BIOS jika BIOS tidak pernah diperbarui, dan ada alternatif yang lebih sering diperbarui tersedia?
Ajedi32

6

Yah, "pembaruan mikrokode" Intel sebenarnya adalah pembaruan "firmware" dalam arti bahwa pembaruan tersebut lebih dari sekadar unit terjemahan mikrokode dari prosesor.

Pembaruan paket prosesor terpadu ini kami sebut "pembaruan mikrokode" untuk Intel juga memperbarui mikrokontroler on-die lainnya (seperti PMU dan inti manajemen daya) serta beberapa tabel parameter untuk berbagai subsistem prosesor on-die yang berbeda. Mereka agak rumit.

Informasi ini tersedia di beberapa paten Intel terkait dengan pembaruan kode mikro dan kode mikro.


4

Saya pikir istilah "mikrokode" merujuk terutama pada apa yang dikerjakan kode (mengeksekusi instruksi level rendah bahkan menggunakan instruksi level lebih rendah), sedangkan istilah "firmware" merujuk terutama pada bagaimana ia disimpan dan dikelola (kurang mudah diperbarui daripada perangkat lunak , lebih mudah diperbarui daripada perangkat keras). Dalam arti itu agak seperti perbedaan antara "aplikasi" dan "file JAR" - program yang sama mungkin keduanya, tetapi Anda melihatnya dari dua perspektif yang berbeda.

Kebetulan, ide mikrokode kembali ke Maurice Wilkes pada tahun 1951, beberapa dekade sebelum prosesor komputer tertanam dalam silikon.


3

Firmware biasanya merujuk pada kode untuk perangkat yang mengandung CPU, bukan CPU itu sendiri, misalnya firmware untuk ponsel android.

Microcode adalah lapisan terjemahan antara set instruksi kompleks (mis. 486, 686, AMD-64 dll.) Dan instruksi level bawah yang dirancang pembuat silikon untuk silikon. Jadi sejumlah instruksi dalam set instruksi CPU tidak diimplementasikan dalam silikon tetapi diterjemahkan melalui mikrokode menjadi beberapa instruksi yang diimplementasikan dalam silikon.


Tapi, bukankah itu benar dari semua firmware. Instruksi ABI yang dapat diterapkan di Silicon tetapi tidak dan apakah bisa diperbarui melalui perangkat lunak?
Evan Carroll

1
"Pembaruan mikrokode" Intel dapat melakukan lebih dari sekadar memodifikasi cara pengodean instruksi yang didekodekan . misalnya mereka dapat menonaktifkan loop buffer (di Skylake untuk memperbaiki erratum SKL150) karena bila memungkinkan CPU dirancang untuk memungkinkan hal ini jika bug perangkat keras ditemukan.
Peter Cordes

3

"Microcode" adalah istilah asli, dan merujuk pada instruksi yang digunakan untuk mengimplementasikan juru bahasa untuk set instruksi "publik" prosesor.

Namun seiring waktu, dengan banyak variasi dalam skema implementasi, perbedaannya, seperti itu, semakin kabur. Pertama ada mikrokode horizontal vs vertikal, kemudian berbagai skema untuk menulis "mikrokode" (untuk mengimplementasikan, katakanlah, instruksi I / O) dalam set instruksi prosesor "utama". Kemudian ada kebutuhan untuk membedakan antara kode yang mudah dimuat melalui program biasa "menjalankan" operasi, vs kode (untuk BIOS, misalnya) yang disimpan dalam ROM atau penyimpanan lain yang dilindungi dan relatif tidak dapat diubah. Jadi istilah "firmware" diciptakan untuk merujuk pada instruksi ini yang entah bagaimana dibuat lebih persisten (dan kurang dapat diakses untuk modifikasi pengguna) dalam penyimpanan.

Tetapi banyak hal telah berubah dan berputar sejak perbedaan pertama ini dibuat, dan lagi istilah tersebut hanya dapat didefinisikan dengan presisi dalam lingkungan prosesor dan OS yang diberikan.


+1, kuncinya di sini adalah bahwa ada banyak arti dari istilah "mikrokode", dan saya pikir OP benar-benar ingin tahu tentang "pembaruan mikrokode", bukan arti lainnya.
Peter Cordes

3

[NB: jawaban ini secara khusus ditujukan untuk mengatasi pengeditan terakhir dan jika tidak menambahkan ke beberapa jawaban suara yang telah diposting.]

Jadi, untuk mengulangi: mikrokode (setidaknya ke perkiraan pertama) adalah jenis firmware tertentu.

"Microcode" dalam konteks ini hanya pemasaran lebih dari "firmware prosesor."

Yah, itu bukan pemasaran. Pemasaran akan menyebutnya XBoost Pro (TM) atau sesuatu. Sebaliknya, ini adalah istilah teknik; jika Anda mendesain CPU, perbedaan antara mikrokode dan firmware lain CPU (dan jenis firmware yang khas untuk perangkat lain) penting bagi Anda. Jika tidak, mungkin tidak.

Jika Anda mendesain motherboard atau menulis sistem operasi, Anda mungkin menggunakan "pembaruan mikrokode" sebagai singkatan untuk "pembaruan firmware CPU" yang lebih sulit dan kurang dikenal. Sebagian besar pembaruan firmware CPU mempengaruhi mikrokode, sehingga cukup dekat untuk hal yang sama. Anda mungkin tahu bedanya, tetapi Anda tidak perlu mempedulikannya .

Pengguna akhir tidak perlu tahu atau peduli tentang perbedaannya, dan di dunia yang ideal tidak akan pernah mendengar kata "mikrokode" sama sekali.

Saya kira itu menjadi perhatian Anda dalam liputan pers tentang kerentanan eksekusi spekulatif baru-baru ini, meskipun Anda mungkin juga pernah mendengarnya sebelumnya dalam konteks yang membuatnya lebih jelas bahwa Anda tidak perlu peduli. Kerentanan ini dirilis lebih awal dari yang direncanakan yang mungkin mengakibatkan liputan pers kurang kurasi dari yang seharusnya. Dari sudut pandang pengguna akhir, Anda perlu menginstal pembaruan BIOS, pembaruan sistem operasi, dan dalam beberapa kasus pembaruan aplikasi; Anda tidak perlu tahu atau peduli yang jika semua ini termasuk mikrokode baru.


Jadi, bahkan menyadari bahwa Anda mungkin tidak perlu tahu atau peduli, Anda mungkin masih tertarik dengan rasa ingin tahu yang murni: bagaimana Anda bisa membedakan mikrokode dari firmware lain?

Nah, hal pertama yang harus dikenali adalah bahwa tidak ada definisi tunggal yang keras dan cepat, itu lebih merupakan situasi Bleggs and Rubes . Namun, ada beberapa hal yang dapat kami katakan tentang mikrokode:

  • Mikrokode umumnya berjalan di dalam CPU dan bukan pada CPU. Itulah pandangan tingkat tinggi.

  • Arsitektur mikrokode biasanya terlihat sangat berbeda dengan arsitektur kode biasa, termasuk firmware biasa. Ini mungkin sangat paralel, dan diimplementasikan lebih dekat ke perangkat keras. Beberapa jawaban yang ada (termasuk jawaban Anda sendiri) membahas hal ini, meskipun perlu dicatat bahwa detailnya dapat bervariasi tergantung pada desain CPU.

  • Meskipun perangkat keras sering dirancang untuk hanya menjalankan firmware yang disediakan oleh pabrikan, perangkat ini tidak jarang digunakan untuk firmware pihak ketiga - meskipun mungkin akan membatalkan garansi! Mikrokode pihak ketiga jauh lebih jarang, meskipun saya percaya bahwa di zaman kuno (saya berbicara tentang kapan CPU seukuran kotak roti) beberapa pengguna akhir akan memodifikasi mikrokode dalam CPU mereka. Sejauh yang saya ketahui, ini tidak mungkin dalam jenis CPU yang digunakan di PC.

  • Microcode biasanya menerjemahkan atau membantu mengimplementasikan arsitektur set instruksi publik, yaitu menjalankan kode mesin yang digunakan oleh perancang sistem operasi dan pemrogram aplikasi. Lebih lanjut tentang ini di bagian selanjutnya.


"Eksekusi vs data" banyak jawaban menggunakan paradigma ini

Dengan cara yang membingungkan, saya takut, tetapi saya akan membahas komentar saya sendiri. Bagian ini juga berfungsi untuk memperluas poin terakhir di atas. Tujuannya di sini adalah untuk mencoba membedakan antara pekerjaan yang dilakukan CPU (dicapai dengan kombinasi perangkat keras dan mikrokode) dan pekerjaan yang dilakukan perangkat biasa (dicapai dengan kombinasi perangkat keras dan firmware). Saya akan memilih hard disk SATA.

Drive SATA mengikuti instruksi dari komputer, yang berada di sepanjang baris "baca data dari sektor 5.123" dan "tulis data ini ke dalam sektor 1.321". Firmware drive bertanggung jawab untuk membuat perangkat keras mewujudkannya, dan biasanya kode yang biasa digunakan berjalan pada CPU yang disematkan. Instruksi drive tiba secara berurutan, meskipun mereka mungkin tidak diproses sesuai urutan kedatangannya. Instruksi ini bukan program, itu dikirim oleh program yang berjalan pada CPU utama. Secara khusus tidak ada aliran kontrol, yaitu, tidak ada instruksi untuk memberi tahu drive SATA instruksi mana yang harus dijalankan selanjutnya.

CPU bertanggung jawab atas komputer. Setelah selesai menginisialisasi, ia menjalankan instruksi ("kode mesin") yang disediakan oleh motherboard (BIOS, jenis firmware lain) yang mengarahkannya untuk menjalankan kode mesin yang disediakan oleh sistem operasi yang mengarahkannya untuk menjalankan kode mesin yang disediakan oleh vendor aplikasi. CPU itu sendiri mengambil kode mesin dari EEPROM (dalam kasus BIOS) atau RAM (dalam kasus sistem operasi dan aplikasi). Secara khusus, kode mesin memiliki aliran kontrol: kode mesin memberi tahu CPU kode mesin apa yang harus dilakukan selanjutnya. Anda dapat mengulangi kode mesin yang sama berulang kali, Anda dapat menjalankan bit kode yang berbeda tergantung pada data yang dikerjakan kode - instruksi dalam bahasa antarmuka perangkat seperti kode SATA dapat melakukan serangkaian tugas sederhana yang terbatas, tetapi kode mesin dapat melakukanapa saja . (Lihat juga Turing Completeness .)

Kita dapat menulis ulang poin-poin terakhir di atas sebagai: mikrokode biasanya mengimplementasikan bahasa Turing Lengkap; firmware biasa biasanya tidak.


Apa artinya mengatakan "instruksi perangkat keras ditafsirkan" dengan mikrokode.

Benar tapi mungkin membingungkan; poin penting adalah perbedaan antara kode mesin, yang memiliki aliran kontrol dan Turing Lengkap, dan instruksi yang didefinisikan oleh antarmuka perangkat seperti SATA, yang tidak dan tidak.


Apakah "mikrokode" berlaku untuk kode yang berjalan pada kartu suara

Tidak, kartu suara menerima instruksi, bukan kode, seperti drive SATA. Instruksi mungkin seperti "memainkan A tajam" atau "menafsirkan data ini sebagai bentuk gelombang dan memainkannya". Masih sangat sederhana.

dan kartu video (GPU)?

Kartu video kuno (yang tanpa GPU) sama dengan drive SATA. Petunjuknya seperti "atur pixel ini ke warna ini" atau "tulis A ke posisi ini".

... GPU itu rumit dan duduk di suatu tempat antara dua dunia yang saya coba uraikan di atas. Mungkin paling sederhana untuk menganggap mereka sebagai komputer khusus yang berada di dalam komputer utama, yang memiliki CPU sendiri. Memang benar bahwa perangkat seperti drive SATA juga memiliki CPU yang disematkan, tetapi perbedaannya adalah bahwa CPU yang tertanam dalam drive SATA hanya menjalankan kode yang disediakan oleh produsen drive, sedangkan GPU juga menjalankan kode yang disediakan oleh sistem operasi dan / atau vendor aplikasi. Sungguh ini adalah pertanyaan yang terpisah.


TL; DR: mikrokode adalah jenis firmware khusus, yang membantu perangkat keras untuk mengimplementasikan serangkaian instruksi Turing Lengkap.


1

Microcode ( "control store" ) adalah data untuk berada dalam memori yang volatil atau tidak mudah menguap - umumnya memori yang agak kecil tetapi sangat lebar, yang sinyal output datanya ditransfer ke input sinyal kontrol unit fungsional perangkat keras paralel, logika kontrol acak, dll. Input alamat memori mikrokode disediakan oleh mesin negara yang melangkah melalui kata memori ("instruksi program mikro") pada suatu waktu, untuk secara efektif mengurutkan sinyal kontrol dari satu atau banyak blok perangkat keras. Perangkat keras multipleks waktu ini dan memungkinkan operasi yang kompleks diimplementasikan dengan logika acak yang jauh lebih sedikit.

Dalam mikroprosesor modern mungkin ada hierarki unit mikrokode / sekuensing yang diperlukan untuk abstrak mikroarsitektur silikon fisik ke keluarga arsitektur yang lebih umum dengan antarmuka "kode mesin" yang umum. Misalnya mungkin ada beberapa lapisan mikrokode / sekuensing untuk mengimplementasikan decoder instruksi dan unit floating point.

Firmware dalam arti tradisional adalah setiap perangkat lunak / data yang berada dalam memori non-volatile, yang diharapkan jarang atau tidak pernah berubah. Ini secara langsung kontras dengan perangkat lunak yang disimpan dalam atau lebih tepatnya ditulis dan dieksekusi dari memori sistem yang terus berubah. Microcode secara khusus mengacu pada data yang mewakili program mikro untuk mengontrol urutan perangkat keras.

Mikrokode dapat diimplementasikan dalam firmware / firmware mungkin berisi mikrokode, tetapi tidak sama.


1
CPU x86 modern jauh lebih terprogram daripada yang Anda gambarkan; sepertinya Anda menggambarkan 386 non-pipelined, bukan Haswell / Skylake. "Pembaruan mikrokode" Intel dapat melakukan lebih dari sekadar memodifikasi cara pengodean instruksi yang didekodekan . misalnya mereka dapat menonaktifkan loop buffer (di Skylake untuk memperbaiki erratum SKL150) karena bila memungkinkan CPU dirancang untuk memungkinkan hal ini jika bug perangkat keras ditemukan.
Peter Cordes

@PeterCordes 1) arsitektur x86 tidak relevan untuk mempresentasikan konsep mikrokode 2) seandainya Anda mengerti jawaban saya, kami akan setuju bahwa itu mengurutkan sinyal kontrol, seperti yang Anda singgung

1
Tidak, Intel uops tidak benar-benar mengendalikan sinyal. Mereka tidak secara langsung memprogram unit logika seperti dalam pipa MIPS klasik. uops dibaca oleh scheduler out-of-order untuk mengetahui uops mana yang memiliki ketergantungan data di mana uops lainnya. Ini adalah model internal yang sangat berbeda dari sesuatu seperti 6502 di mana beberapa langkah mengeksekusi instruksi tunggal dibaca dari ROM decode. Apa yang Anda gambarkan adalah satu makna historis dari istilah mikrokode, tetapi bukan itu yang dimaksud dengan "pembaruan mikrokode" untuk CPU modern.
Peter Cordes

Di mana saya (atau pertanyaannya) menyebutkan operasi mikro Intel atau x86 (yang TIDAK sama dengan "mikroprogram" di toko kontrol)? Juga, secara harfiah apa pun yang disediakan dari toko kontrol adalah sinyal kontrol, terlepas dari apakah sinyal diurutkan atau tidak, statis, logis atau kabel. Apa yang saya jelaskan adalah definisi harfiah dari mikrokode, "pembaruan mikrokode" juga. Anda terpaku pada aspek pengurutan jawaban saya karena banyak sinyal di Haswell akan menjadi statis. Sebagai catatan, banyak yang diurutkan, pengurutan sama sekali tidak eksklusif untuk pipelining atau OoOE.

1
Jadi Anda menjawab dengan benar pertanyaan "apa itu instruksi mikrokode" , tetapi "pembaruan mikrokode" untuk CPU tidak memiliki arti teknis yang sama dengan kata "mikrokode". Ini adalah poin penting yang harus dibuat secara eksplisit, karena ini adalah akar dari kebingungan OP.
Peter Cordes

0

Firmware adalah kode yang dapat dieksekusi yang ditempatkan dalam ROM atau memori non-volatile lainnya.

Tujuan asli dan utama dari firmware adalah untuk berada di sana ketika CPU dimulai, sehingga memiliki kode untuk dijalankan untuk memulai atau mem-boot sistem apa pun yang menjadi bagian dari CPU. Dalam kasus PC, firmware juga digunakan untuk menyediakan layanan untuk sistem operasi yang sedang berjalan dan juga memegang kode untuk pengendali tertanam yang mengontrol kipas, daya, dan beberapa hal lainnya, dan kode untuk ME / PSP yang berjalan di latar belakang .

Perangkat periferal yang menggunakan firmware, seperti hard drive, perangkat USB, dll. Memiliki CPU yang disematkan.


Microcode bukan kode yang dapat dieksekusi, tetapi kode yang digunakan oleh fasilitas internal perangkat.

Ini dimuat ke Intel atau AMD CPU dengan instruksi WRMSR. Memuat firmware ke perangkat melibatkan pemrograman ROM atau media flash, atau mengandalkan program loader kecil untuk hadir di perangkat untuk menerima firmware.

Pembaruan firmware dan mikrokode berada dalam kategori yang sama - hal-hal yang perlu Anda lakukan untuk membuat perangkat keras berfungsi dan mungkin perlu memperbarui dari waktu ke waktu - tetapi semuanya sangat berbeda.

Instruksi kompleks pada banyak CPU tidak secara langsung terhubung ke perangkat keras, tetapi "dieksekusi" oleh fasilitas mirip CPU yang lebih kecil di CPU utama. Mikrokode mengontrol operasi ini. Ini kembali ke setidaknya Motorola 68000 yang memiliki "MicroROM" yang mengandung mikrokode.

Tidak ada orang lain selain prosesor Intel atau AMD yang tahu apa yang benar-benar dikontrol atau dikerjakan oleh mikrokode, karena mereka tidak merilis detail. Ada upaya untuk meretasnya. Referensi .

Secara praktis, pembaruan mikrokode pada dasarnya digunakan untuk menonaktifkan instruksi yang menyebabkan masalah pada model / steppings CPU yang diketahui, dan CPU terbaru dari Intel sering membutuhkan setidaknya satu pembaruan mikrokode sebelum berfungsi dengan andal.


Beberapa perspektif tentang apa yang sebenarnya dapat dilakukan oleh mikrokode CPU / sebenarnya mungkin diperoleh jika Anda membaca tentang ROM decode 6502 PLA - 6502 adalah CPU 8-bit lama dan instruksinya diurutkan / dikontrol oleh PLA internal. PLA pada dasarnya akan mengatakan bagian mana dari chip yang terlibat pada setiap langkah dari setiap instruksi (6502 instruksi berkisar 2-7 siklus). Ini jauh, jauh sebelum hal-hal seperti caching, arsitektur superscalar, prediksi cabang, dll. Tidak yakin apakah mikrokode pada CPU modern akan mengontrol sesuatu seperti PLA itu.


1
"Pembaruan mikrokode" Intel dapat melakukan lebih dari sekadar memodifikasi cara pengodean instruksi yang didekodekan . misalnya mereka dapat menonaktifkan loop buffer (di Skylake untuk memperbaiki erratum SKL150) karena bila memungkinkan CPU dirancang untuk memungkinkan hal ini jika bug perangkat keras ditemukan.
Peter Cordes

1
Poin menarik tentang 6502 PLA, tetapi CPU pipelined harus lebih terprogram dari itu. MIPS klasik menggunakan bidang kata instruksi yang berbeda untuk secara langsung mengontrol logika internal dengan cara yang agak mirip dengan itu, tetapi tentu saja CPU yang memiliki jaringan pipa memiliki beberapa instruksi dalam penerbangan, berpotensi satu untuk setiap tahap pipa jika tidak ada warung. (Atau untuk superscalar, 2 atau lebih di setiap tahap pipa, dan untuk out-of-order itu bahkan lebih kompleks.) Banyak internal CPU modern yang terprogram, tetapi dengan tombol-tombol yang dapat diperbarui oleh pembaruan kode mikro.
Peter Cordes

0

Terminologi

Saya akan menjawab ini sendiri hanya menggunakan konteks penggunaan dalam pdf ini .

  • Firmware - Microcode adalah diperbarui melalui jalur yang disediakan oleh firmware CPU.

    "Biasanya, patch mikrokode diunggah ke CPU oleh firmware motherboard (mis., BIOS atau UEFI) atau sistem operasi selama proses boot awal."

  • Microcode - itu sendiri adalah data yang digunakan oleh "Instruction Decode Unit (IDU)." Penasun dapat menggunakan kabel atau mikrokode . Microcoded dalam konteks ini berarti diprogram. JUGA berarti "pluralitas mikrokode." Penasun

    IDU memainkan peran sentral dalam unit kontrol dan menghasilkan sinyal kontrol berdasarkan pada isi register instruksi.

  • Instruksi makro satu instruksi yang dikirim ke IDU untuk diterjemahkan, dapat mengembalikan sejumlah instruksi Mikro .

  • Mikro-instruksi satu "kata kontrol" precomputed, semua negara dan instruksi untuk mengeksekusi untuk satu siklus clock. Dikirim ke CPU untuk menghasilkan sinyal kontrol .

Jadi dalam konteks ini, Anda akan memperbarui mikrokode dengan firmware. Anda akan mengirim instruksi makro ke IDU mikrokode untuk menyelesaikan instruksi makro menjadi "instruksi mikro" untuk dieksekusi pada CPU, yang mengubahnya menjadi sinyal kontrol.

Bacaan saya tentang ini

Mikrokode adalah data , tetapi memperbarui mikrokode dilakukan melalui firmware. Dan membingungkan karena Anda sedang berbicara tentang apa yang pada dasarnya sama dengan tabel pencarian internal, itu tentu juga firmware itu sendiri yang pada dasarnya disimpan pada chip dan digunakan dalam aliran eksekusi chip. Saya pikir Anda bisa membuat argumen bahwa General MIDI, hardware PostScript, dan sinyal kontrol untuk terminal bodoh juga ditafsirkan dalam arti yang sama, dalam perangkat keras, dan bahwa sesuatu mengambil instruksi dan akhirnya menghasilkan "sinyal kontrol" dalam beberapa jenis proses interpretasi .

Tampaknya kami memiliki nama khusus untuk proses dan komponen ini dalam CPU: "IDU" pada CPU, dan nama untuk tabel input spesifik yang digunakan IDU yang menampung semua "microinstructions": the "microcode". Informasi tentang proses itu adalah hak milik dan tertutup. Saya akan menganggap itu analog dengan teknologi lain dari modem (dengan ATDT dan sejenisnya pada modem Hayes), untuk kartu MIDI tapi kami tidak menamai tabel pencarian spesifik "mikrokode", dan sebagai gantinya menggunakan istilah payung "firmware" untuk proses flashing dan seluruh muatan yang disimpan dalam chip.


2
Linux (dan Windows) dapat memperbarui mikrokode CPU secara total terlepas dari firmware motherboard yang Anda bicarakan. Firmboard Motherboard memang mengandung mikrokode CPU terbaru dan mekanisme untuk menerapkannya sebelum kode apa pun dimuat dari disk, tetapi jika Anda belum memperbarui firmware mobo Anda untuk sementara waktu, Anda masih dapat memiliki mikrokode CPU terbaru hanya dengan memperbarui perangkat lunak. Anda membuat masalah yang terlalu besar dari koneksi antara firmware mobo dan mikrokode CPU. Berguna untuk memiliki firmware yang memperbarui mikrokode setiap boot, tetapi tidak perlu (kecuali untuk stabilitas kadang-kadang).
Peter Cordes

2
Juga, tidak semua instruksi makro x86 diterjemahkan dengan melihat mereka di ROM sequencer mikrokode. Pada Intel CPU, instruksi yang mendekode ke 4 atau lebih sedikit uops (mikro-op) dikodekan ke dalam decoder. Sebagian besar instruksi bukan "kode mikro" dalam arti kata ini. Divisi integer adalah ( divdan idiv), tetapi bahkan divisi FP adalah single uop (karena itu lebih kritis terhadap kinerja, logika iteratif multi-langkah dilakukan di dalam unit pembagian alih-alih dengan uops mikrokode).
Peter Cordes

@PeterCordes Anda adalah orang yang menulis jawaban ini, rasakan untuk mengedit jawaban saya untuk membuatnya lebih benar secara teknis. Anda punya carte blanche. Meskipun saya akan mencoba untuk menggulung perubahan itu di malam ini, jika Anda kekurangan waktu.
Evan Carroll

Jika saya menyiasatinya, saya akan selesai menulis jawaban yang saya mulai. Untuk saat ini, jawaban Harry Johnston mungkin yang terbaik sejauh ini dalam menjawab apa yang saya pikir Anda benar-benar ingin tahu (yang merupakan pembaruan "mikrokode" yang benar-benar diperbarui, yang tidak sama dengan apa yang dilakukan "mikrokode CPU", karena itu nama yang terlalu disederhanakan, seperti yang biasa terjadi pada hal-hal teknis yang memerlukan nama satu kata yang dapat diketahui oleh masyarakat umum.)
Peter Cordes

0

Saya telah mengambil kursus dalam desain ISA dasar, terutama dalam studi dan desain prosesor RISC dimodelkan konsep MIPS. Inilah yang saya ingat

Untuk pemahaman saya, blok dasar prosesor seperti register, ALU, multiplexer dan modul memori memerlukan sinyal tertentu agar mereka dapat melakukan pekerjaan mereka. Anda akan menyebut sinyal-sinyal ini sebagai sinyal "penegasan", karena merupakan sinyal yang diperlukan untuk mengoperasikan blok-blok ini. CPU pada intinya, adalah blok spaghetti dari ALU, modul memori, register dan perangkat keras lainnya. Berarti setiap CPU harus menegaskan urutan sinyal kontrol tertentu untuk melakukan pekerjaan mereka (maksud saya instruksi dasar seperti ANDI, ORI, JMP, BNE, BEQ, dll.). Saya memiliki perasaan campur aduk tentang hal itu ketika saya harus menegaskan sinyal sendiri (benar-benar melalui semua instruksi MIPS) selama pengujian dan debugging dari set instruksi karena kecepatan kurikulum tidak mengajari saya apa pun tentang unit kontrol pada waktu itu.

Di sisi lain, bahasa assembler bermuara ke opcodes dan operan mereka dalam kata instruksi (pada dasarnya lebar bus data Anda). Dalam hal MIPS, 6 bit pertama kata instruksi Anda adalah opcode Anda. Dengan semata-mata inspeksi matematis saja, Anda tidak dapat "menegaskan" ALU Anda, register, memori, muxes .. pada dasarnya sisa perangkat keras Anda dengan 6 bit saja.

Tidak, kecuali Anda memiliki ... AN INSODUCTION DECODER. Dekoder instruksi pada dasarnya mengambil opcode Anda dan menghasilkan SEMUA sinyal "pernyataan" Anda yang diperlukan untuk mengoperasikan perangkat keras Anda. Namun, instruksi decoder berbeda dalam implementasi antara arsitektur dan dalam beberapa kasus, dapat diprogram. Mikrokode memengaruhi bagian yang dapat diprogram dari dekoder instruksi.

Saya percaya bahwa firmware adalah istilah umum untuk setiap informasi yang tertanam dalam perangkat keras. Dalam beberapa kasus ini juga akan merujuk ke mikrokode karena bitstreamnya dapat dikodekan dan disimpan dalam perangkat keras seperti EEPROM dan memori flash. Namun sebagian besar waktu, itu dikompilasi kode, asm, atau bahkan bitstream stream VHDL / Verilog digunakan dalam FPGA. Microcode bagi saya sepertinya semantik yang digunakan untuk menentukan "sinyal pernyataan" pada prosesor pilihan.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.