Saya tahu bahwa ketika kode sumber, dalam katakanlah C ++, dikompilasi, output dari kompiler adalah kode mesin (executable) yang saya pikir adalah instruksi ke CPU secara langsung. Baru-baru ini saya membaca kernel dan saya menemukan bahwa program tidak dapat mengakses perangkat keras secara langsung tetapi harus melalui kernel.
Jadi ketika kita mengkompilasi beberapa kode sumber sederhana, katakan hanya dengan printf()
fungsi, dan kompilasi menghasilkan kode mesin yang dapat dieksekusi, akankah masing-masing instruksi dalam kode mesin ini dieksekusi langsung dari memori (setelah kode dimuat ke dalam memori oleh OS) atau akan setiap perintah dalam kode mesin masih harus melalui OS (kernel) yang akan dieksekusi?
Saya telah membaca pertanyaan serupa . Itu tidak menjelaskan apakah kode mesin yang dihasilkan setelah kompilasi adalah instruksi untuk CPU secara langsung atau jika perlu kembali melalui kernel untuk membuat instruksi yang benar untuk CPU. Yaitu, apa yang terjadi setelah kode mesin dimuat ke dalam memori? Apakah akan melalui kernel atau langsung berbicara dengan prosesor?
printf
bukan contoh yang bagus. Ini secara eksplisit didefinisikan oleh spesifikasi C sebagai fungsi yang hanya tersedia dalam implementasi "host" (artinya berjalan pada kernel, sebagai lawan dari "berdiri bebas", yang mungkin tidak memerlukan satu). Dan pada sebagian besar platform, printf
hanya fungsi yang disediakan oleh Anda libc
yang melakukan banyak hal atas nama Anda (yang akhirnya mencakup syscall untuk mencetak ke stdout). Ini benar-benar tidak berbeda dengan menelepon libvlc_media_list_add_media
atau PyObject_GetAttr
, kecuali bahwa beberapa printf
implementasi dijamin dapat dikaitkan tanpa menambahkan tambahan non-standar -l
.