Pemacu Linux biasanya dijalankan dalam ruang kernel, tetapi juga boleh dijalankan dalam ruang pengguna. Di bawah ini kami akan menganalisis konsep ruang kernel dan ruang pengguna secara terperinci dan cara menilainya.
Linux memudahkan mekanisme pembahagian supaya alamat maya dan alamat linear sentiasa konsisten Oleh itu, ruang alamat maya Linux juga 0~4G. Kernel Linux membahagikan ruang bait 4G ini kepada dua bahagian. Bait 1G tertinggi (dari alamat maya 0xC0000000 hingga 0xFFFFFFFF) digunakan oleh kernel dan dipanggil "ruang kernel". Bait 3G yang lebih rendah (dari alamat maya 0x00000000 hingga 0xBFFFFFFF) digunakan oleh setiap proses dan dipanggil "ruang pengguna). Oleh kerana setiap proses boleh memasuki kernel melalui panggilan sistem, kernel Linux terdiri daripada semua proses dalam Perkongsian sistem. Jadi , dari perspektif proses tertentu, setiap proses boleh mempunyai 4G bait ruang maya
.Linux menggunakan mekanisme perlindungan dua peringkat: tahap 0 untuk kernel dan tahap 3 untuk program pengguna. Seperti yang dapat dilihat daripada rajah (angka tidak boleh diwakili di sini), setiap proses mempunyai ruang pengguna peribadinya sendiri (0~3G Ruang ini tidak dapat dilihat oleh proses lain dalam sistem). Ruang kernel maya 1GB teratas dikongsi oleh semua proses dan kernel.
Ruang kernel menyimpan kod dan data kernel, manakala ruang pengguna proses menyimpan kod dan data program pengguna. Sama ada ruang kernel atau ruang pengguna, semuanya berada dalam ruang maya. Walaupun ruang kernel menduduki 1GB teratas setiap ruang maya, pemetaan ke memori fizikal sentiasa bermula dari alamat terendah (0x00000000). Untuk ruang kernel, pemetaan alamatnya ialah pemetaan linear yang sangat mudah 0xC0000000 ialah anjakan antara alamat fizikal dan alamat linear, yang dipanggil PAGE_OFFSET dalam kod Linux.
Jadi bagaimana untuk berkomunikasi antara ruang kernel dan ruang pengguna? Komunikasi biasanya dilakukan melalui panggilan sistem.
Bagaimana untuk menentukan sama ada pemandu ialah pemacu mod pengguna atau pemacu mod kernel? Apakah kriteria untuk penghakiman?
Pemandu mod ruang pengguna biasanya melengkapkan akses kepada perkakasan melalui panggilan sistem, seperti memetakan ruang IO pemandu ke ruang pengguna, dsb. Oleh itu, asas utama untuk penghakiman adalah panggilan sistem. Selain itu, senarai terpaut dalam mod pengguna adalah berbeza daripada senarai terpaut dalam mod kernel Mod pengguna menggunakan printf dan mod kernel menggunakan printk. Setiap ruang aplikasi dalam mod pengguna adalah maya dan agak bebas, tetapi ia tidak bebas dalam mod kernel, jadi pengaturcaraan perlu berhati-hati. Sudah tentu, komunikasi antara program mod pengguna dan mod kernel boleh dicapai melalui ioctl, sysfs, proc, dll.
Apabila tugasan (proses) melaksanakan panggilan sistem dan terperangkap dalam kod kernel untuk pelaksanaan, kami mengatakan bahawa proses itu berada dalam keadaan kernel berjalan (atau hanya dipanggil keadaan kernel). Pada masa ini, pemproses sedang melaksanakan dalam kod kernel dengan tahap keistimewaan tertinggi (tahap 0). Apabila proses berada dalam mod kernel, kod kernel yang dilaksanakan menggunakan tindanan kernel proses semasa. Setiap proses mempunyai timbunan kernel sendiri. Apabila sesuatu proses sedang melaksanakan kod pengguna sendiri, ia dikatakan berada dalam keadaan berjalan pengguna (keadaan pengguna). Iaitu, pemproses berjalan dalam kod pengguna dengan tahap keistimewaan terendah (tahap 3). Apabila program pengguna sedang dilaksanakan dan tiba-tiba diganggu oleh program gangguan, program pengguna juga boleh dikatakan secara simbolik berada dalam keadaan kernel proses. Kerana pengendali gangguan akan menggunakan timbunan kernel proses semasa. Ini agak serupa dengan keadaan proses dalam mod kernel.
Pemproses sentiasa berada dalam salah satu keadaan berikut:
1. Keadaan kernel, berjalan dalam konteks proses, kernel mewakili proses berjalan dalam ruang kernel;
2. Keadaan kernel, berjalan dalam konteks gangguan, kernel mewakili perkakasan yang berjalan dalam ruang kernel3. Mod pengguna, berjalan dalam ruang pengguna.
Aplikasi ruang pengguna memasuki ruang kernel melalui panggilan sistem. Pada masa ini, proses ruang pengguna perlu menghantar banyak pembolehubah dan nilai parameter ke kernel Apabila mod kernel sedang berjalan, ia juga perlu menyimpan beberapa nilai daftar dan pembolehubah proses pengguna. Apa yang dipanggil "konteks proses" boleh dilihat sebagai parameter yang dihantar oleh proses pengguna ke kernel, serta set lengkap pembolehubah dan nilai daftar untuk disimpan oleh kernel dan persekitaran pada masa itu. .
Perkakasan mencetus isyarat, menyebabkan kernel memanggil pengendali gangguan dan memasuki ruang kernel. Semasa proses ini, beberapa pembolehubah dan parameter perkakasan juga mesti dihantar ke kernel, dan kernel menggunakan parameter ini untuk melakukan pemprosesan gangguan. Apa yang dipanggil "konteks gangguan" sebenarnya boleh dianggap sebagai parameter ini diluluskan oleh perkakasan dan beberapa persekitaran lain yang kernel perlu simpan (terutamanya persekitaran proses yang sedang terganggu).
Atas ialah kandungan terperinci Penjelasan terperinci tentang ruang kernel linux dan ruang pengguna. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!