Bagaimana eksekusi program terjadi dalam firmware?

9

Saya telah mendengar dari orang yang bekerja di domain firmware, bahwa tidak ada sistem operasi yang mengendalikan firmware (mis. Firmware dalam drive USB). Hanya ada satu utas berjalan dalam loop sementara menunggu perintah eksternal, dan ini adalah titik awal untuk interupsi terjadi, diikuti oleh ISR dan kontrol mengalir sepanjang jalan sampai perangkat keras. Tetapi pada dasarnya apa itu bagian dari perangkat keras yang mengeksekusi kode firmware? Apakah ada CPU atau kode berbasis ASIC yang dipicu selama perangkat diaktifkan. Saya gagal memahami perubahan paradigma dari sistem berbasis CPU-OS biasa ke firmware.

Abhijit K Rao
sumber
Jika memungkinkan, bisakah seseorang mengambil contoh firmware, yang menunjukkan buatan CPU dan detail perangkat keras dan lunak lainnya. Contohnya bisa berupa firmware dalam kartu SD, USB, pengontrol HDD, dll.
Abhijit K Rao

Jawaban:

13

Tidak ada pergeseran paradigma; dalam kedua kasus, CPU menjalankan perangkat lunak / firmware.

Firmware dan perangkat lunak adalah hal yang sama; satu-satunya perbedaan adalah bagaimana disimpan. Perangkat lunak biasanya disimpan pada perangkat penyimpanan massal (mis., Drive disk) dan dimuat ke memori yang mudah menguap (mis., DRAM) sebelum dieksekusi. Sangat mudah untuk mengubah perangkat lunak, dengan hanya mengganti file yang berisi itu dengan yang berbeda.

Firmware biasanya disimpan dalam memori nonvolatile (mis., FLASH) yang terhubung lebih atau kurang langsung ke CPU. Lebih sulit untuk memodifikasi (karena itu "perusahaan") dan mungkin atau mungkin tidak ditransfer ke memori yang berbeda untuk dieksekusi.

Sungguh, pengoperasian komputer dengan "sistem operasi" pada dasarnya tidak berbeda dengan deskripsi firmware Anda. Ingat, OS itu sendiri hanyalah bagian dari perangkat lunak - atau lebih mungkin, kumpulan besar perangkat lunak yang saling bergantung. Pada level terendah, CPU masih duduk dalam semacam lingkaran, menunggu untuk melakukan sesuatu. Hanya saja loop itu terkubur di dalam OS.

Dave Tweed
sumber
9

Bahkan CPU "biasa" dengan OS harus menjalankan firmware ... biasanya disebut BIOS pada PC generik. Firmware untuk CPU apa pun hanyalah perangkat lunak yang selalu tersedia saat daya dihidupkan, apakah CPU terhubung ke perangkat periferal apa pun (drive disk, USB, dll.) Atau tidak. Jika Anda memiliki OS full-blown maka firmware hanya mengetahui perangkat apa (disk, drive USB, dll) yang menyimpan kode untuk OS, menyalin kode ke dalam RAM, dan menjalankannya. Untuk perangkat tertanam kecil tidak perlu untuk OS penuh karena Anda tidak akan memuat aplikasi yang berbeda atau menghubungkan berbagai perangkat, jadi CPU kecil hanya menggunakan OS yang sangat sederhana atau mungkin "penjadwal tugas". Tugas yang berbeda mungkin mengambil pembacaan sensor, menunggu tombol ditekan, dan memperbarui tampilan. Untuk aplikasi yang sangat sederhana, CPU memiliki banyak waktu untuk melakukan semua tugas sehingga hanya melakukan masing-masing secara berurutan, yang juga dikenal sebagai pendekatan "round robin". Penjadwal yang lebih canggih mempertimbangkan prioritas tugas.

Poin dasarnya adalah bahwa setiap CPU harus memiliki beberapa kode yang selalu tersedia untuk dieksekusi ketika daya dihidupkan. Kode itu biasanya disimpan dalam memori "read only" yang relatif kecil, atau ROM, meskipun CPU modern memasukkan firmware ke dalam ROM Flash yang "dibaca sebagian besar". Kode yang disimpan dengan cara ini adalah "firmware" untuk CPU.

Joe Hass
sumber
6

Tampaknya ada beberapa kesalahpahaman dalam pertanyaan Anda.

Firmware hanyalah perangkat lunak dalam bentuk tetap, yang digunakan untuk ROM biasa (tulis-sekali atau bahkan topeng-terprogram), sekarang sebagian besar dalam ROM flash (dapat ditulis ulang). Pada beberapa sistem, firmware ini adalah satu-satunya perangkat lunak yang ada, pada yang lain (seperti PC biasa) fungsi utamanya adalah memuat perangkat lunak lain.

