23 Maret 2014

Apa itu Kernel?

Kernel adalah program yang dimuat saat boot yang berfungsi sebagai interface antara user-level program dengan hardware. Fungsinya seperti layaknya sistem operasi, menangani task switching dalam multitasking, menangani permintaan membaca atau menulis peralatan disk, melakukan tugas-tugas network serta mengatur penggunaan memori.
Secara teknis Linux hanyalah sebuah kernel. Program lain seperti kompiler, editorwindow manager dsb yang disertakan dalam paket hanyalah sebuah distribusi (RedHat, Slackware, SuSE dsb) yang melengkapi kernel menjadi sebuah sistem operasi yang lengkap.
Kadang-kadang sebuah kernel memerlukan konfigurasi agar bisa bekerja optimal pada sebuah mesin. Kernel yang ada pada distribusi RedHat 5.1 adalah versi 2.0.34. Kernel ini pada umumnya sudah bisa langsung bekerja dibanyak komputer tanpa perlu konfigurasi ulang lagi karena didalamnya sudah dimuat dukukungan untuk beberapa device. Konfigurasi ulang bisa dilakukan bila ada tambahan device baru yang belum dimuat atau dianggap muatannya terlalu banyak sehingga memakan banyak memori.
Setelah dilakukan konfigurasi, tahap berikut adalah melakukan kompilasi untuk mendapatkan kernel yang baru. Tahap ini memerlukan beberapa tool seperti kompiler dsb. RedHat telah menyediakan tool-tool tersebut dalam distribusinya.
Tahap kompilasi ini sangat potensial menimbulkan kesalahan dan kadang membuat frustrasi bila terus-menerus mengalami kegagalan. Sebelum mengalami musibah tersebut, mempersiapkanemergency boot disk adalah langkah yang tepat karena pada umumnya kesalahan akan mengakibatkan sistem mogok.

Konfigurasi Kernel

Source kernel yang sudah di download biasanya di unpack di direktori /usr/src/.
tar -zxvf linux-2.0.34.tar.gz
Perintah tersebut akan menguraikan file-file ke dalam direktori /usr/src/linux. Bila perlu sempatkan membaca file /usr/src/linux/README.
Konfigurasi dimulai dari direktori /usr/src/linux. Ada tiga cara:
  1. make config, berupa text base interface, cocok untuk user yang memiliki terminal model lama dan tidak memiliki seting termcap.
  2. make menuconfig, berupa text base juga tapi memiliki puldown menu berwarna, digunakan untuk user yang memiliki standar console.
  3. make xconfiginterface menggunakan layar grafik penuh, untuk user yang sudah memiliki X Window.
Bila berhasil layar Linux Kernel Configuration akan ditampilkan setelah perintah diatas dijalankan. Ada sekitar 14 menu pilihan dimulai dari Code maturity level options sampai Kernel hacking. Masing-masing memiliki sub-menu bila dipilih dan pilihan yes(y), module(m) atau no(no). Setiap pilihan untuk dimuat/kompile ke dalam kernel atau y akan memperbesar ukuran kernel nantinya. Jadi pilih feature-feature yang sering di gunakan yang di muat ke dalam kernel atau jadikan module untuk feature yang tidak sering di gunakan, misalnya PPP support.
kernkonf.jpg 327x251 (33 KB)
codemat.jpg 394x116 (24 KB)
Setelah semua pilihan dianggap sesuai, konfigurasi di simpan dengan memilih save sebelum keluar dari layar menu konfigurasi. Konfigurasi akan disimpan dalam sebuah file. Langkah selanjutnya adalah kompilasi atau dikenal dengan building the kernel.

Kompilasi Kernel

