Abstrak
Kernel adalah sebuah perangkat lunak yang membuat komunikasi / mediator antara aplikasi komputer dan perangkat keras, yang menyediakan pelayanan sistem seperti pengaturan memori untuk proses-proses yang sedang berjalan, pengaturan file-file, input-output terhadap dan dari suatu device dan masih banyak lagi fungsi tambahan yang lainnya. Intinya adalah kernel merupakan suatu penghubung (antara software dan hardware). Dalam makalah ini penulis mencoba untuk mengemukakan bagaimana cara kerja kernel sebagai sistem operasi, mengkompile ulang kernel untuk suatu kebutuhan, format dari kernel , serta berbagai dasar dasar kernel Linux sebagai aplikasi GPL (General Public License).
1. Pendahuluan
Kernel merupakan inti dari Operating System berisikan instruksi- instruksi yang bertindak sebagai mediator antara hardware dengan software. Kernel baru pada umumnya menawarkan dukungan yang lebih banyak terhadap berbagai jenis hardware,memiliki manajemen proses yang lebih baik, berjalan lebih baik dari versi sebelumnya, dan lebih stabil karena adanya perbaikan pada bug-bug yang ditemukan pada versi sebelumnya.
2. Format Kernel
Kernel sebagai jantungnya sistem operasi menyediakan format yang sesuai dengan kebutuhan anda. Sebelum kita memilih kernel sebaiknya kita dapat menentukan terlebih dahulu, kira-kira format kernel yang bagaimana yang sesuai dengan kebutuhan yang diinginkan. Sistem kernel ada berupa Modular dan Monolitik ,sebagai contoh jika sering gonta-ganti hardware, sistem kernel yang modular akan lebih cocok daripada sistem kernel yang builtin (monolitik). Kedua system ini mempunyai keuntungan dan kelebihan masing-masing,
2.1 Kernel Modular
Seperti pada kernel Linux mempunyai rancangan modular. Pada saat boot time, hanya minimal resident kernel yang di-load ke dalam memori. Ini di karenakan hanya modul-modul yang dibutuhkan saja serta di inginkan user yang akan diproses, sebuah modul kernel dapat secara dinamik di-load ke dalam memori. Kemudian secara periode spesifik modul tidak ingin di aktifkan maka modul dapat di hapus dari memori. Mekanisme dynamic loading ini dinamakan kmod. Dengan kata lain modul tidak akan di-load apabila tidak diinginkan dan modul akan di gunakan apabila di butuhkan. Salah satu keuntungan kernel yang bersifat modular, gonta-ganti hardware menjadi lebih mudah, karena tinggal menge-probe suatu modul, atau jika belum ada hanya tinggal mem-build satu modul saja. Kerugiannya adalah relatif rentan terhadapat masalah security, karena biasanya script kiddies memasukkan suatu modul ke dalam kernel (dengan harapan proses yang dimilikinya tidak diketahui oleh admin sistem yang bersangkutan)
2.2 Kernel buildin(Monolitik)
Dengan Kernel monolitik lebih baik dari segi security, sebuah kernel builtin (monolitik) akan relatif aman. Namun dari segi kemudahan, jika kita menambah atau mengganti suatu hardware, maka otomatis harus mengkompilasi ulang kernel .Namun demikian, skema kernel bagaimana yang lebih sesuai, itu bisa diklarifikasi sesuai kebutuhan dan implementasi sistem yang digunakan. Jika kernel monolitik ingin di jadikan modular, itu bisa dilakukan oleh dari kernel monolitik, dengan cara setelah konfigurasi ditetapkan dalam kernel monolitik dan di kompilasi maka dapat di ambil, bagian-bagian mana saja yang akan dipisahkan untuk dijadikan modul-modul.
3. Kompilasi Modul Kernel
Apabila kita akan menambahkan suatu modul ke dalam kernel maka kita dapat melakukan kompilasi ulang kernel. Modul merupakan bagian dari kode kernel yang tidak secara langsung dimasukan kedalam kernel. Modul dapat di masukan atau dihilangkan kedalam kernel yang sedang berjalan kapanpun diperlukan. Modul biasanya digunakan untuk mendukung pekerjaan yg tidak di gunakan terus-menerus. misal, jika kita tidak membutuhkan dukungan networking sepanjang waktu, seperti ppp,maka lebih baik ppp dijadikan sebagai modul. ketika kita memerlukannya (untuk koneksi ke isp) modul kita panggil dan setelah selesai koneksi modul dapat kita matikan. penerapan modul seperti ini akan mengurangi jumlah memori yang di butuhkan kernel sehingga mempercepat operasi.
3.1 Konfigurasi Kernel
Ada 3 command yang dapat digunakan untuk mengkonfigurasi kernel
1. config (text-based)
2. menuconfig (text-based menu)
3. xconfig (under X )
Diantara ketiga cara tersebut, yang biasa dipakai adalah “menuconfig“. karena memiliki tampilan yang lebih menarik dan lebih fleksibel dalam konfigurasi daripada cara pertama (config). Untuk memilih modul dalam menuconfig di tunjukan dengan tanda (dengan menekan tombol m pada keyboard), jika <> menandakan modul ini tidak digunakan. tanda < *> atau [*] (dengan menekan tombol y) digunakan untuk menyertakannya secara langsung kedalam kernel. Selama melakukan konfigurasi perubahan dapat dilakukan dengan ditandakan atau diberi tanda [*]. Apabila ada hal-hal tertentu yang memang benar-benar tidak dibutuhkan oleh konfigurasi komputer yang akan dipakai, tanda bintangnya di hapus (biar tidak terbawa disaat kompilasi berlangsung). Atau dapat melakukan penambahan penandaan sesuai kebutuhan, misal [*] untuk menggunakan modul, penandaan untuk kebutuhan networking dengan < *>.
Gambar1. Skema representatif antara “user space� dan “kernel space�
Dalam gambar 1 garis yang menghubungkan berbagai komponen dengan kernel ( dengan peralatan perangkat keras ) mengindikasikan bahwa setiap komponen secara lansung berinteraksi. Seperti contoh TCP/IP stack mengirim paket jaringan melalui code path TCP atau UDP , tetapi kedua tipe paket ini ini pada akhirnya di handel oleh IP layer. Dalam gambar, “VFS” berada pada Virtual Filesystem layer, yang secara ringkas serta detail ada pada tipe filesystem (seperti sebagai ext2fs dan ISO-9660, seperti yang di tampilkan) dari aplikasi user. Ini maksudnya adalah bahwa aplikasi ini butuh tidak mengetahui apa tipe filesystem yang di akses bila sebuah file dibuka, dibaca, ditulis dan seterusnya. Sedangkan “IPC” merupakan Interprocess Communication dan termasuk bermacam-macam mekanisme proses untuk “berkomunikasiâ€? satu sama lainnya dalam aktivitasnya. Komponen yang berlabel “SMP” adalah shared-memory multiprocessing yang mendukung Linux-kernel,yang digunakan sistem dengan multiple CPUs.
3.2 Utilitas Modul
Berikut ini adalah utilititas yang dapat gunakan pada system operasi linux dalam menangani modul
1. lsmod digunakan untuk melihat modul yang telah di load. contoh: # lsmod
2. depmod digunakan untuk membuat dependency list modul-modul yang ada kepada sistem. contoh: # depmod -a
Bila anda tidak menjalankan perintah ini anda tidak dapat me-load modul. perintah “depmod -a” menghasilkan file /lib/modules/2.0.xx/modules.dep yang berisi daftar keterkaitan modul terhadap modul yang lainnya.
3. modprobe digunakan untuk load/unload modul ;contoh: # modprobe -r msdos.o –>untuk unload modul (menghapus) ;contoh: # modprobe msdos.o –> untuk load modul command “modprobe msdos.o” bila dilihat dengan “lsmod” akan nampak seperti:
Module Pages Used by
msdos 2 0
fat 6 [msdos] 0
Perhatikan modul fat juga di-load, padahal perintah modprobe hanya diperintahkan untuk me-load modul msdos. hal ini terjadi karena adanya ketergantungan modul, modul msdos memerlukan modul fat.
File-file (modul) seperti msdos.o bisa dilihat di /lib/modules/2.0.xx/
4. kerneld merupakan daemon yang secara otomatis me-load dan unload modul. dengan menggunakan kerneld kita tidak perlu lagi menggunakan modprobe (untuk load/unload modul) secara manual karena daemon ini telah menanganinya secara otomatis. kita dapat mengecek apakah “kerneld” telah bekerja dengan baik.
4. Kernel Waktu Nyata
Banyak sistem embedded yang memiliki kebutuhan untuk berperilaku sebagai sebuah sistem waktu-nyata (real-time system). Pada sistem waktu nyata, waktu memegang peranan yang penting. Ketepatan kalkulasi atau kecermatan aksi tidak akan berarti apa-apa jika dilakukan pada saat yang keliru, atau “a late answer is a wrong answer�. Sistem waktu nyata lazim dijumpai di dunia industri. Sebagai contoh, pengatur arah peluru kendali mesti dapat mengoreksi laju dan arah terbangnya sehingga tetap menuju target. Keterlambatan sepersekian detik bisa mengakibatkan peluru tersebut nyasar ke ruang kosong. Dalam hal ini antisipasi secepat-cepatnya menjadi kunci akurasinya. Sebuah mesin otomatis untuk mengemas botol minuman harus dapat memasangkan tutup botol tepat kepada botolnya. Dalam sebuah sistem berjalan, ketepatan ini diatur dengan waktu. Dengan kata lain, jika waktu pemasangan tutup botol tidak tepat, hasilnya akan percuma karena botolnya tidak akan berada pada lokasi yang tepat. Salah satu hal penting yang diperhatikan pada saat merancang sistem waktu-nyata adalah deadline atau tenggat operasi yang diijinkan. Selama pemrosesan atau kalkulasi yang dilakukan dapat dipaksa untuk diselesaikan sebelum deadline tersebut lewat, maka sifat waktu-nyata sistem tersebut bisa dijamin. Sebagai ilustrasi, sebuah player MP3 harus dapat melakukan encoding musik format MP3 tersebut menjadi sinyal audio yang dinikmati melalui earphone atau speaker. Tentu saja, proses encoding tersebut harus lebih cepat dari alunan musiknya sendiri. Untuk kualitas HiFi, ini berarti encoding mesti mensuplai data audio sebanyak 44100 kali per detik. Bila memproses sepotong data audio menyita waktu lebih dari 1/44100 detik, musik tidak bisa didengar secara real-time. Bayangkan, bagaimana caranya menikmati sebuah lagu - yang durasi aslinya 4 menit – jika diputar selama 10 menit ? .Meskipun mulanya tidak dirancang sebagai sistem waktu nyata, Linux dapat ‘diakali’ sehingga dapat bekerja pada lingkungan yang mengharuskan persyaratan sistem waktu-nyata. Setidaknya, ada beberapa pendekatan yang bisa digunakan
Gambar 2. Hubungan Sub-Kernel dengan linux
Sub-kernels dibuat dengan 3 kategori: 1) patching sebuah kernel linux untuk menyediakan beberapa keterkaitan seperti penambahan fungsionalitas 2) modifikasi untuk menghandel interrupt 3) membuat loadable modules untuk menyediakan bagian API dan fungsionalitas.
Sub-kernels menyediakan sebuah API untuk digunakan oleh tugas real-time. APIs menyediakan urutan yang menyerupai POSIX, fungsi POSIX lainnya dan penambahan fungsi yang unik. Penggunaan sub-kernels dimaksudkan bahwa tugas real-time menggunakan APIs yang lebih familiar bagi para programmer Linux , tetapi mereka menerapkan secara terpisah dan terkadang berbeda.
Interrupt handling dimodifikasi oleh patching bagian utama kernel . patch-nya sendiri merubah fungsi, seperti contoh , patch digunakan biasanya untuk disable interrupts. Apabila kernel dan drivers dalam sub-tree linux di recompiled, mereka tidak secara aktual untuk menghentikan interrupts. Karena drivers di-compile terpisah dari header yang dimodifikasi untuk disable- interrupts dan menghalangi teknik real-time. Sebaiknya gunakan non standard code untuk sebuah interrupt-disabling. Instruksi Bahasa assembly mungkin bisa digunakan untuk menanganinya. Dalam prakteknya hal ini merupakan situasi yang tidak terelakan untuk menangani solusi real-time.
5. Kesimpulan
Kernel merupakan mediator penghubung antara Software dan Hardware. Kernel dapat di-recompile ulang sesuai dengan kebutuhan perangkat keras yang ingin kita pakai, untuk me-recompile ulang kernel dapat di pilih apakah ingin menggunakan kernel Modular atau kernel Mololitik, dalam pemakaiannya kernel bergantung kepada pengguna sendiri modul apa yang akan digunakan. Kernel juga sangat baik digunakan sebagai real-time yang menjembatani aplikasi dan kebutuhan waktu nyata yang interrupt-nya dapat di ubah dengan modifikasi Header-nya menggunakan kernel-source-tree.
6. Daftar Pustaka
1. Linus B.Torvalds,”Birthday”,disadur dari comp. os.minix.
2. Matt Welsh,”Linux Installation and Getting Started”,Linux LDP, 11 Februari 1995
3. FRiC,”Linux Hardware Compatibility HOWTO”, Linux LDP, 1 Juni 1995
4. http://makalah.virtualave.net/kernel.html
5. http://www.nks.net/linux-vm.html
6. http://www.fw.cz/mitr/microkernel.html
7. http://www.wikipedia.org/wiki/Kernel_(computers)
8. http://www.linuxdevices.com/articles/AT6320079446.html
9. http://www.linux-mag.com/1999-07/kernel_01.html
10. http://people.cakraweb.com/~asfik/writings/kompilasi-kernel-1.html#ss1.3