Mengapa Linux disebut kernel monolitik?

208

Saya membaca bahwa Linux adalah kernel monolitik. Apakah kernel monolitik berarti mengkompilasi dan menautkan kode kernel lengkap menjadi yang dapat dieksekusi?

Jika Linux dapat mendukung modul, mengapa tidak memecah semua subsistem menjadi modul dan memuatnya jika perlu? Dalam hal ini, kernel tidak harus memuat semua modul pada awalnya dan dapat mempertahankan indeks fungsi dalam modul dan memuatnya jika perlu.

Boolean
sumber

Jawaban:

290

Kernel monolitik adalah kernel di mana semua layanan (sistem file, VFS, driver perangkat, dll) serta fungsionalitas inti (penjadwalan, alokasi memori, dll.) Adalah grup rajutan ketat yang berbagi ruang yang sama. Ini secara langsung menentang microkernel .

Sebuah microkernel lebih memilih pendekatan di mana fungsionalitas inti diisolasi dari layanan sistem dan driver perangkat (yang pada dasarnya hanya layanan sistem). Sebagai contoh, VFS (sistem file virtual) dan blok sistem file perangkat (yaitu minixfs) adalah proses terpisah yang berjalan di luar ruang kernel, menggunakan IPC untuk berkomunikasi dengan kernel, layanan lain dan proses pengguna. Singkatnya, jika itu adalah modul di Linux, ini adalah layanan di microkernel, menunjukkan proses yang terisolasi.

Jangan bingung istilah kernel modular menjadi apa pun kecuali monolitik. Beberapa kernel monolitik dapat dikompilasi menjadi modular (misalnya Linux), yang penting adalah modul dimasukkan dan dijalankan dari ruang yang sama yang menangani fungsionalitas inti (ruang kernel).

Keuntungan dari microkernel adalah bahwa setiap layanan yang gagal dapat dengan mudah dimulai kembali, misalnya, tidak ada kernel yang berhenti jika sistem file root melempar dibatalkan. Ini juga dapat dilihat sebagai kerugian, karena dapat menyembunyikan bug yang cukup kritis (atau membuat mereka tampak tidak begitu kritis, karena masalahnya tampaknya terus memperbaiki dirinya sendiri). Ini dipandang sebagai keuntungan besar dalam skenario di mana Anda tidak bisa dengan mudah memperbaiki sesuatu setelah dikerahkan.

Kerugian dari sebuah microkernel adalah bahwa pesan IPC yang tidak sinkron dapat menjadi sangat sulit untuk di-debug, terutama jika fibril diimplementasikan. Selain itu, hanya melacak masalah FS / write berarti memeriksa proses ruang pengguna, layanan perangkat blok, layanan VFS, layanan sistem file dan (mungkin) layanan PCI. Jika Anda mengosongkan hal itu, saatnya untuk melihat layanan IPC. Ini seringkali lebih mudah di kernel monolitik. GNU Hurd menderita masalah debugging ini ( referensi ). Saya bahkan tidak akan pergi ke pos pemeriksaan ketika berhadapan dengan antrian pesan yang kompleks. Microkernels bukan untuk orang yang lemah hati.

Jalur terpendek menuju kernel yang berfungsi dan stabil adalah pendekatan monolitik. Salah satu pendekatan dapat menawarkan antarmuka POSIX, di mana desain kernel menjadi sedikit menarik bagi seseorang hanya ingin menulis kode untuk dijalankan pada desain yang diberikan.

Saya menggunakan Linux (monolitik) dalam produksi. Namun, sebagian besar pembelajaran saya, peretasan atau bermain-main dengan pengembangan kernel masuk ke sebuah microkernel, khususnya HelenOS .

Edit

Jika Anda sampai sejauh ini melalui jawaban saya yang bertele-tele, Anda mungkin akan bersenang-senang membaca debat ' Great Torvalds-Tanenbaum mengenai desain kernel '. Bahkan lebih lucu untuk membaca pada 2013, lebih dari 20 tahun setelah itu terjadi. Bagian yang paling lucu adalah tanda tangan Linus di salah satu pesan terakhir:

Linus "my first, and hopefully last flamefest" Torvalds

Jelas, itu tidak menjadi kenyataan lebih dari prediksi Tanenbaum bahwa x86 akan segera usang.

NB:

Ketika saya mengatakan "Minix", saya tidak menyiratkan Minix 3. Selain itu, ketika saya menyebutkan The HURD, saya mereferensikan (kebanyakan) mikrokernel Mach. Bukan maksud saya untuk meremehkan karya orang lain baru-baru ini.