Siapkan kesabaran, terutama bagi user yang melakukan kompilasi kernel di mesin yang memiliki prosesor lambat dan sedikit memori. Kompilasi bisa memakan waktu 10 menit pada mesin dengan prosesor Pentium yang cepat hingga sampai 1,5 jam pada mesin Intel 386. Waktu kompilasi juga bertambah bila sistem digunakan untuk menjalankan proses lain pada saat itu.
Tetap di direktori /usr/src/linux, jalankan perintah:
make dep; make clean; make zImage
Perintah pertama, make dep, membaca file konfigurasi dan membentuk dependency tree. Proses ini mengecek apa yang di kompile dan apa yang tidak di kompile. Selanjutnya, make clean, menghapus seluruh jejak kompilasi yang pernah dilakukan sebelumnya. Ini memastikan agar tidak ada feature versi lama yang tersisa. Terakhir, make zImage, adalah kompilasi sesungguhnya. Bila tidak ada pesan kesalahan, akan terbentuk kernel yang terkompresi dan siap di instalasi.

Kompile Modul

Sebelum instalasi kernel, modul-modul yang berhubungan perlu di kompile juga dengan:
make modules
Pastikan tidak ada kesalahan.

Instalasi Kernel

Cek lokasi kernel, biasanya nama kernel dimulai dengan vmlinuz, biasanya ada di direktori /boot. Atau buka file /etc/lilo.conf untuk memastikannya. Setelah itu copy file /usr/src/linux/arch/i386/boot/zImage ke direktori /boot dengan nama lain contohnya:
cp /usr/src/linux/arch/i386/boot/zImage /boot/vmlinuz-2.0.34-baru
Catatan: bila tidak ditemukan file zImage, berarti masih ada kesalahan dalam kompilasi.
Sebelum kernel modul di instalasi, sebaiknya backup dulu modul lama. Modul ada di direktori /lib/modules, rename modul dengan nama lain:
cd /lib/modules
mv 2.0.34 2.0.34-backup
Keuntungan membackup modul ini adalah bila ternyata nanti modul baru tidak berjalan baik, maka modul lama bisa digunakan lagi dengan menghapus modul baru dan merename modulbackup menjadi 2.0.34 kembali.
Selanjutnya, kembali lagi ke /usr/src/linux dan jalankan perintah di bawah untuk menginstalasi modul ke kernel:
make modules_install
Akhirnya, edit /etc/lilo untuk menentukan kernel yang akan di pakai dan jangan lupa menjalankan lilo:
lilo
Selesai, reboot sistem dan lihat hasilnya.

Patch Kernel

Setiap di keluarkannya kernel versi baru juga di keluarkan sebuah file patch. File patch ini jauh lebih kecil dari file source kernel sehingga jauh lebih cepat bila digunakan untuk upgrade kernel.
File patch hanya bekerja untuk mengupgrade satu versi kernel dibawahnya. Misalnya, versi kernel 2.0.27 hanya bisa diupgrade dengan file patch 2.0.28 menjadi kernel 2.0.28. Begitu pula bila kernel 2.0.27 tersebut ingin diupgrade menjadi kernel 2.0.30 maka diperlukan file patch 2.0.28, 2.0.29 dan 2.0.30. Perhatikan, kernel 2.0.27 tidak bisa langsung dipatch menjadi 2.0.30 tanpa melalui file patch 2.0.28, 2.0.29 dan 2.0.30.
File-file patch tersebut juga tersedia pada direktori yang sama di FTP dan Website yang biasa menyediakan source kernel.
File-file patch tersedia dalam format .gz, setelah di download, pindahkan file patch ini ke direktori /usr/src. Pastikan source kernel versi lama sudah di instalasi juga. Pada direktori yang lama jalankan perintah:
gzip -cd patch-2.0.28.gz | patch -p0
Setelah itu periksa apakah ada file yang berakhiran .rej di direktori /usr/src/linux. Bila ditemukan file seperti itu maka patch yang dilakukan tidak berhasil, periksa kembali apakah file patch yang dipakai sudah benar. Beberapa file patch menurut berita kadang-kadang memang tidak sesuai untuk sebuah source kernel, terutama source kernel yang telah di modifikasi oleh developeruntuk kepentingan distribusi Linux. Saya tidak tahu pasti mengenai hal ini.

