Kernel preemptive hanya berarti bahwa tidak ada Kunci Kernel Besar .
Linux memiliki multi-tasking preemptive (yaitu kode pengguna preemptible) sejak saat pertama (sejauh yang saya tahu, Linux 0.0.1 yang sangat pertama diunggah oleh Linus ke server ftp funet sudah preemptive multitask). Jika Anda menjalankan, misalnya, beberapa proses kompresi atau kompilasi, mereka dieksekusi secara paralel sejak saat pertama.
Sebaliknya - pada saat itu - banyak digunakan Win31. Pada Win31, jika suatu tugas mendapatkan CPU dari "kernel", secara default itu adalah tanggung jawabnya untuk menentukan kapan memberikan kontrol kembali ke OS (atau ke tugas-tugas lain). Jika suatu proses tidak memiliki dukungan khusus untuk fitur ini (yang membutuhkan pekerjaan pemrograman tambahan), maka ketika menjalankannya, semua tugas lain ditangguhkan. Bahkan sebagian besar aplikasi dasar yang diintegrasikan ke dalam Win31 berhasil.
Preemptive multitasking berarti, bahwa tugas tidak memiliki cara untuk mengalokasikan CPU seperti yang mereka inginkan. Sebaliknya, jika slot waktu mereka kedaluwarsa, kernel menjauhkan CPU dari mereka. Dengan demikian, dalam sistem operasi preemptive, proses penulisan yang buruk atau berfungsi buruk tidak dapat membekukan OS, atau menghindari proses lain dari berjalan. Linux selalu preemptive untuk proses ruang pengguna.
Kunci Kernel Besar berarti bahwa dalam beberapa kasus, di dalam ruang kernel , masih ada beberapa kunci, yang mencegah proses lain dari menjalankan kode yang dilindungi. Sebagai contoh, Anda tidak dapat me - mount beberapa filesystem secara bersamaan - jika Anda memberikan banyak perintah mount, mereka masih dieksekusi secara berurutan, karena me-mount hal-hal yang diperlukan untuk mengalokasikan Big Kernel Lock.
Membuat preemptive kernel diperlukan untuk menghilangkan kunci kernel besar ini, yaitu membuat mount dan tugas-tugas lain untuk dapat berjalan secara bersamaan. Itu pekerjaan besar.
Secara historis, ini dibuat sangat mendesak dengan meningkatnya dukungan SMP (dukungan multi-CPU). Pertama kali, benar-benar ada beberapa motherboard CPU. Kemudian banyak CPU ("core") diintegrasikan ke dalam satu chip, saat ini mainboard yang benar-benar multi-CPU sudah jarang (mereka biasanya dalam sistem server yang mahal). Juga sistem inti tunggal (di mana hanya ada satu CPU, dengan satu inti) jarang terjadi.
Dengan demikian, jawaban atas pertanyaan Anda bukanlah bahwa "apa alasan tidak preemptivity", karena selalu preemptive. Pertanyaan sebenarnya adalah, apa yang membuat eksekusi kernel preemptive benar-benar diperlukan . Jawabannya adalah: semakin banyak rasio dari banyak CPU, banyak sistem inti.