Sasaran atau tujuan utama penjadwalan
proses optimasi kinerja menurut kriteria tertentu. dimana kriteria untuk
mengukur dan optimasi kerja penjadwalan antara lain :
- Agar semua pekerjaan memperoleh pelayanan yang adil (firness).
- Agar pemakaian prosesor dapat dimaksimumkan.
- Agar waktu tanggap dapat diminimumkan.
- Agar pemakaian sumber daya seimbang.
- Turn arround time, waktu sejak program masuk ke system sampai proses selesai.
- Efesien, proses tetap dalam keadaan sibuk tidak menganggur.
- Agar terobosan (thoughput) dapat dimaksimumkan.
Terdapat 3 tipe penjadwal berada secara
bersama-sama pada sistem operasi yang kompleks, yaitu:
- Penjadwal jangka pendek (short term scheduller), Bertugas menjadwalkan alokasi pemroses di antara proses-proses ready di memori utama Penjadwalan dijalankan setiap terjadi pengalihan proses untuk memilih proses berikutnya yang harus dijalankan.
- Penjadwal jangka menengah (medium term scheduller), Setelah eksekusi selama suatu waktu, proses mungkin menunda sebuah eksekusi karena membuat permintaan layanan masukan/keluaran atau memanggil suatu system call. Proses-proses tertunda tidak dapat membuat suatu kemajuan menuju selesai sampai kondisi-kondisi yang menyebabkan tertunda dihilangkan. Agar ruang memori dapat bermanfaat, maka proses dipindah dari memori utama ke memori sekunder agar tersedia ruang untuk proses-proses lain. Kapasitas memori utama terbatas untuk sejumlah proses aktif. Aktivitas pemindahan proses yang tertunda dari memori utama ke memori sekunder disebut swapping. Proses-proses mempunyai kepentingan kecil saat itu sebagai proses yang tertunda. Tetapi, begitu kondisi yang membuatnya tertunda hilang dan dimasukkan kembali ke memori utama dan ready.
- Penjadwal jangka panjang (long term scheduller), Penjadwal ini bekerja terhadap antrian batch dan memilih batch berikutnya yang harus dieksekusi. Batch biasanya adalah proses-proses dengan penggunaan sumber daya yang intensif (yaitu waktu pemroses, memori, masukan/keluaran), program-program ini berprioritas rendah, digunakan sebagai pengisi (agar pemroses sibuk) selama periode aktivitas job-job interaktif rendah.
Penjadwalan pada SIstem Operasi Solaris
Solaris menggunakan
penjadwalan berdasarkan prioritas dimana yang mempunyai prioritas yang lebih
tinggi dijalankan terlebih dahulu. Informasi tentang penjadwalan kernel thread
dapat dilihat dengan ps -elcL. Kernel Solaris adalah fully preemtible, artinya
semua thread, termasuk thread yang mendukung aktifitas kernel itu sendiri dapat
ditunda untuk menjalankan thread dengan prioritas yang lebih tinggi.
Kernel Solaris adalah
fully preemtible, artinya semua thread, termasuk thread yang mendukung
aktifitas kernel itu sendiri dapat ditunda untuk menjalankan thread dengan
prioritas yang lebih tinggi.
Solaris mengenal 170 prioritas yang
berbeda, 0-169. Terbagi dalam 4 kelas penjadwalan yang berbeda:
- Real time
(RT). Thread di kelas RT memiliki prioritas yang tetap dengan waktu
kuantum yang tetap juga. Thread ini memiliki prioritas yang tinggi
berkisar antara 100-159. Hal inilah yang membuat proses waktu nyata
memiliki response time yang cepat. Proses waktu nyata akan dijalankan
sebelum proses-proses dari kelas yang lain dijalankan sehingga dapat
menghentikan proses di system class. Pada umumnya, hanya sedikit proses
yang merupakan real time class.
- System
(SYS). Solaris menggunakan system class untuk menjalankan kernel
proses, seperti penjadwalan dan paging daemon. Threads di kelas ini adalah
"bound" threads, berarti bahwa mereka akan dijalankan sampai
mereka di blok atau prosesnya sudah selesai. Prioritas untuk SYS threads
berkisar 60-99. Sekali dibangun, prioritas dari sistem proses tidak dapat
dirubah. System class dialokasikan untuk kernel use( user proses berjalan
di kernel mode bukan di system class).
- Time Sharing
(TS). Time sharing class merupakan default class untuk proses dan
kernel thread yang bersesuaian. Time slices masing-masing proses dibagi
berdasarkan prioritasnya. Dalam hal ini, prioritas berbanding terbalik
dengan time slices-nya. Untuk proses yang prioritasnya tinggi mempunyai
time-slices yang pendek, dan sebaliknya proses dengan prioritas yang
rendah mempunyai time slices yang lebih panjang. Besar prioritasnya berada
antara 0-59. Proses yang interaktif berada di prioritas yang tinggi
sedangkan proses CPU-bound mempunyai prioritas yang rendah. Aturan
penjadwalan seperti ini memberikan response time yang baik untuk proses
yang interaktif, dan troughput yang baik untuk proses CPU-bound.
- Interactive
(IA). Kelas Interaktif menggunakan aturan yang sama dengan aturan
dengan kelas kelas time sharing, tetapi kelas ini memberikan prioritas
yang tinggi untuk aplikasi jendela ( windowing application) sehingga
menghasilkan performance yang lebih baik. Seperti TS, range IA berkisar
0-59.
Priority
|
Time quantum
|
Time quantum expired
|
return from sleep
|
0
|
200
|
0
|
50
|
5
|
200
|
0
|
50
|
10
|
160
|
0
|
51
|
15
|
160
|
5
|
51
|
20
|
120
|
10
|
52
|
25
|
120
|
15
|
52
|
30
|
80
|
20
|
53
|
35
|
80
|
25
|
54
|
40
|
40
|
30
|
55
|
45
|
40
|
35
|
56
|
50
|
40
|
40
|
58
|
55
|
40
|
45
|
58
|
59
|
20
|
49
|
59
|
Keterangan:
- Priority:
prioritas berdasarkan kelas untuk time sharing dan interactive class.
Nomor yang lebih tinggi menunjukkan prioritas yang lebih tinggi.
- Time
quantum: waktu kuantum untuk setiap prioritas. Dapat diketahui bahwa
fungsi waktu kuantum berbanding terbalik dengan prioritasnya.
- Time
quantum expired: Prioritas terbaru untuk thread yang telah habis time
slices-nya tanpa diblok. Dapat dilihat dari tabel bahwa thread yang
CPU-bound tetap mempunyai prioritas yang rendah.
- Return
from sleep: Prioritas thread yang kembali dari sleeping(misalnya menunggu
dari M/K). Seperti yang terlihat dari tabel ketika M/K berada di waiting
thread, prioritasnya berada antara 50-59, hal ini menyebabkan response
time yang baik untuk proses yang interaktif.
- Fixed
Priority (FX). Thread di kelas fixed priority memiliki range
prioritas (0-59) yang sama seperti di time-sharing class; tetapi,
prioritas mereka tidak akan berubah.
- Fair
Share Scheduler (FSS). Thread yang diatur oleh FSS dijadwalkan
berdasar pembagian sumber daya dari CPU yang tersedia dan dialokasikan
untuk himpunan proses-proses (yang dikenal sebagai project). FS juga
berkisar 0-59. FSS and FX baru mulai diimplementasikan di Solaris 9.
Multi Level Feedback Queue Scheduler
MLFQ pertamakali diperkenalkan oleh Corbato (1962) pada sistem yang dikenal dengan Compatible Time-Sharing System (CTSS) dan karyanya berikutnya pada Multics, menghantarkan ACM pada penghargaan “Turing Award”. MLFQ selalu dikembangkan setiap tahunnya untuk implementasinya pada sistem yang modern. Permasalahan yang mendasar dari MLFQ adalah untuk mencapai 2 hal. Pertama adalah mengoptimalisasi turn around-time, yang dilakukan dengan cara melakukan proses yang paling pendek, sayangnya OS tidak mengerti secara keseluruhan seberapa panjang suatu proses akan berjalan maka algoritma seperti SJF (atau STCF) diperlukan. Kedua, MLFQ ingin membuat sistem terasa lebih responsif dan interaktif oleh user dengan meminimalisasi response time, Sayangnya algoritma seperti round-robin memang akan meminimalisasi response time namun sangat buruk untuk menangani turn around-time. Bagaimana membangun suatu scheduler yang dapat mencapai kedua hal tersebut? Hal inilah yang ingin dicapai oleh Multi Level Feedback Queue Scheduler.
Pada bagian ini akan dibahas bagaimana dasar algoritma dibalik MLFQ. MLFQ membedakan prioritas dari proses berdasarkan observed behavior. Contohnya suatu proses berulang kali membebaskan CPU ketika menunggu input dari keyboard, MLFQ akan menetapkan proses tersebut pada prioritas tinggi untuk memperoleh interaktivitas, Contoh lain jika ada proses yang menggunakan CPU secara intensif untuk waktu yang lama maka MLFQ akan mengurangi prioritasnya. Dengan demikian MLFQ akan mencoba belajar tentang bagaimana suatu proses berjalan dan menggunakan history dari proses untuk memprediksi behavior dari setiap proses kedepannya. Ada 2 basic rule untuk MLFQ:
- Rule 1:
Jika prioritas (A) > Prioritas (B), A berjalan dan B tidak berjalan.
- Rule 2:
Jika prioritas (A) = Prioritas (B), A dan B berjalan di RR.
Pada
ilustrasi dibawah akan diperlihatkan bagaimana ada dua proses (A dan ) pada
prioritas tertinggi dan proses C berada ditengah dan proses D pada prioritas
terendah. Scheduler akan memanipulasi time-slice antara B dan A karena keduanya
merupakan prioritas tertinggi pada system.
Dengan
mempertimbangan proses yang membutuhkan interaktifitas (short running) dan
secara periodik
membebaskan CPU dan proses yang bersifat CPU-Bound
(long-running), berikut ini adalah algoritma untuk mengatur prioritas diantara
kedua jenis proses tersebut:
Rule 3: Ketika proses masuk dalam sistem, ditempatkan pada prioritas paling tinggi (queue teratas)
Rule 4a:
Jika pekerjaan menggunakan semua time slice ketika berjalan, prioritas
diturunkan (bergerak turun 1 level pada antrian queue)
Rule 4b:
Jika proses melepaskan CPU sebelum time slice, proses tersebut akan tetap pada
level prioritas yang sama.
Rule 5:
Setelah beberapa waktu, pindahkan semua process dalam sistem ke queue teratas.
Dengan cara demikian, MLFQ menawarkan solusi yang terbaik karena dapat mencapai performa yang optimal untuk proses yang bersifat short running interactive dan membagi secara adil untuk prose yang bersifat long running CPU intensive. Untuk alasan inilah banyak sistem termasuk BSD UNIX derivatives , Solaris, dan Windows NT menggunakan model MLFQ sebagai dasar schedulernya.