Aplikasi dapat berjalan di bawah kendali OS, atau dapat berjalan tanpa OS. Situasi terakhir sering disebut 'bare metal': aplikasi berjalan tanpa apa-apa di antara itu dengan 'logam' perangkat keras. Fungsi-fungsi yang berada dalam situasi with-OS yang dilakukan oleh OS, misalnya penanganan sistem file dan ketentuan untuk multi-threading, masih dapat hadir dalam sistem bare-metal, tetapi dalam bentuk perpustakaan yang terhubung dengan aplikasi .

Perangkat lunak dapat memiliki banyak arsitektur yang berbeda. Bentuk yang sangat sederhana adalah loop 'dapatkan input, lakukan pemrosesan, tulis output'. Bentuk yang lebih rumit dapat mencakup pemungutan suara, interupsi, atau multi-threading. Aplikasi OS-dependen dan bare-metal dapat menggunakan semua arsitektur ini.

Ketiga masalah ini independen: misalnya firmware dapat menjalankan bare-metal dan menggunakan arsitektur multi-utas. Atau firmware menjadi sistem operasi yang memuat aplikasi dari floppy (maaf, kartu flash ..) yang menggunakan arsitektur loop get-do-write sederhana.

Wouter van Ooijen
sumber
5

OS dan CPU adalah konsep yang berbeda. Ya, ada CPU, yang merupakan kunci perangkat keras di jantung mesin. Itu mengambil instruksi firmware dari memori firmware dan menjalankannya. (Saat itu adalah umum untuk bahkan sistem kecil untuk memiliki beberapa CPU ini untuk eksekusi paralel, dengan cara; sehingga agak usang untuk berbicara secara eksklusif tentang itu . CPU)

Firmware adalah perangkat lunak yang disimpan dalam memori yang tidak mudah menguap (atau bahkan hanya baca). Karena berada dalam memori seperti itu, firmware tersedia ketika mesin dihidupkan. Mesin dapat segera memulai menjalankan firmware ketika dihidupkan, atau beberapa program boot kecil (firmware itu sendiri) dapat menarik firmware yang lebih besar dari beberapa penyimpanan elektronik seperti flash dan memasukkannya ke dalam RAM, dan kemudian menjalankannya. Penggunaan modern penyimpanan flash akhir-akhir ini adalah mengapa kadang-kadang Anda mungkin mendengar ungkapan "memasang firmware baru", merujuk pada prosedur peningkatan. Firmware tidak harus mudah diupgrade seperti ini. Mungkin datang pada chip sirkuit terintegrasi, sehingga memperbarui perangkat ke firmware baru mungkin melibatkan mengeluarkan sirkuit terintegrasi ("chip EPROM") dari soket dan menghubungkannya dengan yang baru. BIOS PC Dulu diperbarui dengan cara ini, dan berjuta perangkat lain. Dari sinilah asal kata itu. Beberapa orang merasa tidak nyaman dengan memanggil program "perangkat lunak", jika mereka harus menukar chip atau papan sirkuit untuk menggantinya, yang lebih mirip pembaruan perangkat keras. Oleh karena itu "firmware" diciptakan: sesuatu yang "lebih sulit" untuk diubah daripada perangkat lunak.

Firmware dapat menjadi sistem operasi "full blown". Misalnya, Tomat adalah firmware berbasis Linux untuk router nirkabel:

http://www.polarcloud.com/tomato

Kita dapat masuk ke Tomat melalui ssh, dan mendapatkan prompt Linux. Jadi ini adalah sistem operasi yang canggih, dan ini adalah firmware. Tetapi jika router memiliki hard disk di dalamnya, dan jika OS yang sama harus dimuat dari disk saat startup, itu tidak bisa lagi secara sah disebut firmware. Firmware harus berada dalam penyimpanan elektronik yang dapat diakses prosesor segera saat dihidupkan, seperti memori flash atau chip EPROM.

Banyak perangkat konsumen saat ini memiliki firmware yang dapat diupgrade. Jika Anda memiliki kamera digital, misalnya, Anda harus menemukan situs webnya dan melihat apakah versi firmware yang lebih baru tidak tersedia yang memperbaiki beberapa masalah yang mungkin ada dalam firmware yang diinstal pabrik. Sangat mudah untuk memperbarui firmware saat ini bahkan untuk pengguna akhir yang relatif non-teknis. Tomat tersebut adalah contoh dari firmware open source pihak ketiga yang menggantikan firmware pabrik.

Kata "sistem operasi" hanya mengacu pada program kontrol yang memiliki tingkat kecanggihan dan kelengkapan tertentu dalam mengelola sumber daya mesin dan menyediakan layanan tingkat tinggi yang wajar untuk program: fitur seperti sistem file, protokol jaringan, memori dan manajemen proses, akses tingkat tinggi ke perangkat, dan mungkin beberapa model pengguna serta keamanan. Tidak semua ini harus ada dalam sistem operasi. Biasanya ingatan, manajemen proses dan I / O adalah kuncinya. Jika program kontrol memungkinkan program lain untuk mengeksekusi, memberikan identitas pada program-program tersebut di mana mereka terkait dengan sumber daya mereka sendiri, dan jika itu menyediakan layanan kepada mereka untuk mengelola prosesor dan memori, dan melakukan I / O, kita dapat memanggil kontrol itu memprogram sistem operasi.

