: kecepatan rata-rata kedatangan proses baru Formula Little ini valid untuk semua algoritma penjadwalan dan distribusi kedatangan proses.
Sebagai contoh, jika kita mengetahui rata-rata 7 proses datang setiap detik, dan normalnya ada 14 proses dalam antrian, maka kita bisa menghitung waktu tunggu rata-rata proses dalam antrian W
sebagai berikut: = 7 prosesdetik n= 14 proses maka W= n
= 147= 2 detik per proses. Queueing analysis ini bisa digunakan untuk membandingkan algoritma penjadwalan, tapi memiliki
beberapa keterbatasan. Jenis algoritma distribusi yang bisa ditangani model ini terbatas dan pada algoritma atau distribusi yang kompleks, akan sulit untuk menggunakan model ini. Karena
perhitungannya akan sangat rumit dan tidak realistis. Selain itu, kita juga perlu menggunakan asumsi yang mungkin saja tidak akurat. Model ini seringkali hanya memberi perkiraan dan
keakuratan hasil perhitungannya dipertanyakan.
16.4. Simulasi
Untuk mendapatkan hasil yang lebih akurat dari evaluasi algoritma penjadwalan, bisa digunakan simulasi. Simulasi ini dibuat dengan memprogram sebuah model dari sistem komputer.
Simulatornya memiliki variabel yang merepresentasikan clock. Jika nilai dari variabel ini bertambah, simulator mengubah status dari sistem untuk menggambarkan aktivitas proses, device,
dan penjadwal. Selama simulatornya berjalan, data-data statistik mengenai performance algoritma dikumpulkan dan dicetak.
Untuk menjalakan simulator ini diperlukan data yang merepresentasikan aktivitas sistem seperti proses, CPU burst, dan lain-lain. Biasanya data ini dibuat dengan random-number generator dengan
memanfaatkan distribusi probabilitas seperti distribusi Poisson, eksponensial, dan lain-lain. Tapi menjalankan simulasi dengan data yang dihasilkan dari distribusi ini bisa saja tidak akurat, karena
dari distribusi hanya diketahui frekuensi atau berapa kali suatu kejadian muncul. Distribusi ini tidak memperhatikan urutan kejadiannya. Untuk mengatasi masalah itu, digunakan trace tapes .
Cara membuat trace tapes adalah dengan mengamati dan merekam aktivitas sistem yang sesungguhnya. Dengan ini, kita bisa menjalankan simulator dengan urutan data dari events yang
sebenarnya. Cara ini cukup efektif dan bisa memberikan hasil yang akurat.
Berikut ini adalah ilustrasi evaluasi algoritma penjadwalan dengan simulasi:
Gambar 16.2. Evaluasi Algoritma Penjadwalan dengan Simulasi
Urutan eksekusi proses direkam dengan trace tapes, kemudian simulator menjalankan simulasi penjadwalan proses-proses tersebut dengan berbagai macam algoritma penjadwalan. Simulasi ini
kemudian menghasilkan catatan mengenai performance dari setiap algoritma penjadwalan tersebut. Dengan membandingkan catatan performance itu, pengguna bisa mencari algoritma penjadwalan
111
yang paling baik. Meskipun memberikan hasil yang akurat, simulasi ini bisa saja memerlukan waktu yang besar dan
biaya yang mahal. Trace tapes juga membutuhkan ruang penyimpanan yang besar di memori. Mendesain, memprogram, dan men-debug simulator juga adalah sebuah pekerjaan yang besar.
16.5. Implementasi
Simulasi bahkan memiliki keakuratan yang terbatas. Satu-satunya cara yang paling akurat untuk mengevaluasi algoritma penjadwalan adalah dengan langsung membuat programnya, masukkan ke
dalam sistem operasi, dan lihat bagaimana ia bekerja. Dengan ini, algoritma yang akan dievaluasi ditempatkan dan dijalankan di sistem yang sebenarnya.
Implementasi ini membutuhkan biaya yang besar. Selain mahal, kesulitannya antara lain: • Memprogram algoritmanya.
• Memodifikasi sistem operasi agar bisa mendukung algoritma tersebut. • Reaksi pengguna akan sistem operasi yang terus berubah secara konstan karena pengguna tidak
peduli dengan pengembangan sistem operasi. Pengguna hanya ingin proses yang dijalankannya dapat diselesaikan dengan cepat.
• Environment dimana program dijalankan akan berubah. Perubahan environment ini bukan hanya perubahan wajar sebagaimana yang terjadi jika program
baru ditulis dan tipe-tipe masalah berubah, tapi juga perubahan performance dari penjadwal. Pengguna dalam hal ini programmer bisa memodifikasi programnya untuk memanipulasi
penjadwalan.
Misalnya sebuah komputer dikembangkan dengan pengklasifikasian proses menjadi interaktif dan non-interaktif berdasarkan jumlah terminal MK yang digunakan proses. Jika dalam interval satu
detik suatu proses tidak menggunakan terminal MK untuk masukan atau keluaran, maka proses itu dikategorikan proses non-interaktif dan dipindahkan ke antrian yang prioritasnya lebih rendah.
Dengan sistem seperti ini, bisa saja seorang programmer memodifikasi programnya -yang bukan program interaktif- untuk menulis karakter acak ke terminal dalam interval kurang dari satu detik.
Dengan demikian, programnya akan dianggap program interaktif dan mendapat prioritas tinggi, meskipun sebenarnya output yang diberikan ke terminal tidak memiliki arti.
Bagaimanapun, algoritma penjadwalan yang paling fleksibel adalah yang bisa berganti-ganti atau diatur sesuai kebutuhan. Misalnya komputer yang memiliki kebutuhan grafis tinggi akan memiliki
algoritma penjadwalan yang berbeda dengan komputer server. Beberapa sistem operasi seperti UNIX memungkinkan system manager untuk mengatur penjadwalan berdasarkan konfigurasi sistem
tertentu.
16.6. Ilustrasi: Linux
Mulai di versi 2.5, Kernel linux dapat berjalan di berbagai algoritma penjadwalan UNIX tradisional. Dua masalah dengan penjadwal UNIX tradisional adalah tidak disediakannya dukungan yang cukup
untuk SMP symmetric multiprocessor sistem dan tidak diperhitungkan dengan baik jumlah tasks pada sistem yang berkembang. Dalam versi 2.5, penjadwal memeriksa dengan teliti hal tersebut, dan
sekarang kernel juga menyajikan algoritma penjadwalan yang dapat run dalam waktu yang konstan tidak tergantung dari jumlah tasks dalam sistem. Penjadwal yang baru juga menyediakan
peningkatan dukungan untuk SMP, termasuk processor affinity dan load balancing, sebaik dalam menyediakan keadilan dan dukungan terhadap interactive tasks.
Penjadwal linux adalah preemptive, algoritmanya berdasarkan prioritas dengan dua range prioritas yang terpisah: real-time range dari 0-99 dan nice value berkisar dari 100-140. Dua range ini
dipetakan menjadi global priority scheme dimana nilai yang lebih rendah memiliki prioritas yang lebih tinggi. Tidak seperti penjadwal yang lain, Linux menetapkan prioritas yang lebih tinggi
memiliki waktu kuantum yang lebih panjang dan prioritas yang lebih rendah memiliki waktu kuantum yang lebih pendek.
Linux mengimplementasikan real time scheduling seperti yang didefinisikan oleh POSIX 1.b: First Come First Served dan Round Robin. Sistem waktu nyatareal timediberikan untuk task yang
prioritasnya tetap. Sedangkan task yang lainnya memiliki prioritas yang dinamis berdasakan nice
112
values ditambah atau dikurangi dengan 5. Interaktifitas sebuah task menentukan apakah nilai 5 tersebut akan ditambah atau dikurangi dari nice value. Task yang lebih interaktif mempunyai ciri
khas memiliki sleep times yang lebih lama dan karena itu maka ditambah dengan -5, karena penjadwal lebih menyukai interactive task. Hasil dari pendekatan ini akan membuat prioritas untuk
interactive task lebih tinggi. Sebaliknya, task dengan sleep time yang lebih pendek biasanya lebih CPU-bound jadi prioritasnya lebih rendah.
Gambar 16.3. Hubungan antara prioritas dan waktu kuantum
Task yang berjalan memenuhi syarat untuk dieksekusi oleh CPU selama time slice-nya masih ada. Ketika sebuah task telah kehabisan time slice-nya, maka task tersebut akan expired dan tidak
memenuhi syarat untuk dieksekusi lagi sampai semua task yang lain sudah habis waktu kuantumnya. Kernel mengatur daftar semua task yang berjalan di runqueue data structure. Karena
dukungan Linux untuk SMP, setiap prossesor mengatur runqueue mereka sendiri dan penjadwalan yang bebas. Setiap runqueue terdiri dari dua array prioritas -active dan expired. Active array terdiri
dari semua task yang mempunyai sisa waktu time slices, dan expired array terdiri dari task yang telah berakhir. Setiap array prioritas ini memiliki daftar task indexed berdasakan prioritasnya.
Penjadwal memilih task dengan prioritas paling tinggi di active array untuk dieksekusi dalam CPU. Di mesin multiprossesor, ini berarti setiap prossesor menjadwalkan prioritas paling tinggi dalam
runqueue structure masing-masing. Ketika semua task telah habis time slices-nya dimana, active array-nya sudah kosong, dua array prioritas bertukar; expired array menjadi active array, dan
sebaliknya.
Gambar 16.4. Daftar task indexed berdasarkan prioritas
Penghitungan ulang dari task yang memiliki prioritas yang dinamis berlangsung ketika task telah
113