Dengan lebih dari 13 juta baris kode, kernel Linux adalah salah satu proyek open source terbesar di dunia, tetapi apa itu kernel dan untuk apa itu?
Kernel adalah tingkat terendah dari perangkat lunak yang mudah diganti yang menghubungkan dengan perangkat keras di komputer Anda. Ini bertanggung jawab untuk menghubungkan semua aplikasi Anda yang berjalan di "mode pengguna" ke perangkat keras fisik, dan memungkinkan proses, yang dikenal sebagai server, untuk mendapatkan informasi dari satu sama lain menggunakan komunikasi antar-proses (IPC).
Tentu saja ada berbagai cara untuk membangun kernel dan pertimbangan arsitektural ketika membangunnya dari awal. Secara umum, kebanyakan kernel termasuk dalam satu dari tiga jenis: monolithic, microkernel, dan hybrid. Linux adalah kernel monolitik sementara OS X (XNU) dan Windows 7 menggunakan kernel hibrida. Mari kita ikuti tur singkat dari ketiga kategori tersebut sehingga kita dapat membahasnya lebih detail nanti.
Gambar oleh popcorn uptown
Microkernel
Sebuah mikrokernel mengambil pendekatan hanya mengelola apa yang harus: CPU, memori, dan IPC. Hampir semua hal lain di komputer dapat dilihat sebagai aksesori dan dapat ditangani dalam mode pengguna. Microkernels memiliki keuntungan portabilitas karena mereka tidak perlu khawatir jika Anda mengubah kartu video atau bahkan sistem operasi Anda selama sistem operasi masih mencoba mengakses perangkat keras dengan cara yang sama. Microkernels juga memiliki footprint yang sangat kecil, baik untuk memori dan ruang penyimpanan, dan mereka cenderung lebih aman karena hanya proses tertentu yang berjalan dalam mode pengguna yang tidak memiliki izin tinggi sebagai mode supervisor.
Pro
Cons
Kernel Monolitik
Kernel monolitik adalah kebalikan dari mikrokel karena tidak hanya mencakup CPU, memori, dan IPC, tetapi juga mencakup hal-hal seperti driver perangkat, manajemen sistem file, dan panggilan server sistem. Kernel monolitik cenderung lebih baik dalam mengakses perangkat keras dan multitasking karena jika suatu program perlu mendapatkan informasi dari memori atau proses lain yang berjalan ia memiliki jalur yang lebih langsung untuk mengaksesnya dan tidak harus menunggu dalam antrian untuk menyelesaikan sesuatu. Namun ini dapat menyebabkan masalah karena semakin banyak hal yang berjalan dalam mode supervisor, semakin banyak hal yang dapat menurunkan sistem Anda jika seseorang tidak berperilaku dengan benar.
Pro
Cons
Gambar via schoschie di Flickr
Hybrid Kernel
Kernel hibrida memiliki kemampuan untuk memilih apa yang ingin mereka jalankan dalam mode pengguna dan apa yang ingin mereka jalankan dalam mode supervisor. Sering kali hal-hal seperti driver perangkat dan filesystem I / O akan dijalankan dalam mode pengguna sementara IPC dan panggilan server akan disimpan dalam mode supervisor. Ini memberikan yang terbaik dari kedua dunia tetapi sering akan membutuhkan lebih banyak pekerjaan dari produsen perangkat keras karena semua tanggung jawab pengemudi terserah pada mereka. Ini juga dapat memiliki beberapa masalah latensi yang melekat dengan microkernels.
Pro
Cons
File kernel, di Ubuntu, disimpan di folder / boot Anda dan disebut vmlinuz-versi. Nama vmlinuz berasal dari unix world di mana mereka biasa memanggil kernel mereka hanya “unix” pada tahun 60-an sehingga Linux mulai memanggil kernel mereka “linux” ketika pertama kali dikembangkan pada tahun 90-an.
Ketika memori virtual dikembangkan untuk kemampuan multitasking yang lebih mudah, "vm" diletakkan di bagian depan file untuk menunjukkan bahwa kernel mendukung memori virtual. Untuk sementara kernel Linux disebut vmlinux, tetapi kernel tumbuh terlalu besar untuk masuk ke dalam memori boot yang tersedia sehingga imej kernel dikompresi dan akhir x diubah menjadi z untuk menunjukkan bahwa ia dikompres dengan kompresi zlib. Kompresi yang sama ini tidak selalu digunakan, sering digantikan dengan LZMA atau BZIP2, dan beberapa kernel hanya disebut zImage.
Penomoran versi akan dalam format A.B.C.D di mana A.B mungkin akan menjadi 2.6, C akan menjadi versi Anda, dan D menunjukkan patch atau perbaikan Anda.
Dalam folder / boot juga akan ada file-file penting lainnya yang disebut initrd.img-version, system.map-version, dan config-version. File initrd digunakan sebagai disk RAM kecil yang mengekstrak dan mengeksekusi file kernel yang sebenarnya. File system.map digunakan untuk manajemen memori sebelum kernel terisi penuh, dan file konfigurasi memberi tahu kernel opsi dan modul apa yang dimuat ke dalam imej kernel ketika sedang dikompilasi.
Karena kernel Linux monolithic, ia memiliki footprint terbesar dan paling kompleks dibandingkan jenis kernel lainnya. Ini adalah fitur desain yang berada di bawah sedikit perdebatan di hari-hari awal Linux dan masih membawa beberapa kelemahan desain yang sama yang dimiliki oleh kernel monolitik.
Satu hal yang dilakukan oleh pengembang kernel Linux untuk mengatasi kekurangan ini adalah dengan membuat modul kernel yang dapat dimuat dan dibongkar pada saat runtime, yang berarti Anda dapat menambah atau menghapus fitur kernel Anda dengan cepat. Ini dapat melampaui hanya menambahkan fungsionalitas perangkat keras ke kernel, dengan memasukkan modul yang menjalankan proses server, seperti virtualisasi tingkat rendah, tetapi juga dapat memungkinkan seluruh kernel diganti tanpa perlu me-reboot komputer Anda dalam beberapa kasus.
Bayangkan jika Anda dapat meng-upgrade ke paket layanan Windows tanpa perlu reboot ...
Bagaimana jika Windows telah menginstal semua driver dan Anda hanya perlu menyalakan driver yang Anda butuhkan? Pada dasarnya inilah yang dilakukan oleh modul kernel untuk Linux. Modul kernel, juga dikenal sebagai modul kernel yang dapat dimuat (LKM), sangat penting untuk menjaga agar kernel berfungsi dengan semua perangkat keras Anda tanpa menghabiskan semua memori yang tersedia.
Sebuah modul biasanya menambahkan fungsionalitas ke kernel dasar untuk hal-hal seperti perangkat, sistem file, dan panggilan sistem. LKM memiliki ekstensi file .ko dan biasanya disimpan di direktori / lib / modules. Karena sifatnya yang modular Anda dapat dengan mudah menyesuaikan kernel Anda dengan mengatur modul untuk memuat, atau tidak memuat, saat startup dengan perintah menuconfig atau dengan mengedit file / boot / config Anda, atau Anda dapat memuat dan membongkar modul dengan cepat dengan modprobe perintah.
Modul sumber pihak ketiga dan tertutup tersedia di beberapa distribusi, seperti Ubuntu, dan mungkin tidak diinstal secara default karena kode sumber untuk modul tidak tersedia. Pengembang perangkat lunak (yaitu nVidia, ATI, antara lain) tidak memberikan kode sumber tetapi mereka membangun modul mereka sendiri dan mengkompilasi file .ko yang diperlukan untuk distribusi. Sementara modul ini gratis seperti dalam bir, mereka tidak gratis seperti dalam pidato dan dengan demikian tidak termasuk oleh beberapa distribusi karena pengelola merasa itu "noda" kernel dengan menyediakan perangkat lunak tidak bebas.
Kernel bukanlah sihir, tetapi sangat penting untuk komputer mana pun berjalan dengan baik. Kernel Linux berbeda dari OS X dan Windows karena menyertakan driver pada level kernel dan membuat banyak hal didukung "out of the box". Mudah-mudahan Anda akan tahu sedikit lebih banyak tentang bagaimana perangkat lunak dan perangkat keras Anda bekerja bersama dan file apa yang Anda perlukan untuk mem-boot komputer Anda.
Kernel.org
Gambar oleh ingridtaylar