Thread
  • Thread merupakan unit dasar dari penggunaan CPU.
  • Thread terdiri dari Thread_ID, program counter, register set, dan stack.
  • Thread juga sering disebut lightweight process.
  • Perbedaan antara proses dengan thread tunggal dengan proses dengan thread yang banyak adalah proses dengan thread yang banyak dapat mengerjakan lebih dari satu tugas pada satu satuan waktu.
THREAD DALAM PROCESS











CONTOH MULTI-THREADING
  • Banyak perangkat lunak yang berjalan pada PC modern dirancang secara multi-threading
  • Contohnya sebuah web browser mempunyai thread untuk menampilkan gambar atau tulisan sedangkan thread yang lain berfungsi sebagai penerima data dari network. 
  • Situasi dimana sebuah aplikasi diperlukan untuk menjalankan beberapa tugas yang serupa
  • Contohnya adaah sebuah web server yang dapat mempunyai ratusan klien yang mengaksesnya secara concurrent
Keuntungan Thread
  1. Responsi: Membuat aplikasi yang interaktif menjadi multithreading dapat membuat sebuah program terus berjalan meskipun sebagian dari program tersebut diblok atau melakukan operasi yang panjang, karena itu dapat meningkatkan respons kepada pengguna. Sebagai contohnya dalam web browser yang multithreading, sebuah thread dapat melayani permintaan pengguna sementara thread lain berusaha menampilkan image.
  2. Berbagi sumber daya: thread berbagi memori dan sumber daya dengan thread lain yang dimiliki oleh proses yang sama. Keuntungannya adalah mengizinkan sebuah aplikasi untuk mempunyai beberapa thread yang berbeda dalam lokasi memori yang sama.
  3. Ekonomi: dalam pembuatan sebuah proses banyak dibutuhkan pengalokasian memori dan sumber daya. Alternatifnya adalah dengan penggunaan thread, karena thread berbagi memori dan sumber daya proses yang memilikinya maka akan lebih ekonomis untuk membuat dan context switch thread. Akan susah untuk mengukur perbedaan waktu antara proses dan thread dalam hal pembuatan dan pengaturan, tetapi secara umum pembuatan dan pengaturan proses lebih lama dibandingkan thread. Pada Solaris, pembuatan proses lebih lama 30 kali dibandingkan pembuatan thread, dan context switch proses 5 kali lebih lama dibandingkan context switch thread.
  4. Utilisasi arsitektur multiprocessor: Keuntungan dari multithreading dapat sangat meningkat pada arsitektur multiprocessor, dimana setiap thread dapat berjalan secara pararel di atas processor yang berbeda. Pada arsitektur processor tunggal, CPU menjalankan setiap thread secara bergantian tetapi hal ini berlangsung sangat cepat sehingga menciptakan ilusi pararel, tetapi pada kenyataannya hanya satu thread yang dijalankan CPU pada satu-satuan waktu (satu-satuan waktu pada CPU biasa disebut time slice atau quantum).
User vs Kernel Threads
  • User thread didukung di atas kernel dan diimplementasi oleh thread library pada user level
  • Library menyediakan fasilitas untuk pembuatan thread, penjadualan thread, dan managemen thread tanpa dukungan dari kernel
  • Kelemahannya yaitu apabila kernelnya merupakan thread tunggal maka apabila salah satu user-level thread menjalankan blocking system call maka akan mengakibatkan seluruh proses diblok walau pun ada thread lain yang dapat jalan dalam aplikasi tersebut.
  • Kernel thread didukung langsung oleh sistem operasi
  • Pembuatan, penjadualan, dan managemen thread dilakukan oleh kernel pada kernel space.
  • Pembuatan dan pengaturan kernel thread lebih lambat dibandingkan user thread
  • Keuntungannya adalah jika sebuah thread menjalankan blocking system call maka kernel dapat menjadualkan thread lain di aplikasi untuk melakukan eksekusi
  • Keuntungan lainnya adalah pada lingkungan multiprocessor, kernel dapat menjadual thread-thread pada processor yang berbeda.
  • Contoh sistem operasi yang mendukung kernel thread adalah Windows NT, Solaris, Digital UNIX. 
