GNU/Linux >> Belajar Linux >  >> Linux

Linux – Perbedaan Antara Ruang Pengguna dan Ruang Kernel?

Apakah ruang Kernel digunakan ketika Kernel dijalankan atas nama program pengguna yaitu System Call? Atau apakah itu ruang alamat untuk semua utas Kernel (misalnya penjadwal)?

Jika yang pertama, apakah berarti program pengguna biasa tidak boleh memiliki memori lebih dari 3GB (jika pembagiannya adalah 3GB + 1GB)? Juga, dalam hal ini bagaimana kernel dapat menggunakan Memori Tinggi, karena ke alamat memori virtual apa halaman dari memori tinggi akan dipetakan, karena 1GB ruang kernel akan dipetakan secara logis?

Jawaban yang Diterima:

Apakah ruang Kernel digunakan ketika Kernel dijalankan atas nama program pengguna yaitu System Call? Atau apakah itu ruang alamat untuk semua utas Kernel (misalnya penjadwal)?

Ya dan ya.

Sebelum kita melangkah lebih jauh, kita harus menyatakan ini tentang memori.

Dapatkan memori dibagi menjadi dua area berbeda:

  • Ruang pengguna , yang merupakan kumpulan lokasi tempat proses pengguna normal berjalan (yaitu segala sesuatu selain kernel). Peran kernel adalah untuk mengelola aplikasi yang berjalan di ruang ini agar tidak saling mengacaukan, dan mesin.
  • Ruang kernel , yang merupakan lokasi penyimpanan kode kernel, dan dieksekusi di bawahnya.

Proses yang berjalan di bawah ruang pengguna hanya memiliki akses ke bagian memori yang terbatas, sedangkan kernel memiliki akses ke semua memori. Proses yang berjalan di ruang pengguna juga tidak memiliki akses ke ruang kernel. Proses ruang pengguna hanya dapat mengakses sebagian kecil kernel melalui antarmuka yang diekspos oleh kernel – panggilan sistem . Jika suatu proses melakukan panggilan sistem, interupsi perangkat lunak dikirim ke kernel, yang kemudian mengirimkan penangan interupsi yang sesuai dan melanjutkan pekerjaannya setelah penangan selesai.

Kode ruang kernel memiliki properti untuk dijalankan dalam “mode kernel”, yang (di komputer desktop -x86- khas Anda) adalah kode yang Anda panggil yang dijalankan di bawah ring 0 . Biasanya dalam arsitektur x86, ada 4 cincin perlindungan . Ring 0 (mode kernel), Ring 1 (dapat digunakan oleh hypervisor atau driver mesin virtual), Ring 2 (dapat digunakan oleh driver, saya tidak begitu yakin tentang itu). Ring 3 adalah aplikasi tipikal yang dijalankan. Ini adalah cincin yang paling tidak memiliki hak istimewa, dan aplikasi yang berjalan di atasnya memiliki akses ke subset instruksi prosesor. Ring 0 (ruang kernel) adalah ring yang paling diistimewakan, dan memiliki akses ke semua instruksi mesin. Misalnya untuk ini, aplikasi "biasa" (seperti browser) tidak dapat menggunakan instruksi perakitan x86 lgdt untuk memuat tabel deskriptor global atau hlt untuk menghentikan prosesor.

Jika yang pertama, apakah berarti program pengguna biasa tidak boleh memiliki memori lebih dari 3GB (jika pembagiannya adalah 3GB + 1GB)? Juga, dalam hal ini bagaimana kernel dapat menggunakan Memori Tinggi, karena ke alamat memori virtual apa halaman dari memori tinggi akan dipetakan, karena 1GB ruang kernel akan dipetakan secara logis?

Untuk jawaban ini, silakan merujuk ke jawaban yang sangat baik dengan wag di sini

Terkait:Visibilitas bilah status Nautilus – Periksa ruang kosong dengan cepat?
Linux
  1. Perbedaan Antara Perintah "su" dan "su -" di Linux

  2. Perbedaan Antara Akun Pengguna dan Layanan?

  3. Perbedaan Antara Pengguna Sudo Dan Pengguna Root?

  1. Pelajari Perbedaan Antara Perintah "su" dan "su -" di Linux

  2. Apa perbedaan antara Suspend dan Hibernate di Linux

  3. Perbedaan Antara [[ $a ==Z* ]] Dan [ $a ==Z* ]?

  1. Apa Perbedaan Antara Pengguna Biasa dan Pengguna Sistem?

  2. Linux – Perbedaan Antara Pts Dan Tty?

  3. Perbedaan antara jalur absolut dan relatif di Linux