Kernel merupakan program
komputer yang menjadi inti dari sebuah sistem operasi komputer,
dengan kontrol terhadap segala hal atas sistem tersebut. Pada kebanyakan
sistem, kernel merupakan salah satu dari program yang dijalankan dalam urutan
pertama saat komputer dinyalakan. Kernel menangani fungsi-fungsi selanjutnya
atas proses penyiapan komputer dari sejak komputer dinyalakan seperti menangani
layanan input/output dari program lain, menerjemahkanya ke dalam
instruksi-instruksi untuk dieksekusi oleh prosesor. Kernel juga menangani
perangkat kerja lain seperti memori, papan ketik, tetikus,
monitor, printer, speaker, serta perangkat-perangkat lainnya.
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.
Pada
dasarnya, untuk menjalankan sebuah komputer tidak harus menggunakan kernel
sistem operasi. Sebuah program dapat saja langsung dijalankan oleh komputer,
yaitu saat sebuah program komputer akan digunakan tanpa bantuan abstraksi
perangkat keras atau bantuan sistem operasi. Teknik ini umumnya digunakan oleh
komputer-komputer generasi awal, sehingga bila ingin berpindah dari satu
program ke program lain, pengguna harus mereset dan menjalankan kembali
program-program tersebut.
Beberapa desain kernel
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.Selanjutnya, para arsitek sistem operasi mengembangkan kernel sistem operasi yang pada akhirnya terbagi menjadi empat bagian yang secara desain berbeda, sebagai berikut:
·
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.
Kernel
monolitik
Pendekatan kernel
monolitik didefinisikan sebagai sebuah antarmuka virtual yang berada pada
tingkat tinggi di atas perangkat keras, dengan sekumpulan primitif
atau system call untuk mengimplementasikan layanan-layanan sistem
operasi, seperti halnya manajemen proses, konkurensi (concurrency),
dan manajemen memori pada modul-modul kernel yang berjalan di dalam
mode supervisor.
Meskipun
jika setiap modul memiliki layanan operasi-operasi tersebut terpisah dari modul
utama, integrasi kode yang terjadi di dalam monolithic kernel sangatlah kuat,
dan karena semua modul berjalan di dalam address space yang
sama, sebuah bug dalam salah satu modul dapat merusak
keseluruhan sistem. Akan tetapi, ketika implementasi dilakukan dengan benar,
integrasi komponen internal yang sangat kuat tersebut justru akan mengizinkan
fitur-fitur yang dimiliki oleh sistem yang berada di bawahnya dieksploitasi
secara efektif, sehingga membuat sistem operasi dengan monolithic
kernel sangatlah efisien—meskipun sangat sulit dalam pembuatannya.
Pada
sistem operasi modern yang menggunakan monolithic kernel, seperti
halnya Linux, FreeBSD, Solaris, dan Microsoft Windows,
dapat memuat modul-modul yang dapat dieksekusi pada saat kernel tersebut
dijalankan sehingga mengizinkan ekstensi terhadap kemampuan kernel sesuai
kebutuhan, dan tentu saja dapat membantu menjaga agar kode yang berjalan di
dalam ruangan kernel (kernel-space) seminim mungkin.
Di
bawah ini ada beberapa sistem operasi yang menggunakan Monolithic
kernel:
·
Kernel sistem operasi UNIX tradisional,
seperti halnya kernel dari sistem operasi UNIX keluarga BSD (NetBSD, BSD/I, FreeBSD,
dan lainnya).
·
Kernel sistem operasi GNU/Linux, Linux.
·
Kernel sistem operasi Windows (versi 1.x
hingga 4.x; kecuali Windows NT).
Mikrokernel
Pendekatan mikrokernel berisi
sebuah abstraksi yang sederhana terhadap hardware, dengan sekumpulan
primitif atau system call yang dapat digunakan untuk membuat sebuah
sistem operasi agar dapat berjalan, dengan layanan-layanan seperti
manajemen thread, komunikasi antar address space, dan
komunikasi antar proses. Layanan-layanan lainnya, yang biasanya disediakan
oleh kernel, seperti halnya dukungan jaringan, pada pendekatan microkernel justru
diimplementasikan di dalam ruangan pengguna (user-space), dan disebut
dengan server.
Server atau
disebut sebagai peladen adalah sebuah program, seperti halnya
program lainnya. Server dapat mengizinkan sistem operasi agar dapat
dimodifikasi hanya dengan menjalankan program atau menghentikannya. Sebagai
contoh, untuk sebuah mesin yang kecil tanpa dukungan jaringan, server jaringan
(istilah server di sini tidak dimaksudkan sebagai komputer
pusat pengatur jaringan) tidak perlu dijalankan. Pada sistem operasi
tradisional yang menggunakan monolithic kernel, hal ini dapat
mengakibatkan pengguna harus melakukan rekompilasi terhadap kernel, yang tentu
saja sulit untuk dilakukan oleh pengguna biasa yang awam.
Dalam
teorinya, sistem operasi yang menggunakan microkernel disebut
jauh lebih stabil dibandingkan dengan monolithic kernel, karena
sebuah server yang gagal bekerja, tidak akan menyebabkan kernel menjadi
tidak dapat berjalan, dan server tersebut akan dihentikan oleh
kernel utama. Akan tetapi, dalam praktiknya, bagian dari system statedapat
hilang oleh server yang gagal bekerja tersebut, dan biasanya untuk melakukan
proses eksekusi aplikasi pun menjadi sulit, atau bahkan untuk menjalankan
server-server lainnya.
Sistem
operasi yang menggunakan microkernel umumnya secara dramatis
memiliki kinerja di bawah kinerja sistem operasi yang menggunakan monolithic
kernel. Hal ini disebabkan oleh adanya overhead yang
terjadi akibat proses input/output dalam kernel yang ditujukan
untuk mengganti konteks (context switch) untuk memindahkan data antara
aplikasi dan server.
Beberapa
sistem operasi yang menggunakan microkernel:
·
IBM AIX, sebuah versi UNIX dari IBM
·
Amoeba, sebuah kernel yang dikembangkan untuk tujuan
edukasi
·
Kernel Mach, yang digunakan di dalam sistem
operasi GNU/Hurd, NexTSTEP, OPENSTEP, dan Mac OS/X
·
Minix, kernel yang dikembangkan oleh Andrew
Tanenbaum untuk tujuan edukasi
·
Symbian OS, sebuah sistem operasi yang populer
digunakan pada hand phone, handheld device, embedded device,
dan PDA Phone.
Kernel
hibrida
Kernel
hibrida aslinya adalah mikrokernel yang memiliki kode yang tidak
menunjukkan bahwa kernel tersebut adalah mikrokernel di dalam ruangan kernel-nya.
Kode-kode tersebut ditaruh di dalam ruangan kernel agar dapat
dieksekusi lebih cepat dibandingkan jika ditaruh di dalam ruangan user.
Hal ini dilakukan oleh para arsitek sistem operasi sebagai solusi awal terhadap
masalah yang terjadi di dalam mikrokernel: kinerja.
Beberapa
orang banyak yang bingung dalam membedakan antara kernel hibrida dan kernel
monolitik yang dapat memuat modul kernel setelah proses booting, dan
cenderung menyamakannya. Antara kernel hibrida dan kernel monolitik jelas
berbeda. Kernel hibrida berarti bahwa konsep yang digunakannya diturunkan dari
konsep desain kernel monolitik dan mikrokernel. Kernel hibrida juga memiliki
secara spesifik memiliki teknologi pertukaran pesan (message passing)
yang digunakan dalam mikrokernel, dan juga dapat memindahkan beberapa kode yang
seharusnya bukan kode kernel ke dalam ruangan kode kernel karena alasan
kinerja.
Di
bawah ini adalah beberapa sistem operasi yang menggunakan kernel hibrida:
·
BeOS, sebuah sistem operasi yang memiliki kinerja
tinggi untuk aplikasi multimedia.
·
Novell NetWare, sebuah sistem
operasi yang pernah populer sebagai sistem operasi
jaringan berbasis IBM PC dan kompatibelnya.
·
Microsoft Windows NT (dan semua
keturunannya).
·
Android
Exokernel
Sebenarnya,
Exokernel bukanlah pendekatan kernel sistem operasi yang umum—seperti halnya
microkernel atau monolithic kernel yang populer, melainkan sebuah struktur
sistem operasi yang disusun secara vertikal.
Ide
di balik exokernel adalah untuk memaksa abstraksi yang dilakukan oleh developer
sesedikit mungkin, sehingga membuat mereka dapat memiliki banyak keputusan
tentang abstraksi hardware. Exokernel biasanya berbentuk sangat kecil, karena
fungsionalitas yang dimilikinya hanya terbatas pada proteksi dan penggandaan
sumber daya.
Kernel-kernel
klasik yang populer seperti halnya monolithic dan microkernel melakukan
abstraksi terhadap hardware dengan menyembunyikan semua sumber daya yang berada
di bawah hardware abstraction layer atau di balik driver untuk hardware.
Sebagai contoh, jika sistem operasi klasik yang berbasis kedua kernel telah
mengalokasikan sebuah lokasi memori untuk sebuah hardware tertentu, maka
hardware lainnya tidak akan dapat menggunakan lokasi memori tersebut kembali.
Exokernel
mengizinkan akses terhadap hardware secara langsung pada tingkat yang rendah:
aplikasi dan abstraksi dapat melakukan request sebuah alamat memori spesifik
baik itu berupa lokasi alamat physical memory dan blok di dalam hard disk.
Tugas kernel hanya memastikan bahwa sumber daya yang diminta itu sedang berada
dalam keadaan kosong—belum digunakan oleh yang lainnya—dan tentu saja
mengizinkan aplikasi untuk mengakses sumber daya tersebut. Akses hardware pada
tingkat rendah ini mengizinkan para programmer untuk mengimplementasikan sebuah
abstraksi yang dikhususkan untuk sebuah aplikasi tertentu, dan tentu saja
mengeluarkan sesuatu yang tidak perlu dari kernel agar membuat kernel lebih
kecil, dan tentu saja meningkatkan performa.
Exokernel
biasanya menggunakan library yang disebut dengan libOS untuk melakukan
abstraksi. libOS memungkinkan para pembuat aplikasi untuk menulis abstraksi
yang berada pada level yang lebih tinggi, seperti halnya abstraksi yang
dilakukan pada sistem operasi tradisional, dengan menggunakan cara-cara yang
lebih fleksibel, karena aplikasi mungkin memiliki abstraksinya masing-masing.
Secara teori, sebuah sistem operasi berbasis Exokernel dapat membuat sistem
operasi yang berbeda seperti halnya Linux, UNIX, dan Windows dapat
berjalan di atas sistem operasi tersebut.
0 comments:
Post a Comment