Mengubah dari mode Kernel ke mode Pengguna (dan sebaliknya)

8

Saya membaca buku Sistem Operasi oleh Galvin. Galvin menjelaskan, apa itu mode kernel & pengguna, hak istimewa instruksi yang diberikan untuk kedua mode & juga tentang mode-bit. Tapi saya tertarik untuk mengetahui bagaimana perubahan mode dari satu ke yang lain. Pada dasarnya saya ingin menyelesaikan pertanyaan berikut:

CPU memiliki 2 mode, privilege dan non-privilege. Untuk mengubah mode dari yang dicegah menjadi yang tidak dicegah

a) Diperlukan interupsi perangkat keras

b) Diperlukan interupsi perangkat lunak.

c) Instruksi istimewa dibutuhkan.

d) Suatu instruksi yang tidak istimewa diperlukan.

Dari apa yang saya mengerti,

dari mode pengguna ke mode kernel - Interupsi Perangkat Keras diperlukan [seperti pada Disk I / O]. Sekarang, jika pengguna program ban untuk mengakses memori yang berada di luar jangkauan yang diizinkan, terjadi jebakan, yang pada dasarnya adalah gangguan perangkat lunak yang akan ditangani oleh OS. Sekarang, dalam mode pengguna kami tidak dapat menjalankan instruksi istimewa. Jadi, instruksi yang tidak istimewa seperti permintaan I / O dapat mengubah pengguna ke mode kernel. Jadi saya pikir, untuk berubah

dari non-privilege (pengguna) ke privilege (kernel) - H / W Interrupt, S / W Interrupt & instruksi non-Privileged akan dilakukan.

Sekarang datang ke, kernel ke mode pengguna. OS dapat mengubah kernel ke mode pengguna. Jadi, itu hanya akan menjalankan instruksi istimewa untuk mengubah dari mode kernel ke pengguna. Tidak perlu menghasilkan interupsi H / w atau S / w. Jadi saya menyimpulkan, untuk berubah

dari berlaku untuk non-dicegah - instruksi istimewa akan dilakukan.

Apakah saya benar ?

Juga ketika menjalankan dalam mode kernel, semua interupsi akan dinonaktifkan kan? Jadi jawabannya tidak bisa (a) atau (b). Juga, karena OS pada dasarnya adalah perangkat lunak, itu tidak dapat menghasilkan interupsi H / W.

Juga, karena OS itu sendiri menangani interupsi, tidak masuk akal bagi saya mengapa harus menghasilkan interupsi (& service it) untuk berubah dari kernel ke mode pengguna.

Tolong beri tahu saya jika ada yang salah. Setiap bantuan mengenai hal ini sangat kami hargai.

avi
sumber

Jawaban:

7

Usermode ke kernelmode: Salah! ;-) Ya, interupsi diproses dalam mode kernel, dan pada awalnya cara untuk masuk ke mode kernel adalah dengan interupsi yang dipaksakan oleh perangkat lunak. Pada Desember 2020 ada satu set UIO (Unimplemented Instruction Opcodes), yang memanggil salah satu dari mereka yang menyebabkan jebakan ke sistem operasi. Mereka termasuk instruksi floating point (jika tidak dalam perangkat keras) dan instruksi eksotis lainnya, tetapi juga sarana untuk melakukan panggilan sistem operasi. Keluarga i? 86 memiliki intinstruksi (interupsi), yang secara tradisional digunakan seperti yang Anda katakan. Anggota keluarga yang lebih baru memiliki SYSTENT untuk melakukan panggilan penyelia lebih efisien. Cara menuju ke mode pengawas tidak dapat diistimewakan, tetapi entah bagaimana harus dikontrol ketat oleh kernel (di mana Anda memasukkan kernel, argumen apa yang Anda berikan, ...).

Kernelmode to usermode: Tidak perlu operasi "drop privilege" menjadi istimewa. Jika Anda tidak memiliki hak istimewa, menjatuhkannya adalah larangan. Tetapi mekanisme yang tepat bergantung pada arsitektur secara ekstrem.

Interupsi dinonaktifkan di kernel: Interupsi menunjukkan beberapa kondisi yang harus ditangani sesegera mungkin (misalnya, jika data yang tiba melalui internet tidak disimpan dari kartu sebelum berikutnya tiba, ia akan ditimpa). Dengan demikian interupsi sangat jarang dinonaktifkan. Dalam sistem Unix asli (dan sezaman), ada satu CPU, dan cara paling sederhana untuk mendapatkan wilayah kritis ("tidak ada yang mengacaukan data saya saat saya memodifikasinya") hanya untuk menonaktifkan interupsi. Rasa sakit diambil untuk menjaga peregangan "interrupt dinonaktifkan" sesingkat mungkin karena hal di atas. Pada mesin multi-CPU saat ini, menonaktifkan interupsi pada satu CPU tidak banyak berpengaruh ke arah ini; menonaktifkan interupsi global adalah extremeñy mahal dalam koordinasi antar-CPU, sehingga tidak dilakukan (atau sangat jarang).

vonbrand
sumber
"Tidak perlu operasi" jatuhkan hak istimewa "diistimewakan". Jadi Anda bermaksud mengatakan, untuk mengubah dari mode Kernel ke User, instruksi yang tidak istimewa akan dilakukan. Jika itu adalah instruksi yang tidak istimewa, maka bahkan pengguna dapat menjalankannya & mengubah dari mode kernel ke pengguna? Atau apakah saya salah menafsirkannya?
avi
Ya, "pengguna normal" tidak bisa masuk ke mode kernel. Selain itu, menjatuhkan hak istimewa tidak dapat membahayakan, sehingga tidak perlu diistimewakan (dengan sendirinya). Jika melakukan hal ini pada beberapa mesin, misalnya, mendaftar register istimewa, itu akan diistimewakan di sana. Tapi itu tidak harus menjadi istimewa.
vonbrand
Saya tidak melakukannya dengan benar. Komentar & jawaban Anda sebelumnya bertentangan dengan dirinya sendiri. Dalam komentar Anda berkata, 'seorang "pengguna normal" tidak bisa masuk ke mode kernel', tetapi sebagai jawaban, Anda menyebutkan '"Tidak perlu operasi" drop privilege "menjadi istimewa"'. Apa yang saya lewatkan? : S Secara sederhana, untuk mengubah Kernel ke mode Pengguna, mode bit harus diubah. Yang tidak bisa dilakukan dalam mode pengguna, kan? Dengan demikian itu tidak bisa instruksi non-istimewa.
avi
Sial, saya juga tidak mengerti mengapa mode pengguna ke mode kernel salah? Dalam penjelasan Anda, dalam beberapa baris pertama Anda menyebutkan pengguna ke mode kernel dapat dilakukan melalui instruksi INT & terakhir Anda menyebutkan: 'Sarana untuk pergi ke mode pengawas tidak dapat diistimewakan'. Bukankah ini semua yang saya sebutkan? Interupsi H / W (yang jelas, mis. Permintaan I / O), interupsi S / W (instruksi INT) & instruksi non-privilege.
avi
Itu bisa dilakukan dengan interupsi, tetapi ada kemungkinan lain. Itu tidak dapat diistimewakan (jika itu, tidak ada pengguna bisa melakukannya ;-).
vonbrand