Apa perbedaan antara Kernel Non-preemptif, Preemptif dan Preemptif Selektif?

Jawaban:

14

Pada kernel preemptive, sebuah proses yang berjalan dalam mode kernel dapat digantikan oleh proses lain saat di tengah fungsi kernel.

Ini hanya berlaku untuk proses yang berjalan dalam mode kernel, proses yang mengeksekusi CPU dalam mode pengguna dianggap "idle". Jika proses mode pengguna ingin meminta layanan dari kernel, ia harus mengeluarkan pengecualian yang bisa ditangani oleh kernel.

Sebagai contoh:

Proses Amengeksekusi pengendali pengecualian, Proses Bdibangkitkan oleh permintaan IRQ, kernel menggantikan proses Adengan B(sakelar proses paksa). Proses Adibiarkan belum selesai. Penjadwal memutuskan setelah itu apakah proses Amendapatkan waktu CPU atau tidak.

Pada kernel nonpreemptive, proses A hanya akan menggunakan semua waktu prosesor sampai ia selesai atau secara sukarela memutuskan untuk mengizinkan proses lain untuk mengganggu dia (proses yang direncanakan beralih).

Sistem operasi berbasis Linux saat ini umumnya tidak termasuk kernel preemptive sepenuhnya, masih ada fungsi kritis yang harus dijalankan tanpa gangguan. Jadi saya pikir Anda bisa menyebutnya "kernel preemptive selektif".

Selain itu, ada beberapa pendekatan untuk membuat kernel Linux (hampir) menjadi preemptive sepenuhnya.

mengibaskan
sumber
Sistem Macintosh 6 dan kode terkait (misalnya, Sistem 7, Sistem 8, dan Sistem 9) semuanya non-preemptive. Pergantian Apple ke MacOS X juga melihat pengenalan multitasking preemptive juga.
Mei
kernel menggantikan proses A dengan B (sakelar proses paksa). -> Dalam cara bahasa Inggris, dapatkah kita mengatakan kalimat sebagai alternatif sebagai proses A didahului (dengan proses B)?
snr
2

preemption adalah -> Kemampuan sistem operasi untuk mendahului atau menghentikan tugas yang saat ini dijadwalkan untuk tugas prioritas yang lebih tinggi. Penjadwalan mungkin salah satu, tetapi tidak terbatas pada, proses atau penjadwalan I / O dll.

Di Linux, program-program ruang-pengguna selalu diprioritaskan: kernel menginterupsi program ruang-pengguna untuk beralih ke utas lain, menggunakan centang jam biasa. Jadi, kernel tidak menunggu program pengguna-ruang untuk secara eksplisit melepaskan prosesor (yang merupakan kasus di multitasking kooperatif). Ini berarti bahwa loop tak terbatas dalam program ruang pengguna tidak dapat memblokir sistem.

Namun, sampai 2,6 kernel, kernel itu sendiri tidak dapat dimenangkan: begitu satu utas telah memasuki kernel, tidak dapat dilakukan preempt untuk menjalankan utas lainnya. Namun, tidak adanya preemption di kernel ini menyebabkan beberapa masalah berkaitan dengan latensi dan skalabilitas. Jadi, preemption kernel telah diperkenalkan di kernel 2.6, dan seseorang dapat mengaktifkan atau menonaktifkannya menggunakan opsi CONFIG_PREEMPT. Jika CONFIG_PREEMPT diaktifkan, maka kode kernel dapat didahului di mana-mana, kecuali ketika kode telah menonaktifkan interupsi lokal. Loop tak terbatas dalam kode tidak dapat lagi memblokir seluruh sistem. Jika CONFIG_PREEMPT dinonaktifkan, maka perilaku 2.4 dikembalikan.

Dikutip dan diformat dari: http://www.linuxquestions.org/questions/linux-general-1/pre-emptive-vs-non-pre-emptive-kernel-582437/

Madhur Ahuja
sumber
Mengapa 2.4 kernel tidak preemptive?
Sen
Lebih baik tanyakan Linus Torvalds :)
Madhur Ahuja
1

Kernel preemptive memungkinkan suatu proses untuk didahului saat sedang berjalan dalam mode kernel. Kernel nonpreemptive tidak mengizinkan proses yang berjalan di kernel modeto di preempt; proses mode-kernel akan berjalan sampai keluar dari mode kernel, memblokir, atau secara sukarela menghasilkan kontrol CPU. Jelas, kernel nonpreemptive pada dasarnya bebas dari kondisi balapan pada struktur data kernel, karena hanya satu proses yang aktif dalam kernel pada suatu waktu. Kami tidak dapat mengatakan hal yang sama tentang kernel preemptive, jadi mereka harus dirancang dengan hati-hati untuk memastikan bahwa data kernel bersama bebas dari kondisi ras. Kernel preemptive sangat sulit dirancang untuk arsitektur SMP, karena dalam lingkungan ini dimungkinkan untuk dua proses mode kernel untuk berjalan secara bersamaan pada prosesor yang berbeda. Kernel preemptive lebih cocok untuk pemrograman waktu nyata, karena akan memungkinkan proses waktu nyata untuk mendahului proses yang sedang berjalan di kernel. Lebih lanjut, kernel preemptive mungkin lebih responsif, karena ada sedikit risiko bahwa proses mode-kernel akan berjalan untuk jangka waktu lama yang sewenang-wenang sebelum melepaskan prosesor ke proses menunggu. Tentu saja, efek ini dapat diminimalkan dengan merancang kode kernel yang tidak berperilaku seperti ini. Kemudian dalam bab ini, kami mengeksplorasi bagaimana berbagai sistem operasi mengelola preemption di dalam kernel. efek ini dapat diminimalkan dengan merancang kode kernel yang tidak berperilaku seperti ini. Kemudian dalam bab ini, kami mengeksplorasi bagaimana berbagai sistem operasi mengelola preemption di dalam kernel. efek ini dapat diminimalkan dengan merancang kode kernel yang tidak berperilaku seperti ini. Kemudian dalam bab ini, kami mengeksplorasi bagaimana berbagai sistem operasi mengelola preemption di dalam kernel.

nimesh thakur
sumber