Tim Post
sumber
5
Menariknya Linus Torvalds sangat dipengaruhi oleh MINIX Andew Tanenbaum ketika ia menciptakan Linux. Namun, MINIX didasarkan pada desain kernel mikro sementara Linux menggunakan kernel monolitik.
Martin Liversage
2
@ Martin Liversage: Lebih frustrasi daripada terpengaruh :) Saya mengedit jawaban saya untuk mencerminkan itu.
Tim Post
25
@DigitalRoss: Anda akan melihat kotak masuk saya setelah menjawab ini, Linus jinak dibandingkan dengan penggemar Minix dan Mach.
Tim Post
3
@ p_l Saya pikir ini cukup dekat dengan waktu di mana kita perlu berbicara tentang perbedaan antara mikro, monolitik dan hibrida. Itu bisa menjadi pertanyaan yang cukup bagus :)
Tim Post
15

Kernel monolitik berarti bahwa seluruh sistem operasi berjalan dalam mode kernel (yaitu sangat istimewa oleh perangkat keras). Artinya, tidak ada bagian dari OS yang berjalan dalam mode pengguna (hak istimewa lebih rendah). Hanya aplikasi di atas OS yang berjalan dalam mode pengguna.

Dalam sistem operasi kernel non-monolitik, seperti Windows, sebagian besar OS itu sendiri berjalan dalam mode pengguna.

Dalam kedua kasus tersebut, OS bisa sangat modular.

CesarGon
sumber
9
Windows jelas merupakan kernel monolitik.
Adam Rosenfield
7
@ Adam: Saya tidak setuju. Windows 16-bit gaya lama adalah kernel monolitik, seperti halnya Windows 95 dan sejenisnya. Tetapi edisi Windows berbasis NT, termasuk semua versi Server plus Vista dan 7, jelas merupakan microkernel atau hybrid, tergantung pada definisi "microkernel" apa yang Anda gunakan.
CesarGon
8
Hanya karena driver printer tidak berjalan di ring0 tidak membuatnya menjadi microkernel :)
caf
7
@caf: Saya sarankan Anda melihat en.wikipedia.org/wiki/Windows_NT_kernel dan en.wikipedia.org/wiki/Comparison_of_operating_system_kernels . Anda akan melihat bahwa Windows NT dan penerusnya, termasuk Vista, 7 dan Server, digambarkan sebagai "kernel hybrid". Dua subsistem besar dari OS berjalan sepenuhnya dalam mode pengguna, bukan hanya driver printer. :-)
CesarGon
7
Komentar saya agak tidak jelas - penunjukan "hibrida" tampaknya begitu bebas informasi sehingga tidak berguna.
caf
10

; tl-dr - Tidak, Linux selalu monolitik.

Modul Linux dapat berarti modular dalam beberapa hal. Seperti yang orang lain catat, monolitik biasanya mewakili sebuah kernel mikro versus kernel monolitik . Sebuah microkernel tradisional hanya memiliki fitur-fitur ini,

  1. Penjadwalan
  2. Manajemen memori
  3. Komunikasi antar proses

Tidak ada driver perangkat keras , tumpukan protokol , sistem file , menangguhkan / melanjutkan , manajemen jam , dll di kernel utama. Hal-hal ini identik dengan tugas pengguna apa pun (meskipun mereka mungkin memiliki hak istimewa yang berbeda melalui MMU / scheduler).


Prediksi Tanenbaum

  1. Microkernels adalah masa depan
  2. x86 akan mati dan arsitektur RISC akan mendominasi pasar
  3. (5 tahun sejak itu) semua orang akan menjalankan OS GNU gratis

Pemrogram PC dan server mungkin tertawa, tetapi dua dan tiga tentu benar untuk sebagian besar ponsel yang ada. Tanenbaum akan benar di semua akun jika BlackBerry QNX sukses.

Juga, banyak L1-hypervisors memiliki mikro-kernel di bawahnya. Ini karena hyper-visor biasanya tidak melakukan banyak hal selain saklar konteks .

Rupanya tiga memprediksi keberhasilan Linux. ;-)


Argumen untuk microkernels adalah bahwa semua sub-sistem monolitik perlu menyinkronkan beberapa nilai sekaligus. Untuk melakukan ini, mereka harus menggunakan kunci dan akan menderita hukum Amdahl ketika diperluas ke arsitektur paralel. Penghitungnya adalah microkernels menghasilkan banyak pesan IPC.

