Apa artinya ketika kode dieksekusi dalam mode kernel atau pengguna?
Mode Kernel
Program yang berjalan dalam mode ini memiliki akses penuh ke perangkat keras yang mendasarinya. Ia dapat menjalankan instruksi CPU apa saja, mengakses alamat memori apa saja dan pada dasarnya melakukan apa pun yang diinginkannya.
Pengguna Mode Kode mengeksekusi dalam mode ini terbatas pada modifikasi perangkat keras melalui API OS. Tidak dapat mengakses perangkat keras secara langsung sama sekali .
Yang menarik di sini adalah bahwa pada arsitektur umum, ini diberlakukan melalui perangkat keras - bukan hanya OS. Secara khusus, arsitektur x86 memiliki cincin perlindungan .
Keuntungan besar dari pemisahan seperti ini adalah bahwa ketika sebuah program crash berjalan dalam mode pengguna, itu tidak selalu berakibat fatal. Bahkan, pada sistem modern, biasanya tidak.
Lihat langganan Jeff . Ini barang bagusnya.
Jawaban singkatnya adalah: ia hanya memberi tahu Anda di mana program menghabiskan waktu mereka.
Untuk jawaban yang lebih panjang, saya akan menjelaskan ini dalam dua langkah. Pertama:
1. Masuk ke mode kernel
Setiap kode reguler yang Anda tulis, dijalankan dalam "mode pengguna".
Program dapat menggunakan perpustakaan untuk melakukan tugas-tugas umum untuk mereka. Ini juga kode mode pengguna.
Pada titik tertentu, program mungkin memerlukan fungsi inti dari sistem. Sebagai contoh:
Fungsi penting ini - dekat dengan perangkat keras - adalah bagian dari kernel. Itu adalah program utama di balik semua yang ada di komputer Anda. Ia mengelola semua program yang dibutuhkan agar berfungsi.
Untuk menggunakan fungsi dalam kernel, jalur eksekusi program benar-benar membuat lompatan dari mode Pengguna ke kode Kernel. Kernel melakukan tugasnya, dan melipat jalur eksekusi kembali ke mode pengguna.
Ketika sebuah program menghabiskan banyak waktu dalam mode kernel, seringkali itu berarti ia melakukan banyak aktivitas terkait perangkat keras. Misalnya, mencari disk atau streaming video. Perangkat kerasnya bisa juga tidak berfungsi; membuat pemrosesan menjadi lambat dan menyebabkan program menghabiskan banyak waktu di ruang kernel.
2 bedanya
Kode dalam ruang kernel berkinerja tinggi. Bagian lain dari kernel dapat menyebutnya secara langsung, dan kode memiliki akses langsung ke setiap sumber daya sistem, tanpa memeriksa batas. Peralihan antara mode kernel / pengguna juga merupakan operasi yang mahal, yang sepenuhnya dihindari dengan menjalankan semuanya dalam kode kernel.
Namun di dalam kernel, tidak ada banyak ruang untuk pemeriksaan keamanan, perlindungan terhadap crash, atau menulis ke bagian memori yang salah. Ini adalah layanan yang dapat disediakan kernel untuk program lain. Ini menipu program untuk meyakini bahwa dunia tampak berbeda (program hidup dalam lingkungan virtual, kotak pasir / terbatas) dan karenanya segala sesuatu yang keluar / masuk dari program dapat diterjemahkan dan dijaga.
Kernel itu sendiri tidak dapat memiliki banyak perlindungan karena tidak ada di belakangnya untuk melindunginya. Ini adalah jantung dari sistem, dan ketika itu berhenti, semuanya berakhir. Anda mendapatkan panik kernel, atau pada Windows, BSOD yang terkenal.
Itu juga risiko kode berbasis kernel, dan alasan lebih banyak subsistem dengan persyaratan kinerja rendah dipindahkan ke ruang pengguna. Namun, bagian-bagian penting yang terkait dengan perangkat keras, biasanya adalah kode kernel yang tidak akan berubah dalam waktu dekat.
Ini perbedaan apakah kode yang saat ini dieksekusi diizinkan untuk berinteraksi langsung dengan berbagai perangkat keras. Kode mode kernel dapat menulis ke bus perangkat, mengubah pemetaan memori, beralih proses yang berjalan, dan sebagainya. Mode pengguna dapat melakukan komputasi, dan itu dapat membuat panggilan sistem ke dalam kernel untuk berinteraksi dengan seluruh dunia.