Multithreading Models

Many-to-One Model 
  • memetakan banyak user-level thread ke satu kernel thread
  • Pengaturan thread dilakukan di user space
  • Efisien tetapi ia mempunyai kelemahan yang sama dengan user thread

tidak dapat berjalan secara pararel pada multiprocessor

One-to-One Model
  • memetakan setiap user thread ke kernel thread
  • menyediakan lebih banyak concurrency dibandingkan Many-to-One model
  • Keuntungannya sama dengan keuntungan kernel thread
  • Kelemahannya setiap pembuatan user thread membutuhkan pembuatan kernel thread yang dapat menurunkan performa dari sebuah aplikasi
  • Sistem operasi yang mendukung One-to-One model adalah Windows NT dan OS/2 
Multithreading Models
Many-to-Many Model

  • multiplexes banyak user-level thread ke kernel thread yang jumlahnya lebih kecil atau sama banyaknya dengan user-level thread
  • Jumlah kernel thread dapat spesifik untuk sebagian aplikasi atau sebagian mesin
  • Developer dapat membuat user thread sebanyak yang diperlukan, dan kernel thread yang bersangkutan dapat bejalan secara pararel pada multiprocessor.
  • Ketika suatu thread menjalankan blocking system call maka kernel dapat menjadualkan thread lain untuk melakukan eksekusi.
  • Sistem operasi yang mendukung model ini adalah Solaris, IRIX, dan Digital UNIX. 
Thread Pools
Pada web server yang multithreading ada dua masalah yang timbul:
  1. Ukuran waktu yang diperlukan untuk menciptakan thread untuk melayani permintaan yang diajukan terlebih pada kenyataannya thread dibuang ketika ia seketika sesudah ia menyelesaikan tugasnya.
  2. Pembuatan thread yang tidak terbatas jumlahnya dapat menurunkan performa dari sistem.

Solusinya adalah dengan penggunaan Thread Pools :
Membuat beberapa thread pada proses startup dan menempatkan mereka ke pools, dimana mereka duduk diam dan menunggu untuk bekerja.
Ketika server menerima permintaan maka ia akan membangunkan thread dari pool dan jika thread tersedia maka permintaan tersebut akan dilayani.
Ketika thread sudah selesai mengerjakan tugasnya maka ia kembali ke pool dan menunggu pekerjaan lainnya.

Keuntungan thread pool:
Biasanya lebih cepat untuk melayani permintaan dengan thread yang ada dibanding dengan menunggu thread baru dibuat.
  1. Thread pool membatasi jumlah thread yang ada pada suatu waktu. Hal ini pentingpada sistem yang tidak dapat mendukung banyak thread yang berjalan secara concurrent.
  2. Jumlah thread dalam pool dapat tergantung dari jumlah CPU dalam sistem, jumlah memori fisik, dan jumlah permintaan klien yang concurrent.
Cancellation
Thread cancellation adalah sebuah tugas untuk memberhentikan theard sebelum thread tersebut selesai. 
Thread yang akan diberhentikan disebut target thread.
Dua skenario thread cancellation :
Asynchronous cancellation :Satu thread memberhentikan target thread seketika itu juga.
Deferred cancellation : Target thread secara periodik dapat mengecek apakah ia harus berhenti, skenario ini memberikan kesempatan kepada target thread untuk memberhetikan dirinya sendiri.
Signal Handling (1)
Sebuah sinyal digunakan di sistem UNIX untuk memberitahu sebuah proses kalau peristiwa tertentu sedang terjadi.
Pola sinyal :
Sebuah sinyal diaktifkan oleh munculnya suatu peristiwa.
Sinyal yang diaktifkan dikirim ke proses.
Sesudah dikirim, sinyal tersebut harus ditangani.