Perkembangan utama adalah penggunaan pemrograman bebas kunci untuk menghindari pertikaian dalam kernel monolitik. Ini menghindari penguncian dalam kernel monolitik sementara juga mengurangi overhead IPC. Baru-baru ini semua CPU telah memperluas ISA mereka untuk memasukkan primitif yang lebih baik untuk algoritma bebas kunci . Jadi Linux mungkin akan tetap menjadi kernel monolitik untuk beberapa waktu.

kebisingan tanpa seni
sumber
1
Ya, saya tahu Tanenbaum berarti Hurd. Tetapi GNU beralih ke Linux sehingga kata-katanya lucu.
kebisingan tanpa suara
Mengapa x86 tidak digunakan untuk perangkat seluler? Apa yang membuat arsitektur lain menguntungkan?
Abdul
1
Abdul : Lihat pertanyaan ini .
kebisingan seni
Ya, itu penting. Sulit untuk membuat SOC x86 (system-on-chip). Tidak ada kode HDL standar untuk membuat x86 yang dapat dibeli oleh vendor SOC (Broadcom, Freescale, dll).
kebisingan seni
9

Dari Wikipedia :

Kernel monolitik adalah arsitektur kernel di mana seluruh sistem operasi bekerja di ruang kernel dan sendirian sebagai mode pengawas. Berbeda dengan arsitektur lain, kernel monolitik mendefinisikan sendiri antarmuka virtual tingkat tinggi atas perangkat keras komputer, dengan seperangkat panggilan sistem atau primitif untuk mengimplementasikan semua layanan sistem operasi seperti manajemen proses, konkurensi, dan manajemen memori itu sendiri dan satu atau lebih driver perangkat sebagai modul.

Versi terbaru dari Windows menggunakan kernel Hybrid .

Kernel hybrid adalah arsitektur kernel yang didasarkan pada penggabungan aspek arsitektur kernel mikro dan kernel monolitik yang digunakan dalam sistem operasi komputer. Kategori ini kontroversial karena kemiripannya dengan kernel monolitik; istilah ini telah dianggap oleh beberapa orang sebagai pemasaran sederhana. Kategori kernel tradisional adalah kernel monolitik dan microkernels (dengan nanokernels dan exokernels dipandang sebagai versi yang lebih ekstrim dari microkernels).

Bob
sumber
7
Jika saya pernah melakukan sesuatu dalam ruang kernel, saya harus ingat untuk menggunakan "hybric kerkel" di suatu tempat. SCNR ;-)
Jürgen A. Erhard
1
Windows NT selalu merupakan sistem hybrid. Kernel mungkin tidak persis hibrid, tetapi Anda mempertanyakan apa yang Anda hitung sebagai bagian dari itu (winapi, misalnya, diimplementasikan sebagai layanan ruang pengguna)
p_l
5

'Monolitik' dalam konteks ini tidak merujuk pada keberadaan satu executable besar tunggal, dan seperti yang Anda katakan, Linux mendukung pemuatan dinamis modul kernel pada saat runtime. Ketika berbicara tentang kernel, 'monolitik' berarti bahwa seluruh sistem operasi berjalan dalam mode 'istimewa' atau 'pengawas', berbeda dengan jenis sistem operasi lain yang menggunakan jenis kernel seperti 'microkernel', di mana hanya sedikit serangkaian fungsi berjalan dalam mode istimewa, dan sebagian besar sistem operasi berjalan di ruang pengguna.

Para pendukung microkernels mengatakan bahwa ini lebih baik karena kode yang lebih kecil berarti lebih sedikit bug, dan bug yang berjalan dalam mode pengawas dapat menyebabkan masalah yang jauh lebih besar daripada dalam kode ruang pengguna (seperti peluang lebih besar untuk memiliki kerentanan keamanan atau kerusakan total sistem dalam bentuk 'kernel panik'). Beberapa microkernels cukup minim sehingga dapat 'diverifikasi secara formal', yang berarti Anda dapat membuktikan secara matematis bahwa kernel 'benar' sesuai dengan spesifikasi. L4 adalah contoh yang bagus untuk ini.

David Claridge
sumber
Periksa sumber Anda. Wikipage dinyalakan. www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/…
monksy
2

Kernel monolitik adalah proses besar tunggal yang berjalan seluruhnya dalam ruang alamat tunggal. Ini adalah file biner statis tunggal. Semua layanan kernel ada dan jalankan di ruang alamat kernel. Kernel dapat menjalankan fungsi secara langsung. Contoh OS berbasis kernel monolitik adalah Linux, Unix.

Saya pikir posting ini akan membantu Anda lebih memahami konsep.

http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html

JIN007
sumber
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
Scott