Karena Anda penasaran, Anda mungkin benar-benar menikmati beberapa buku teks tentang arsitektur komputer, seperti yang ditulis oleh William Stallings, atau oleh Hennesy dan Patterson.

Kaz
sumber
4

Pada tingkat yang paling mendasar, CPU hanyalah mesin negara yang melangkah melalui urutan instruksi yang mengubah keadaan internalnya sendiri dan / atau menghasilkan beberapa output. Abstrak dan perbaiki konsep ini ke tingkat yang sangat tinggi dan Anda mendapatkan penawaran prosesor desktop dan seluler terbaru dari Intel. Tetapi prinsip yang mendasarinya cukup sederhana - Anda dapat membangun prosesor yang sangat mendasar dengan sekitar selusin sirkuit terintegrasi TTL, dan mikroprosesor dari awal hingga pertengahan 1970-an, yang dirancang untuk digunakan dalam kalkulator desktop dan pengontrol lampu lalu lintas, tidak jauh lebih rumit daripada ini . Jelas, hukum Moore telah membawa ini ke tingkat lain, dan prosesor berkinerja tinggi modern sedikit mirip dengan nenek moyang mereka dari 35 tahun yang lalu.

Meski begitu, masih ada pasar yang sangat besar untuk prosesor (biasanya disebut mikrokontroler) yang secara signifikan lebih kompleks daripada yang terdepan; ini adalah jenis prosesor yang mungkin Anda temukan di drive USB Anda, misalnya. Untuk menjawab pertanyaan Anda - ada kemungkinan beberapa fungsi perangkat yang Anda sebutkan mungkin ditangani oleh ASIC, tetapi jika rekan Anda berbicara tentang utas dan interupsi, ini biasanya menunjukkan bahwa ada CPU yang kadang-kadang terlibat, mungkin pada mikrokontroler . Ini memang komputer yang lengkap dalam arti bahwa mereka memiliki ALU, register, program counter, stack, dll., Tetapi mereka sangat berdaya rendah dan sangat murah, dan mungkin hanya memiliki beberapa lusin instruksi, daripada ratusan arsitektur x86.

Tidak ada persyaratan bahwa perangkat ini memiliki sistem operasi dalam bentuk apa pun atau konsep pengalihan konteks apa pun (meskipun mungkin dalam beberapa kasus), semua yang diperlukan untuk penerapannya adalah dengan menelusuri petunjuk dalam programnya satu per satu. yang lain, dan seperti yang Anda katakan itu mungkin program yang sangat sederhana.

Bitrex
sumber
1

Kecuali beberapa izin, CPU tidak akan tahu apakah kode pelaksananya dari OS atau program lain apa pun. Untuk CPU, itu hanya menjalankan instruksi yang diambil dari memori.

Jangan lupa apa itu sistem operasi: sebuah program yang selalu ada dalam memori yang bertanggung jawab untuk menangani dan menjadwalkan banyak tugas dengan aman. Terminologi yang kami gunakan untuk menggambarkan tugas independen adalah "proses". OS memungkinkan proses berbagi sumber daya (perangkat keras, memori, dll) dengan aman dan menjadwalkan dan memprioritaskan pelaksanaannya, juga menyediakan fitur seperti komunikasi antar proses. Semua ini muncul dari kebutuhan untuk mendukung beberapa tugas bersamaan. Minus beberapa tingkat izin, untuk CPU itu hanya menjalankan instruksi OS atau tidak ada OS - tidak tahu bedanya.

Ketika kami menulis firmware untuk mikrokontroler, biasanya kami tidak memiliki program tambahan ini (OS) yang selalu ada dalam memori untuk mengelola tugas bagi kami. Mengapa? Karena kita tidak membutuhkan beberapa tugas bersamaan - sistem tertanam biasanya dirancang dan diprogram untuk melakukan satu aplikasi dengan baik. Bandingkan ini dengan PC yang diharapkan sangat fleksibel dan dapat menjalankan semua jenis aplikasi sekaligus.

Tidak ada lagi kekhawatiran satu proses menempati dan mengalahkan ruang memori proses lain atau satu proses memonopoli semua waktu CPU. Ini karena kami menulis satu program tunggal yang memiliki akses ke semua sumber daya kapan saja karena ini adalah satu-satunya program yang berjalan pada sistem dan karenanya kami tidak memerlukan program lain seperti OS untuk mengelolanya. Sekali lagi, untuk CPU, itu hanya menjalankan instruksi yang diambil dari memori, tidak dapat membedakannya, OS atau tidak ada OS.

Jon L
sumber