Setiap sinyal bisa ditangani oleh salah satu dari 2 handler yang ada :
A default signal handler.
A user defined signal handler.

Beberapa pilihan kemana sebuah sinyal seharusnya dikirim :
  1. Mengirim sinyal ke thread yang dituju.
  2. Mengirim sinyal ke semua thread dalam proses.
  3. Mengirim sinyal ke thread tertentu dalam proses.
  4. Menugaskan thread khusus untuk menerima semua sinyal yang ditujukan pada proses tersebut. 

Round Robin Scheduling
Penjadwalan Round Robin (RR) ini dilakukan secara bergiliran berdasarkan antrian, prosessor mengerjakan sesaat setiap proses berturut-turut. Proses yang telah dieksekusi prosessor dan belum selesai akan kembali ke antrian terakhir yang ada pada saat itu sehingga penggiliran untuk eksekusi tersebut seperti gelang.

Semua proses di anggap penting dan diberi sejumlah waktu pemroses yang disebut kwanta (quantum) atau time-slice dimana prose situ berjalan.
  • Konsep dasar algoritma ini menggunakan time sharing
  • Pada dasarnya, prinsip hampir sama dengan FCFS, tapi bersifat preemptive
  • proses akan dibatasi waktu prosesnya, yang disebut quantum time
  • Keuntungan algoritma round robin :
Adanya keseragaman waktu
  • Kelemahannya :
Jika quantum time sangat besar à switching yang terjadi akan semakin sedikit (seperti FCFS)
Jika quantum time terlalu kecil à switching yang terjadi akan semakin banyak, sehingga banyak waktu yang terbuang
  • Ketentuan Algoritma Round Robin adalah :
Jika proses memiliki CPU Burst < Quantum Time, maka proses akan melepaskan CPU, jika telah selesai digunakan à CPU dapat segera digunakan oleh proses selanjutnya.
Jika proses memiliki CPU Burst > Quantum Time, maka proses tersebut akan dihentikan jika sudah mencapai quantum time dan selanjutnya mengantri kembali pada posisi tail queue (ekor dari ready queue), CPU kemudian menjalankan proses berikutnya.
Jika quantum time belum habis dan proses menunggu suatu kejadian (selesainya operasi I/O), maka proses menjadi blocked dan CPU dialihkan ke proses lain. 
Contoh Round Robin Scheduling :



KESIMPULAN
Penjadwalan proses adalah urutan kerja yang dilakukan oleh system operasi,ini sangat diperlukan untuk kelangsungan system operasi dalam menentukan proses yang akan dieksekusi.
Berdasarkan segi waktu penyelesaian proses, penjadwalan proses preemptive dinilai lebih efektif, karena dalam penjadwalan metode ini proses-proses dengan waktu proses yang lebih pendek akan selesai lebih dulu, karena walaupun terdapat proses dengan waktu proses yang lama berada pada antrian pertama, sedangkan ada proses di antrian kedua dengan waktu proses lebih pendek, maka proses pada antrian pertama dapat disela untuk mengerjakan proses diantrian kedua terlebih dahulu hingga selesai, dengan asumsi penjadwalan preemptive tersebut tidak berprioritas. Beberapa penjadwalan proses yang telah divisualisasikan mempunyai kesamaan dalam menyelesaikan sebuah proses yang berada di dalam antrian. Proses dengan waktu proses terpendek akan diselesaikan terlebih dahulu, setelah itu baru proses-proses lainnya yang mempunyai waktu proses lebih lama.