Pada kernel preemptive, proses yang berjalan dalam mode kernel dapat digantikan oleh proses lain saat berada di tengah-tengah fungsi kernel.
Ini hanya berlaku untuk proses yang berjalan dalam mode kernel, proses eksekusi CPU dalam mode pengguna dianggap "menganggur". Jika proses mode pengguna ingin meminta layanan dari kernel, dia harus mengeluarkan pengecualian yang dapat ditangani oleh kernel.
Sebagai contoh:
Proses A
mengeksekusi penangan pengecualian, Proses B
dibangunkan oleh permintaan IRQ, kernel menggantikan proses A
dengan B
(saklar proses paksa). Proses A
dibiarkan belum selesai. Penjadwal kemudian memutuskan apakah memproses A
mendapat waktu CPU atau tidak.
Pada kernel nonpreemptive, proses A
hanya akan menggunakan semua waktu prosesor sampai dia selesai atau secara sukarela memutuskan untuk mengizinkan proses lain mengganggunya (saklar proses terencana).
Sistem operasi berbasis Linux saat ini umumnya tidak menyertakan kernel preemptive sepenuhnya, masih ada fungsi kritis yang harus berjalan tanpa gangguan. Jadi saya pikir Anda bisa menyebutnya "kernel preemptive selektif".
Selain itu, ada pendekatan untuk membuat kernel Linux (hampir) sepenuhnya preemptive.
- Wiki Linux Waktu Nyata
- Artikel LWN
preemption adalah -> Kemampuan sistem operasi untuk mendahului atau menghentikan tugas yang dijadwalkan saat ini demi tugas dengan prioritas lebih tinggi. Penjadwalan mungkin salah satu, tetapi tidak terbatas pada, proses atau penjadwalan I/O, dll.
Di Linux, program ruang pengguna selalu dapat diakhiri:kernel menginterupsi program ruang pengguna untuk beralih ke utas lain, menggunakan centang jam biasa. Jadi, kernel tidak menunggu program ruang pengguna untuk secara eksplisit melepaskan prosesor (yang merupakan kasus dalam multitasking kooperatif). Ini berarti loop tak terbatas dalam program ruang pengguna tidak dapat memblokir sistem.
Namun, hingga kernel 2.6, kernel itu sendiri tidak dapat didahului:segera setelah satu utas memasuki kernel, tidak dapat didahului untuk mengeksekusi utas lainnya. Namun, tidak adanya pendahuluan di kernel menyebabkan beberapa masalah terkait 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_PRREEMPT diaktifkan, maka kode kernel dapat didahului di mana saja, kecuali jika kode telah menonaktifkan interupsi lokal. Loop tak terbatas dalam kode tidak dapat lagi memblokir seluruh sistem. Jika CONFIG_PRREEMPT dinonaktifkan, maka perilaku 2.4 dipulihkan.
Dikutip ulang dan diformat dari:http://www.linuxquestions.org/questions/linux-general-1/pre-emptive-vs-non-pre-emptive-kernel-582437/