Algoritma Penjadualan
3.8. Algoritma Penjadualan
Proses yang belum mendapat jatah alokasi dari CPU akan mengantri di ready queue. Di sini algoritma diperlukan untuk mengatur giliran proses-proses tersebut. Berikut ini adalah algoritmanya
3.8.1. First-Come, First-Served
Algoritma ini merupakan algoritma yang paling sederhana. Dari namanya, kita dapat menebak kalau algoritma ini akan mendahulukan proses yang lebih dulu datang. Jadi proses akan mengantri sesuai waktu kedatangannya.
Kelemahan algoritma ini adalah waiting time rata-rata yang cukup lama. Sebagai contoh ; ada tiga algoritma yang datang berturut-turut. Algoritma pertama mempunyai burst time 7 milidetik, sedangkan yang kedua dan ketiga masing-masing 5 milidetik dan 1 milidetik. Waiting time proses pertama ialah 0 milidetik (proses pertama tak perlu menunggu). Waiting time proses kedua ialah 7 milidetik (menunggu proses pertama), dan yang ketiga
12 milidetik (menunggu proses pertama dan kedua). Jadi waiting time rata-rata sebesar (0+7+12)/3 = 6,33 milidetik. Bandingkan jika proses datang dengan urutan terbalik (yang terakhir datang pertama dan kebalikannya). Waiting time rata-ratanya hanya sebesar (0+1+6)/3 = 2,33 milidetik (jauh lebih kecil). Bayangkan selisih yang mungkin terjadi jika beda burst time tiap proses sangat besar.
Munculah istilah convoy effect, dimana proses lain menunggu satu proses besar mengembalikan sumber daya CPU. Tentu kemungkinan utilisasi CPU akan lebih baik jika proses yang lebih singkat didahulukan.
Algoritma ini nonpreemptive. Setelah CPU dialokasikan ke suatu proses, hanya proses tersebut yang dapat mengembalikannya.
3.8.2. Shortest-Job First
Algoritma ini mempunyai cara yang berbeda untuk mengatur ntrian di ready queue. Proses diatur menurut panjang CPU burst berikutnya (lebih tepatnya shortest next CPU burst).
Waiting time rata-rata dari algoritma ini sangat kecil, sehingga layak disebut optimal. Perbandingan algoritma ini dengan algoritma pertama telah kita lihat di bagian sebelumnya (shortest job first), di mana proses yang memiliki CPU burst terkecil jika didahulukan akan mengurangi waiting time rata-ratanya. Kelemahan algoritma ini yaitu kita tak pernah tahu secara pasti panjang CPU burst proses berikutnya. Kita hanya dapat mengira-ngira nilainya.
Algoritma ini dapat merupakan preemptive atau nonpreemptive. Jika preemptive, jika ada proses datang dengan sisa CPU burst yang lebih kecil daripada yang sedang dieksekusi, maka proses tersebut akan menggantikan proses yang sedang dieksekusi. Contoh: 2 proses datang bersamaan dengan CPU burst masing-masing sebesar 4 dan 5 milidetik. Algoritma ini akan mengalokasikan CPU untuk proses yang memiliki CPU burst 4 milidetik, sementara satu lagi akan menunggu di ready queue. Baru 1 milidetik proses pertama dieksekusi, ada proses lain datang dengan besar CPU burst 2 milidetik. Alokasi CPU segera diberikan pada proses baru tersebut karena mempunyai sisa waktu terkecil yaitu 2 milidetik(proses yang dieksekusi mempunyai sisa waktu 3 milidetik karena telah mendapat alokasi CPU selama 1 milidetik), dan kedua proses yang datang pertama kembali menunggau di ready queue. Bandingkan waiting time rata-ratanya, yang nonpreemptive sebesar (0+4+9)/3 = 4,33 milidetik, dan yang preemptive sebesar ((3-1)+6+(1-1))/3 = 2,66 milidetik.
3.8.3. Priority
Algoritma ini memberikan skala prioritas kepada tiap proses. Proses yang mendapat prioritas terbesar akan didahulukan. Skala diberikan dalam bentuk integer. Beberapa sistem menggunakan integer kecil untuk prioritas tertinggi, beberapa sistem menggunakan integer besar.
Algoritma ini dapat preemptive maupun nonpreeemptive. Jika preemptive maka proses dapat diinterupsi oleh proses yang prioritasnya lebih tinggi.
Kelemahan dari algoritma ini adalah proses dengan prioritas kecil tidak akan mendapat jatah CPU. Hal ini dapat diatasi dengan aging, yaitu semakin lama menunggu, prioritas semakin tinggi.
3.8.4. Round-Robin
Algoritma ini menggilir proses yang ada di antrian. Proses akan mendapat jatah sebesar time quantum. Jika time quantum -nya habis atau proses sudah selesai CPU akan dialokasikan ke proses berikutnya. Tentu proses ini cukup adil karena tak ada proses yang diprioritaskan, semua proses mendapat jatah waktu yang sama dari CPU (1/n), dan tak akan menunggu lebih lama dari (n-1)/q.
Algoritma ini sepenuhnya bergantung besarnya time quantum. Jika terlalu besar, algoritma ini akan sama saja dengan algoritma first-come first-served. Jika terlalu kecil, akan semakin banyak peralihan proses sehingga banyak waktu terbuang.
3.8.5. Multilevel Queue
Algoritma ini mengelompokkan antrian dalam beberapa buah antrian. Antrian-antrian tersebut diberi prioritas.Antrian yang lebih rendah tak boleh mendapat alokasi selama ada antrian tinggi yang belum kebagian. Tiap antrian boleh memiliki algoritma yang berbeda. Kita juga dapat menjatah waktu CPU untuk tiap antrian. Semakin tinggi tingkatannya, semakin besar jatah waktu CPU-nya.
3.8.6. Multilevel Feedback Queue
Algoritma ini mirip sekali dengan algoritma Multilevel Queue. Perbedaannya ialah algoritma ini mengizinkan proses untuk pindah antrian. Jika suatu proses menyita CPU terlalu lama, maka proses itu akan dipindahkan ke antrian yang lebih rendah. Ini menguntungkan proses interaksi, karena proses ini hanya memakai waktu CPU yang sedikit. Demikian pula dengan proses yang menunggu terlalu lama. Proses ini akan dinaikkan tingkatannya.
Biasanya prioritas tertinggi diberikan kepada proses dengan CPU burst terkecil, dengan begitu CPU akan terutilisasi penuh dan I/O dapat terus sibuk. Semakin rendah tingkatannya, panjang CPU burst proses juga semakin besar.
Algoritma ini didefinisikan melalui beberapa parameter, antara lain: • Jumlah antrian
• Algoritma penjadualan tiap antrian • Kapan menaikkan proses ke antrian yang lebih tinggi • Kapan menurunkan proses ke antrian yang lebih rendah • Antrian mana yang akan dimasuki proses yang membutuhkan Dengan pendefinisian seperti tadi membuat algoritma ini sering dipakai. Karena algoritma ini mudah
dikonfigurasi ulang supaya cocok dengan sistem. Tapi untuk mengatahui mana penjadual terbaik, kita harus mengetahui nilai parameter tersebut.