Rabu, 11 Februari 2015


Penulis
AHMAD.FAUZI
13264010
Teknik Informatika
MIC Cikarang

Kernel

1. Pendahuluan
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 menyediakan abstraction 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.

Abstraction Layer adalah suatu cara untuk menyembunyikan  detail implementasi
dari sekumpulan fungsi. Model  software yang menggunakan  layer-layer abstraaction
seperti ini misalnya model OSI layer untuk  protokol  jaringan komputer serta library
grafik  pada OpenGL. 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  sumber - sumber 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 perangkat-
perangkat 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 requestdalam 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.

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
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 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.

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
dan  monolithic 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.




Tidak ada komentar:

Posting Komentar