Dalam ilmu komputer, 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 diload dan dijalankan di atas 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.
== Beberapa desain kernel ==
Beberapa desain kernel sistem operasi
Sebuah kernel sistem operasi tidak harus ada
dan dibutuhkan untuk menjalankan sebuah komputer. Program dapat langsung
dijalankan secara langsung di dalam sebuah mesin (contohnya adalah 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. Selanjutnya, para pembuat program tersebut
membuat beberapa komponen program yang sengaja ditinggalkan di dalam komputer,
seperti halnya loader atau debugger, atau dimuat dari dalam ROM (Read-Only Memory). Seiring dengan perkembangan zaman komputer yang mengalami akselerasi
yang signifikan, metode ini selanjutnya membentuk apa yang disebut dengan
kernel sistem operasi.
Selanjutnya, para arsitek sistem operasi
mengembangkan kernel sistem operasi yang pada akhirnya terbagi menjadi empat
bagian yang secara desain berbeda, sebagai berikut:
·
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.
Daftar isi
Kernel
monolitik[sunting]
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).
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 prakteknya, bagian dari system state dapat 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 adanyaoverhead 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:
·
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:
·
Novell NetWare, sebuah sistem operasi yang pernah populer sebagai sistem
operasi jaringan berbasis IBM PC dan
kompatibelnya.
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 komentar:
Posting Komentar