Kernel
Dalam sebuah perangkat komputer, kernel merupakan komponen inti
dari Sistem
Operasi yang berjalan dalam perangkat tersebut. Kernel bertugas
untuk mengatur
pembagian sumber daya sistem; komunikasi antara komponen
hardware dan software.
Kernel menghubungkan antara software aplikasi
dan hardware komputer.Ia
menyediakanabstraction layer pada level terendah untuk
resource-resource seperti
memori, prosesor dan perangkat I/O di mana suatu software
aplikasi harus mengontrol
resource-resource tersebut agar dapat berfungsi. Kernel mampu
menyediakan fasilitas
seperti ini bagi proses-proses aplikasi melalui mekanisme IPC (Inter
Process
Communication) dan System call.
Gambar 1. Kernel merupakan penghubung antara aplikasi dengan hardware
Gambar 2. Desain arsitektur komputer
sebagai rangkaian abstraction layer
Kebanyakan Sistem Operasi modern menggunakan konsep kernel ini.
Keberadaan
kernel merupakan konsekuensi dari desain sistem komputer
sebagai rangkaian
abstracion layer, di mana tiap layer bergantung pada fungsi
dari layer di bawahnya.
Jika kita tidak ingin menggunakan kernel, maka kita harus
mendesain semua software
dalam sistem tanpa menggunakan abstraction layer; akibatnya,
tentu saja akan
menambah kompleksitas desain.
Dalam banyak kasus, boot loader mulai mengeksekusi kernel dalam
mode
supervisor. Kernel kemudian menginisialiasi diri sendiri dan
memulai proses pertama.
Setelah itu, kernel tidak mengekseskusi secara langsung, tapi
hanya merespon kepada
even eksternal. Sebagai tambahan, kernel biasanya menyediakan
loop yang dieksekusi
ketika tidak ada proses yang tersedia untuk dijalankan; hal ini
biasnya disebut idle
process.
2. Fasilitas Dasar yang disediakan oleh
Kernel
Tujuan utama dari adanya kernel adalah untuk mengatur pembagian
sumbersumber
daya dan program mana yang boleh mengakses dan menggunakan
sumber daya
tersebut. Pada umumnya, sumber daya tersebut antara lain adalah
CPU, memori dan
Perangkat I/O
- Central Processing Unit (CPU). Sebagai bagian utama komputer,
CPU bertugas
dalam mengeksekusi program atau proses. Dalam hal ini, kernel
bertugas
menentukan setiap saat berapa banyak program yang harus
dialokasikan ke
CPU.
- Memori Komputer. Memori digunakan untuk menyimpan instruksi
program dan
juga data. Keduanya dibutuhkan oleh memori agar suatu program
dapat
dieksekusi. Biasanya beberapa program akan berusaha mengakses
meori,
bahkan seringkali meminta memori melebihi yang dimiliki
komputer. Di sinilah
kernel bertugas untuk menentukan porsi pemakaian memori yang
dapat dipakai
oleh tiap program dan menentukan apa yang akan dikerjakan
ketika tidak
cukup tersedia memori.
- Perangkat I/O. Beberapa perangkat I/O yang umumnya dipakai,
misalnya:
keyboard, mouse, monitor, Hard Disk, printer, scanner, dsb.
Kernel
melanjutkan request dari suatu aplikasi yang ingin melakukan
suatu aksi I/O
kepada perangkat yang sesuai dan menyediakan metode yang sesuai
untuk
memakai perangkat tersebut.
2.1 Pengaturan Proses
Tugas utama kernel adalah membantu eksekusi aplikasi dan
mendukungnya dengan
fitur seperti abstraksi hardware. Suatu proses mendefinisikan
seberapa porsi memori
yang dapat diakses oleh suatu aplikasi. Pengaturan proses
kernel harus
memperhitungkan perangkat yang dibawa oleh hardware untuk
perlindungan memori.
Untuk menjalankan aplikasi, sebuah kernel pertama kali harus
menyediakan space
address untuk aplikasi, lalu me-load file yang berisi kode
aplikasi ke dalam memori,
mempersiapkan stack untuk program dan percabangan ke lokasi
lain dalam program,
dan kemudian baru memulai eksekusi program.
Dalam sebuah sistem pre-emptive multitasking, kernel akan
memberi slot waktu
kepada setiap program dan berpindah dari satu proses ke proses
yang lain dengan
cepat hingga terlihat seperti proses-proses ini dieksekusi
secara bersamaan. Kernel
menggunakan algoritma penjadwalan utnuk menentukan proses mana
yang akan
dikerjakan berikutnya dan berapa lama waktu yang akan
diberikan. Algoritma yang
dipilih mungkin akan mengijinkan beberapa proses memiliki
prioritas yang lebih tinggi
daripada yang lain.
Umumnya kernel juga menyediakan cara agar proses-proses ini
dapat saling
berkomunikasi; hal ini dikenal sebagai Inter-Process
Communication (IPC). Pendekatan
utama IPC ini adalah untuk shared memory, message passing dan
remote procedure
call.
2.2 Pengaturan Memori
Kernel memiliki akses penuh ke memori sistem dan harus
memberikan ijin kepada
proses-proses untuk mengakses memori secara aman ketika
membutuhkan. Langkah
pertama yang dilakukan untuk melakukan hal ini di antaranya
adalah virtual
addressing. Virtual addressing menijinkan kernel untuk
menjadikan suatu alamat fisik
untuk tampil sebagai alamat lain, alamat virtual.
Space alamat virtual mungkin berbeda untuk masing-masing
proses; memori yang
diakses suatu proses pada alamat virtual tertentu mungkin
berbeda dengan memori
yang diakses proses lain pada alamat yang sama. Hal ini
menyebabkan tiap program
seakan menjadi satu-satunya program yang berjalan dan karenanya
dapat mencegah
terjadinya crash antar program.
Dalam kebanyakan sistem, alamat virtual suatu program dapat
berupa data yang
sebenarnya tidak ada dalam memori. Layer abstraksi yang
disediakan virtual
addressing mengijinkan Sistem Operasi untuk menggunakan
penyimpan data, seperti
Hard Disk, untuk menyimpan apa yang mestinya ada di memori utama
(RAM).
Akibatnya, Sistem Operasi dapat mengijinkan program untuk
memakai memori
melebihi memori fisik yang yang dimiliki oleh komputer.
Virtual addressing juga mengijinkan dibuatnya partisi vritual
memori di dua area
yang terpisah, satu dipakai oleh kernel (kernel space) dan yang
lain untuk aplikasi
(user space). Aplikasi tidak diijinkan oleh CPU untuk memakai
alamat kernel, yang
akhirnya hal ini akan mencegah agar aplikasi tidak merusak
kernel.
2.3 Pengaturan perangkat
Untuk menjalankan fungsinya, aplikasi membutuhkan akses ke
perangkatperangkat
yang terhubung ke komputer, yang dikontrol oleh kernel melalui
device
driver. Sebagai contoh, untuk menampilkan sesuatu di layar,
sebuah aplikasi harus
membuat request ke kernel. Kernel lalu akan melanjutkan request
tersebut ke driver
display yang kemudian akan bertanggung jawab mem-plot
karakter/pixel.
Kernel harus memelihara sejumlah perangkat yang tersedia.
Daftar perangkat ini
dapat berupa plug and play (dideteksi oleh Sistem Operasi saat
perangkat dijalankan),
di-configure oleh user, atau bahkan advance (misal dalam system
embedded di mana
kernel akan diubah jika hardware diubah).
2.4 System calls
Untuk mengakses layanan yang disediakan oleh kernel, biasanya
kernel
menyediakan library C atau API (Application Programming
Interface) yang selanjutnya
akan melibatkan fungsi kernel yang berhubungan.
Metode untuk melibatkan fungsi kernel berbeda-beda antar
kernel. Jika isolasi
memori sedang dipakai, tidak mungkin bagi proses untuk
memanggil kernel secara
langsung, karena hal itu merupakan pelanggaran aturan akses
kontrol dari prosesor.
Beberapa kemungkinan antara lain;
- Menggunakan interrupt software-simulated. Metode ini tersdia
dalam hampir
semua hardware, karenanya sangat umum.
- Menggunakan call gate. Call gate adalah address khusus di
mana alamat
tersebut ditambahkan dalam daftar yang disimpan dalam memori
kernel yang
diketahui prosesor. Ketika prosesor mendeteksi call ke lokasi
tersebut, prosesor
kemudian mengalihkannya ke lokasi target tanpa menyebabkan
pelanggaran
akses.
- Menggunakan instruksi system call khusus. Teknik ini
membutuhkan dukungan
hardware khusus, yang mana arsitektur umum (khususnya x86)
mungkin
kesulitan.
- Menggunakan memory-based queue. Sebuah aplikasi yang membuat
request
dalam jumlah besar tapi tidak perlu menunggu hasilnya dapat
menambahkan
detil request-nya ke suatu area memori yang di-scan secara
priodik oleh kernel
untuk menemukan request.
3. Beberapa desain Kernel
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.
Gambar3. Beberapa desain 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:
Monolithic Kernel. Monolithic kernel mengintegrasikan banyak fungsi di dalam
kernel dan menyediakan lapisan abstraksi perangkat keras secara
penuh
terhadap perangkat keras yang berada di bawah sistem operasi.
Microkernel. Microkernel menyediakan sedikit saja dari abstraksi perangkat
keras dan menggunakan aplikasi yang berjalan di atasnya—yang
disebut dengan
server—untuk melakukan beberapa fungsionalitas lainnya.
Hybrid kernel. Hybrid kernel 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.
3.1 Monolithic Kernel
Pendekatan monolithic kernel 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).
3.2 Microkernel
Pendekatan Microkernel 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 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
darisystem 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 adanya overhead yang terjadi akibat
proses input/output dalam
kernelyang 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.
3.3 Hybrid Kernel
Hybrid kernel aslinya adalah microkernel yang
memiliki kode yang tidak
menunjukkan bahwa kernel tersebut adalah microkernel 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
microkernel: kinerja.
Beberapa orang banyak yang bingung dalam membedakan antara Hybrid
kernel
danmonolithic kernel yang dapat memuat modul kernel
setelah proses booting, dan
cenderung menyamakannya. Antara hybrid kernel dan monolithic
kernel jelas
berbeda. Hybrid kernel berarti bahwa konsep yang digunakannya
diturunkan dari
konsep desain monolithic kernel dan microkernel. Hybrid
kernel juga memiliki secara
spesifik memiliki teknologi pertukaran pesan (message
passing) yang digunakan dalam
microkernel, 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
Hybrid kernels:
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).
3.4 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.
Daftar Pustaka :