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.
Ini bukan jawaban teknis tetapi jawaban historis untuk pertanyaan spesifik yang diajukan oleh OP: "Apa alasan non-preemptivity dari kernel Linux yang lebih lama?"
(Saya berasumsi, seperti yang dijelaskan oleh @peterh dalam jawaban dan komentarnya, bahwa dengan "non-preemptivity" OP mengacu pada salah satu atau kedua fakta bahwa hanya satu proses pengguna yang bisa berada di dalam kernel (dalam API) di sebuah waktu dan / atau Kunci Kernel Besar.)
Linus Torvalds tertarik mempelajari cara kerja sistem operasi, dan cara dia belajar adalah menulis satu. Modelnya, dan basisnya, dan lingkungan pengembangan awalnya adalah Minix, OS yang ada untuk tujuan pendidikan (yaitu, bukan OS produksi) yang tidak gratis (seperti dalam open source, pada waktu itu - tidak gratis seperti dalam bir, antara).
Jadi dia menulis sebuah kernel tanpa preemption (Big Kernel Lock disebutkan dalam jawaban lain) karena itulah cara Anda melakukannya jika Anda ingin mengaktifkan OS baru Anda dan menjalankannya dengan cepat untuk tujuan pendidikan: jauh lebih sederhana dari itu. Kernel untuk mendukung multiprogramming bersamaan dari program dan perangkat pengguna cukup sulit - sangat sulit untuk membuat kernel itu sendiri bersamaan.
Jika dia tahu kemudian seberapa populer / berguna / penting Linux akan menjadi ... dia mungkin akan melakukannya dengan cara yang sama. (Hanya IMO, aku tidak tahu apa yang sebenarnya dia pikirkan.) Karena kamu harus berjalan sebelum bisa berlari.
Dan itu tetap seperti itu untuk waktu yang lama karena a) ada banyak pekerjaan lain yang harus dilakukan untuk membuat Linux seperti sekarang ini (atau bahkan seperti itu pada waktu itu) dan b) untuk mengubahnya akan menjadi usaha yang sangat sulit (seperti yang dijelaskan dalam jawaban lain).
sumber