Kali ini saya akan membahas tentang jantung
dari sistem operasi yang kita kenal sebagai kernel.
Pengertian kernel
Kernel adalah suatu perangkat lunak yang menjadi
bagian utama dari sebuah sistem operasi. Tugasnya melayani bermacam program
aplikasi untuk mengakses perangkat keras komputer secara aman.
Karena akses terhadap perangkat keras terbatas, sedangkan ada lebih dari satu program yang harus dilayani dalam waktu yang bersamaan, maka kernel juga bertugas untuk mengatur kapan dan berapa lama suatu program dapat menggunakan satu bagian perangkat keras tersebut. Hal tersebut dinamakan sebagai multiplexing.
Akses kepada perangkat keras secara langsung merupakan masalah yang kompleks, oleh karena itu kernel biasanya mengimplementasikan sekumpulan abstraksi hardware. Abstraksi-abstraksi tersebut merupakan sebuah cara untuk menyembunyikan kompleksitas, dan memungkinkan akses kepada perangkat keras menjadi mudah dan seragam. Sehingga abstraksi pada akhirnya memudahkan pekerjaan programer.
Untuk menjalankan sebuah komputer kita tidak harus menggunakan kernel sistem operasi. Sebuah program dapat saja langsung di- load dan dijalankan diatas mesin 'telanjang' komputer, yaitu bilamana pembuat program ingin melakukan pekerjaannya tanpa bantuan abstraksi perangkat keras atau bantuan sistem operasi. Teknik ini digunakan oleh komputer generasi awal, sehingga bila kita ingin berpindah dari satu program ke program lain, kita harus mereset dan meload kembali program-program tersebut.
Karena akses terhadap perangkat keras terbatas, sedangkan ada lebih dari satu program yang harus dilayani dalam waktu yang bersamaan, maka kernel juga bertugas untuk mengatur kapan dan berapa lama suatu program dapat menggunakan satu bagian perangkat keras tersebut. Hal tersebut dinamakan sebagai multiplexing.
Akses kepada perangkat keras secara langsung merupakan masalah yang kompleks, oleh karena itu kernel biasanya mengimplementasikan sekumpulan abstraksi hardware. Abstraksi-abstraksi tersebut merupakan sebuah cara untuk menyembunyikan kompleksitas, dan memungkinkan akses kepada perangkat keras menjadi mudah dan seragam. Sehingga abstraksi pada akhirnya memudahkan pekerjaan programer.
Untuk menjalankan sebuah komputer kita tidak harus menggunakan kernel sistem operasi. Sebuah program dapat saja langsung di- load dan dijalankan diatas mesin 'telanjang' komputer, yaitu bilamana pembuat program ingin melakukan pekerjaannya tanpa bantuan abstraksi perangkat keras atau bantuan sistem operasi. Teknik ini digunakan oleh komputer generasi awal, sehingga bila kita ingin berpindah dari satu program ke program lain, kita harus mereset dan meload kembali program-program tersebut.
Kernel sistem operasi tidak harus ada dan dibutuhkan untuk
menjalankan suatu komputer. Program dapat langsung dijalankan secara langsung
dalam mesin. (contohnya CMOS Setup) sehingga
para pembuat program tersebut membuat program tanpa adanya dukungan dari sistem
operasi atau hardware abstraction. Cara kerja seperti ini, adalah cara kerja
yang digunakan pada zaman awal-awal dikembangkannya komputer (pada sekitar tahun
1950). Kerugian dari diterapkannya metode ini adalah pengguna harus melakukan
reset ulang komputer tersebut dan memuatkan program lainnya untuk berpindah
program, dari satu program ke program lainnya.
Kemampuan Dasar Kernel
Tujuan utama kernel adalah untuk mengelola sumber daya komputer
dan memungkinkan program lain untuk menjalankan dan menggunakan sumber daya.
Biasanya, sumber daya terdiri atas:
- Central
Processing Unit. Ini adalah bagian paling sentral dari sebuah sistem
komputer, yang bertanggung jawab untuk menjalankan atau mengeksekusi
program-program. Kernel bertanggung jawab untuk memutuskan saat mana
saja dari banyak program yang sedang berjalan yang harus dialokasikan ke
prosesor atau prosesor (masing-masing yang biasanya hanya dapat menjalankan
satu program pada satu waktu)
- Memori
Komputer. Memori digunakan untuk menyimpan instruksi program kedua
dan data. Biasanya, keduanya harus hadir dalam memori dalam rangka
untuk mengeksekusi sebuah progam. Seringkali
beberapa program akan menginginkan akses ke memori, sering menuntut memori
lebih dari komputer telah tersedia. Kernel bertanggung jawab untuk
memutuskan yang memori setiap proses dapat menggunakan, dan menentukan apa
yang harus dilakukan bila memori tidak tersedia.
- Setiap
Input / Output (I / O) yang ada di komputer perangkat, seperti keyboard,
mouse, disk drive, printer, display, dll Kernel mengalokasikan permintaan
dari aplikasi untuk melakukan I / O ke perangkat yang sesuai (atau
sub-bagian dari perangkat, dalam kasus file pada disk atau jendela di
layar) dan memberikan metode yang nyaman untuk menggunakan perangkat
(biasanya diabstraksikan ke titik di mana aplikasi tidak perlu tahu detail
implementasi perangkat). Aspek utama yang diperlukan dalam manajemen
sumber daya adalah definisi dari domain eksekusi (address space) dan
mekanisme perlindungan yang digunakan untuk memediasi akses ke sumber daya
dalam sebuah domain. Kernel juga biasanya menyediakan metode untuk
sinkronisasi dan komunikasi antar proses (disebut inter-proses komunikasi
atau IPC). Kernel mungkin mengimplementasikan fitur ini sendiri, atau
bergantung pada beberapa proses berjalan untuk menyediakan fasilitas untuk
proses lainnya, meskipun dalam kasus ini harus menyediakan mekanisme IPC
untuk memungkinkan proses untuk mengakses fasilitas yang disediakan oleh
masing-masing lain. Akhirnya, kernel harus menyediakan menjalankan
program dengan metode untuk membuat permintaan untuk mengakses fasilitas
tersebut.
Perkembangan komputer telah membuat para arsitek sistem operasi
untuk ikut mengembangkan kernel sistem operasi. Kernel dibagi menjadi 4 bagian
yang memiliki desain berbeda, yaitu:
- Kernel
monolitik.
Kernel monolitik mengintegrasikan banyak fungsi di dalam kernel dan
menyediakan lapisan abstraksi perangkat keras secara
penuh terhadap perangkat keras yang berada di bawah sistem operasi.
- Mikrokernel. Mikrokernel
menyediakan sedikit saja dari abstraksi perangkat keras dan menggunakan
aplikasi yang berjalan di atasnya—yang disebut dengan server—untuk
melakukan beberapa fungsionalitas lainnya.
- Kernel
hibrida.
Kernel hibrida adalah pendekatan desain microkernel yang dimodifikasi.
Pada hybrid kernel, terdapat beberapa tambahan kode di dalam
ruangan kernel untuk meningkatkan performanya.
- Exokernel. Exokernel
menyediakan hardware abstraction secara minimal, sehingga program dapat
mengakses hardware secara langsung. Dalam pendekatan desain exokernel,
library yang dimiliki oleh sistem operasi dapat melakukan abstraksi yang
mirip dengan abstraksi yang dilakukan dalam desain monolithic
kernel.
Dari keempat kategori kernel yang disebutkan
diatas, kernel Linux termasuk kategori monolithic kernel. Kernel Linux berbeda
dengan sistem Linux. Kernel Linux merupakan sebuah perangkat lunak orisinil
yang dibuat oleh komunitas Linux, sedangkan sistem Linux, yang dikenal saat
ini, mengandung banyak komponen yang dibuat sendiri atau dipinjam dari proyek
pengembangan lain.
Kernel Linux pertama yang dipublikasikan adalah versi 0.01, pada tanggal 14 Maret 1991. Sistem berkas yang didukung hanya sistem berkas Minix. Kernel pertama dibuat berdasarkan kerangka Minix (sistem UNIX kecil yang dikembangkan oleh Andy Tanenbaum). Tetapi, kernel tersebut sudah mengimplementasi proses UNIX secara tepat.
Pada tanggal 14 Maret 1994 dirilis versi 1.0, yang merupakan tonggak sejarah Linux. Versi ini adalah kulminasi dari tiga tahun perkembangan yang cepat dari kernel Linux. Fitur baru terbesar yang disediakan adalah jaringan. Versi 1.0 mampu mendukung protokol standar jaringan TCP/IP. Kernel 1.0 juga memiliki sistem berkas yang lebih baik tanpa batasan-batasan sistem berkas Minix. Sejumlah dukungan perangkat keras ekstra juga dimasukkan ke dalam rilis ini. Dukungan perangkat keras telah berkembang termasuk diantaranya floppy-disk, CD-ROM, sound card, berbagai mouse, dan keyboard internasional. Dukungan juga diberikan terhadap modul kernel yang loadable dan unloadable secara dinamis.
Satu tahun kemudian dirilis kernel versi 1.2. Kernel ini mendukung variasi perangkat keras yang lebih luas. Pengembang telah memperbaharui networking stack untuk menyediakan support bagi protokol IPX, dan membuat implementasi IP lebih lengkap dengan memberikan fungsi accounting dan firewalling. Kernel 1.2 ini merupakan kernel Linux terakhir yang PC-only. Konsentrasi lebih diberikan pada dukungan perangkat keras dan memperbanyak implementasi lengkap pada fungsi-fungsi yang ada.
Pada bulan Juni 1996, kernel Linux 2.0 dirilis. Versi ini memiliki dua kemampuan baru yang penting, yaitu dukungan terhadap multiple architecture dan multiprocessor architectures. Kode untuk manajemen memori telah diperbaiki sehingga kinerja sistem berkas dan memori virtual meningkat. Untuk pertama kalinya, file system caching dikembangkan ke networked file systems, juga sudah didukung writable memory mapped regions. Kernel 2.0 sudah memberikan kinerja TCP/IP yang lebih baik, ditambah dengan sejumlah protokol jaringan baru. Kemampuan untuk memakai remote netware dan SMB (Microsoft LanManager) network volumes juga telah ditambahkan pada versi terbaru ini. Tambahan lain adalah dukungan internal kernel threads, penanganan dependencies antara modul-modul loadable, dan loading otomatis modul berdasarkan permintaan (on demand). Konfigurasi dinamis dari kernel pada run time telah diperbaiki melalui konfigurasi interface yang baru dan standar.
Semenjak Desember 2003, telah diluncurkan Kernel versi 2.6, yang dewasa ini (2008) telah mencapai patch versi 2.6.26.1 ( http://kambing.ui.edu/kernel-linux/v2.6/). Hal-hal yang berubah dari versi 2.6 ini ialah:
* Subitem M/K yang dipercanggih.
* Kernel yang pre-emptif.
* Penjadwalan Proses yang dipercanggih.
* Threading yang dipercanggih.
* Implementasi ALSA (Advanced Linux Sound Architecture) dalam kernel.
* Dukungan sistem berkas seperti: ext2, ext3, reiserfs, adfs, amiga ffs, apple macintosh hfs, cramfs, jfs, iso9660, minix, msdos, bfs, free vxfs, os/2 hpfs, qnx4fs, romfs, sysvfs, udf, ufs, vfat, xfs, BeOS befs (ro), ntfs (ro), efs (ro).
