Sabtu, 25 April 2009

Kernel Linux

Kernel dan Linux adalah dua istilah yang sepertinya melekat satu sama lain. Hampir dapat dipastikan, setiap kali berbicara tentang distribusi Linux, istilah kernel selalu disinggung. Apakah sebenarnya yang dimaksud dengan kernel? Serta bagaimana kaitannya dengan distribusi Linux yang banyak jumlahnya?
Kernel adalah bagian dari software yang menyediakan sebuah lapisan antara hardware dan aplikasi yang berjalan pada computer. Secara tegas, dalam ilmu computer, istilah Linux hanya mengacu pada kernel, yang ditulis Linus Torvalds pada awal 1990-an. Semua bagian lain yang ada pada distribusi Linux seperti Bash shell, KDE window manager, web browser, X server, dan lain-lain hanyalah aplikasi yang berjalan di Linux, bukan bagian dari system operasi itu sendiri.
Sebagai contoh, instalasi baru RHEL5 (RedHat Enterprise Linux versi 5) menempati sekitar 2,5 GB ruang harddisk (tentunya bergantung pada pilihan aplikasi apa saja yang Anda sertakan). Dari keseluruhan jumlah ini, kernel, termasuk semua modulnya, hanya menempati ruang 47 MB atau sekitar 2%.
Abstraksi
Apa yang sebenarnya dilakukan oleh kernel? Kernel membuat layanan-layanan yang ada di dalamnya, tersedia untuk aplikasi yang berjalan, melalui sekumpulan besar entry point, yang secara teknis dikenal sebagai system call. Kernel menggunakan system call seperti read dan write untuk memberikan abstraksi hardware Anda.
Dari sudut pandang programmer, hal ini terlihat seperti fungsi call biasa. Secara bersama, sekumpulan system call menyediakan Linux virtual machine, yang dapat dibayangkan sebagai abstraksi dari hardware pokok. Salah satu abstraksi yang disediakan oleh kernel adalah file system.
Lantas, apa yang dimaksud dengan abstraksi itu sendiri? Ketika Anda membuka sebuah file serangkaian byte data yang memiliki nama, kernel akan membuatkan ilusi (bayangan) dari file tersebut, dan menampilkannya untuk Anda. Dengan demikian, Anda terhindar dari track, sector, head, dan free block list, yang harus dilalui bila ingin berbicara langsung dengan hardware. Inilah yang dimaksud dengan abstraksi.
Ilusi
Filesystem adalah salah satu abstraksi yang disediakan oleh kernel. Ada pula beberapa fitur tidak begitu jelas terlihat, misalnya kernel bertanggung jawab untuk proses penjadwalan. Dalam satu waktu, kemungkinan terdapat beberapa proses (program) yang menunggu untuk dijalankan. Kernel yang mengatur penjadwalan mengalokasikan waktu CPU untuk setiap proses.
Hasilnya, Anda akan melihat ilusi (seolah-olah) CPU menjalankan beberapa aplikasi pada saat yang bersamaan. Fungsi lain dari kernel yan tidak terlihat, bahkan programmer sekalipun, adalah memory management. Setiap proses berjalan di bawah ilusi yang memiliki ruang alamat (address space) range memory address yang valid sendiri-sendiri.
Padahal dalam kenyataannya, setiap proses berbagi memory fisik dengan proses yang lain. Bila system kemudian mengalami low memory, sebagian address space akan diparkir di area swap di dalam harddisk. Aspek lain dari memory management adalah mencegah sebuah proses mengakses address space proses yang lain. Tindakan pencegahan ini diperlukan untuk menjaga integritas dari sebuah OS yang multi-processing.
Kernel juga menerapkan protocol jaringan seperti IP, TCP, dan UDP, yang menyediakan komunikasi machine-to-machine dan process-to-process melalui jaringan. Sekali lagi, ini semua adalah ilusi. TCP memberikan ilusi dari sambungan permanen antara dua proses seperti sepotong kawat tembaga yang menghubungkan dua telepon tetapi pada kenyataannya, tidak pernah ada sambungan permanen.
Perlu diketahui bahwa aplikasi spesifik protocol seperti FTP, DNS, datau HTTP diimplementasikan oleh user-level program, dan bukan merupakan bagian dari kernel.
Kernel Modular
Sekarang, kita telah memiliki gambaran bagaimana kernel bekerja. Selanjutnya, mari kita lihat organisasi fisik kernel. Pada generasi awal, kernel Linux bersifat monolitik, yakni semua bit dan bagian terhubung secara statis dengan file executable (yang biasanya berukuran cukup besar). Tapi kini, kernel Linux modern telah bersifat modular. Banyak fungsionalitas di dalam modul, yang di-loading ke dalam kernel secara dinamis.
Hal ini menjaga inti dari kernel tetap kecil, dan memungkinkan untuk me-loading atau mengganti modul ke dalam kernel yang sedang berjalan tanpa harus melakukan rebooting. Inti dari kernel diloading ke dalam memory pada saat booting sebuah file bernama vmlinuz-[versi kernel] di direktori /boot. Sementara modul-modulnya tersimpan dalam direktori /lib/modules/[versi kernel]. Semua bagian modul ini akan disalin ke tempatnya, ketika kernel telah terinstal.

0 comments: