• Tidak ada hasil yang ditemukan

Gambar 15.6. Multilevel Feedback Queue

Bab 16. Algoritma Penjadwalan II

4. Sulit berkolaborasi dengan virtual machine dan sistem prosesor jamak. Sesuai dengan sifat proses waktu nyata (khususnya hard real time) yang deterministik dan responsif, proses waktu

16.7. Penjadwalan Java

|Proses| Proritas | |---|---| | A | minimal | | B | menengah | | C | menengah | | D | maksimal | |---|---|

Urutan pengerjaan thread pada SCHED_FIFO adalah D-B-C-A. Urutan pengerjaan thread pada SCHED_RR adalah D-B-C-B-C-A. Pada SCHED_RR terjadi time slicing yaitu saat perpindahan

thread dari B ke C ke B ke C. Hal itu memungkinkan karena SCHED_RR menggunakan waktu

kuota untuk thread-threadnya.

B dan C memiliki prioritas yang sama tetapi B dijalankan lebih dahulu karena B telah lebih lama menunggu. Setelah waktu kuota B habis, C akan dijalankan. Setelah waktu kuota C habis,B dijalankan kembali. Kemudian C dijalankan dan A yang memiliki prioritas paling kecil dijalankan paling akhir.

SCHED_OTHER adalah penjadwalan untuk non real time threads . Jika tidak ada thread waktu nyata yang siap, maka thread-thread dalam SCHED_OTHER akan dijalankan.

16.7. Penjadwalan Java

Prioritas suatu thread dalam Java biasanya didapat dari prioritas thread yang menciptakannya (parent thread), yang secara default bernilai 5. Namun kita dapat menentukan secara manual prioritas dari thread yang sedang berjalan. Java telah menyediakan method setPriority yang menerima argumen integer dalam jangkauan 1-10.

Java menggunakan konsep round robin dalam menjadwalkan thread-thread yang berjalan. Setiap

thread mendapat jatah waktu tertentu untuk berjalan yang disebut quantum atau time slice. Pelaksanaannya dimulai dari thread dengan prioritas tertinggi. Bila jatah waktu thread tersebut habis maka thread lain dengan prioritas yang sama (bila ada) yang akan dijalankan (dengan metode round robin) meskipun thread tersebut belum selesai melaksanakan tugasnya. Hal ini dilakukan sampai thread dengan prioritas lebih tinggi sudah selesai semua melaksanakan tugasnya baru thread dengan prioritas lebih rendah dilaksanakan dengan metode yang sama.

Contoh Program yang menggunakan method setPriority()

Contoh 16.1. DialogThread

/*

* Program DialogThread.java

* Author : Anthony Steven, 120300017X

* Tanggal : 22 September, 2005

* CopyLeft : Silahkan memakai program ini untuk kepentingan

* akademis

*/

// Membuat kelas DialogThread class DialogThread extends Thread {

String kata; int prioritas;

public DialogThread(String kata, int prioritas){

this.kata = kata;

this.prioritas = prioritas;

}

public synchronized void run(){

setPriority(prioritas); // setPriority Awal for (int i = 0 ; i < 10 ; i ++ )

{

System.out.println(kata + " prioritas saya = " + getPriority());

/*

Awal Bagian Pengubahan Prioritas */

if(i == 5 && prioritas == 10){

System.out.println("prioritas dikurangi"); setPriority(prioritas - 9);

}

else if(i == 5 && prioritas == 1){

System.out.println("prioritas ditambah"); setPriority(prioritas + 9); } try{Thread.sleep(200);} catch(InterruptedException ie){}; /*

Akhir Bagian Pengubahan Prioritas */

} } }

// Kelas Aplikasi

public class DialogApplication {

public static void main(String [] args){

DialogThread dt1 = new DialogThread("Dialog Thread No 1,"+ "sedang berbicara", 10);

DialogThread dt2 = new DialogThread("Dialog Thread No 2,"+ "Lagi SPEAK-SPEAK", 10);

DialogThread dt3 = new DialogThread("Dialog Thread No 3,"+ "Ngomong Loh", 1);

DialogThread dt4 = new DialogThread("Dialog Thread No 4,"+ "Santai AAH", 1); dt1.start(); dt2.start(); dt3.start(); dt4.start(); } }

Penjadwalan di Java berkaitan dengan konsep multithreading. Java mendukung konsep thread. Java juga sudah mengatur penjadwalan thread-thread tersebut secara internal. Secara umum hanya terdapat satu thread yang berjalan di Java (Thread Main).

Banyak method yang disediakan Java untuk mengatur perilaku sebuah thread, diantaranya untuk menjalankan suatu thread, membuat suatu thread untuk menunggu, ataupun untuk menghentikan

thread yang sedang berjalan. Method-method ini dapat dilihat di Java API.

Dalam Java, sebuah thread dapat berada dalam status New (biasa juga disebut Born), Runing/Runable, Blocked (termasuk juga disini status Sleeping dan Waiting) dan Dead atau Terminated.

Setiap thread yang berjalan memiliki prioritas, dengan prioritas tertinggi bernilai 10 dan prioritas terendah bernilai 1. Semakin tinggi prioritas suatu thread maka semakin diutamakan thread tersebut dalam pelaksanaannya. Bagaimanapun tingginya prioritas suatu thread hal itu tidak menjamin urutan eksekusi thread tersebut.

Output program, jika bagian pengubahan prioritas dihilangkan:

Contoh 16.2. DialogThread

Dialog Thread No 1, sedang berbicara prioritas saya = 10 Dialog Thread No 2, Lagi SPEAK-SPEAK prioritas saya = 10 Dialog Thread No 3, Ngomong Loh prioritas saya = 1

Dialog Thread No 4, Santai AAH prioritas saya = 1

Dialog Thread No 2, Lagi SPEAK-SPEAK prioritas saya = 10 Dialog Thread No 1, sedang berbicara prioritas saya = 10 Dialog Thread No 3, Ngomong Loh prioritas saya = 1

Dialog Thread No 4, Santai AAH prioritas saya = 1

Dialog Thread No 1, sedang berbicara prioritas saya = 10 Dialog Thread No 2, Lagi SPEAK-SPEAK prioritas saya = 10 Dialog Thread No 3, Ngomong Loh prioritas saya = 1

Dialog Thread No 4, Santai AAH prioritas saya = 1

Dialog Thread No 2, Lagi SPEAK-SPEAK prioritas saya = 10 Dialog Thread No 1, sedang berbicara prioritas saya = 10 Dialog Thread No 4, Santai AAH prioritas saya = 1

Dialog Thread No 3, Ngomong Loh prioritas saya = 1

Dialog Thread No 1, sedang berbicara prioritas saya = 10 Dialog Thread No 2, Lagi SPEAK-SPEAK prioritas saya = 10 Dialog Thread No 3, Ngomong Loh prioritas saya = 1

Dialog Thread No 4, Santai AAH prioritas saya = 1

Dialog Thread No 1, sedang berbicara prioritas saya = 10 Dialog Thread No 2, Lagi SPEAK-SPEAK prioritas saya = 10 Dialog Thread No 4, Santai AAH prioritas saya = 1

Dialog Thread No 3, Ngomong Loh prioritas saya = 1

Dialog Thread No 1, sedang berbicara prioritas saya = 10 Dialog Thread No 2, Lagi SPEAK-SPEAK prioritas saya = 10 Dialog Thread No 3, Ngomong Loh prioritas saya = 1

Dialog Thread No 4, Santai AAH prioritas saya = 1

Dialog Thread No 2, Lagi SPEAK-SPEAK prioritas saya = 10 Dialog Thread No 1, sedang berbicara prioritas saya = 10 Dialog Thread No 4, Santai AAH prioritas saya = 1

Dialog Thread No 3, Ngomong Loh prioritas saya = 1

Dialog Thread No 1, sedang berbicara prioritas saya = 10 Dialog Thread No 2, Lagi SPEAK-SPEAK prioritas saya = 10 Dialog Thread No 4, Santai AAH prioritas saya = 1

Dialog Thread No 3, Ngomong Loh prioritas saya = 1

Dialog Thread No 2, Lagi SPEAK-SPEAK prioritas saya = 10 Dialog Thread No 1, sedang berbicara prioritas saya = 10 Dialog Thread No 4, Santai AAH prioritas saya = 1

Dialog thread yang bernomor 1 dan 2 akan terus berada di atas no 3 dan 4, karena Dialog thread yang bernomor 1 dan 2 lebih diutamakan.

Output program, jika bagian pengubahan prioritas diadakan:

Dialog Thread yang bernomor 1 dan 2 akan terus berada di atas no 3 dan 4, karena lebih diutamakan, akan tetapi setelah ada pengubahan prioritas, Dialog Thread no 3 dan 4 lebih diutamakan.

Java menggunakan konsep round-robin dalam menjadwalkan threadnya, setiap thread mendapatkan jatah waktu, jika jatah waktunya habis, maka thread lain dengan prioritas yang sama akan dijalankan, meskipun thread tersebut belum selesai tugasnya. Jika ada dua thread dengan prioritas yang sama hendak berjalan maka Java menggunakan konsep FIFO.

16.8. Kinerja

Ada banyak algoritma penjadwalan, yang mana masing-masing memiliki parameter tersendiri sebagai ukuran dari kinerjanya, sehingga cukup sulit untuk memilih diantara algoritma-algoritma tersebut yang kinerjanya paling baik.

Kinerja dari berbagai macam algoritma merupakan faktor yang penting dalam memilih sebuah algoritma penjadwalan. Bagaimanpun, hampir tidak mungkin untuk membuat perbandingan yang sempurna karena kinerja suatu algoritma relatif bergantung pada banyak faktor, diantaranya termasuk faktor distribusi probabilitas waktu kerja dari berbagai proses, efisiensi algoritma dan mekanisme context switching , dan kinerja dari I/O. Walaupun begitu, kita tetap akan membahas evaluasi algoritma dalam kondisi umum.

Cara yang paling akurat dan lengkap untuk mengevaluasi algoritma penjadwalan adalah dengan cara membuat kodenya, meletakkannya di sistem operasi dan melihat bagiamana kode itu bekerja. Pendekatan seperti ini dilakukan dengan menempatkan algoritma yang sebenarnya pada real time system untuk dievalusi di bawah kondisi yang juga real.

Kesulitan terbesar dari cara pendekatan seperti ini adalah pada cost atau biaya. Cost yang tinggi tidak hanya pada saat membuat kode algoritma dan memodifikasi sistem operasi untuk mensupport algoritma tersebut sesuai dengan keperluan struktur datanya, tetapi cost yang tinggi juga ada pada reaksi user terhadap modifikasi sistem operasi.

Peningkatan kinerja dari sistem dengan prosesor jamak adalah adanya efisiensi waktu, cost dan resource dari penggunaan prosesor yang lebih dari satu. Untuk model asynchronous adalah mengalokasikan penjadwalan, pemrosesan M/K, dan kegiatan sistem lainnya kepada satu prosesor tertentu kepada master. Sedangkan prosesor yang lain hanya bertugas mengeksekusi user code.

Permodelan Deterministik (Deterministic Modelling)

Salah satu metoda evaluasi algoritma yang disebut analysis evaluation, menggunakan algoritma yang diberikan dan waktu kerja sistem untuk menghasilkan sebuah nilai yang dapat menentukan kinerja algoritma tersebut. Salah satu jenis dari metoda ini adalah permodelan deterministik. Metoda ini mengambil suatu sistem dan mendefinisikan kinerja setiap algoritma untuk sistem tersebut. Untuk lebih jelasnya, mari kita bersama mengevaluasi lima proses dengan menggunakan algoritma FCFS (First-Come-Fist- Served), SJF(Short Jobs First ) non-preemptive, dan RR (Round-Robin). Contoh Soal:

|---| | Proses | Burst time | |---|---| | A | 12 | | B | 27 | | C | 4 | | D | 9 | | E | 15 | |---|

Dari proses antria tersebut, dapat kita peroleh berbagai informasi. Salah satunya dapat dituangkan dalam bentuk Little's Formula:

n = A X W

Keterangan:

n = rata-rata panjang antrian proses.

A = rata-rata waktu tiba arrival rate dari proses mengantri. W = rata-rata waiting time dalam antrian.

Bandingkan rata-rata waiting time dari masing-masing algoritma? FCFS (First-Come-Fist-Served)

rata-rata waiting time = (0+12+39+53+62) / 5 = 33,2 satuan waktu SJF (Short Jobs First) non-preemptive

rata-rata waiting time = (13+40+0+4+25) / 5 = 16,4 satuan waktu RR (Round-Robin) (q = 10)

rata-rata waiting time = (33+40+20+24+45) / 5 = 32,4 satuan waktu

Dari perhitungan di atas, kita dapati algoritma SJF sebagai algoritma yang memiliki waiting time yang terpendek. Bila kita perhatikan lebih lanjut, dengan metoda ini hampir semua hasil evaluasi menunjukan algoritma SJF sebagai pemenangnya. Tetapi itu hanyalah perhitungan sedehana saja, sehingga belum bisa dijadikan patokan untuk menentukan kinerja algoritma yang baik.

Metoda ini memang sangat sederhana dan cepat, serta memberikan suatu nilai yang eksak. Sayangnya dalam perhitungan kita membutuhkan nilai input yang juga eksak, sehingga perhitungan ini terlalu spesifik atau kurang umum dalam menentukan kinerja algoritma.

Metoda ini lebih dalam dapat anda baca dalam buku Operating Systems: Internal and Design

Principles Edisi Keempat karangan William Stallings.

16.9. Rangkuman

Telah dibahas mengenai penjadwalan prosesor jamak, penjadwalan waktu nyata, penjadwalan thread, penjadwalan Java, serta evaluasi algoritma. Penjadwalan CPU pada prosesor jamak dibagi menjadi dua, yaitu: proses jamak asimetris dan proses jamak simetris. Semua sistem operasi modern mendukung proses jamak simetris, termasuk Windows XP, Windows 2000, Solaris, Linux, dan Mac OS X.

Proses waktu nyata adalah proses yang memiliki batasan waktu. Ciri-ciri proses waktu nyata, yaitu: deterministik, bersifat primitif, responsif, dan sulit berkolaborasi dengan virtual machine dan sistem prosesor jamak. Sistem waktu nyata dapat dibagi dua, yaitu sistem Hard Real Time dan sistem Soft

Real Time .

Ada dua jenis thread, yaitu kernel thread dan user thread. Kernel thread dijadwalkan oleh sistem operasi sedangkan user thread dijadwalkan oleh perpustakaan thread. Perpustakaan thread menyediakan 3 jenis penjadwalan, yaitu: SCHED_FIFO, SCHED_RR, dan SCHED_OTHER. Java mendukung konsep multithreading, dimana penjadwalan thread pada Java mengunakan konsep Round-Robin dan FIFO.

Kriteria kinerja algoritma yang baik adalah:

i. Maksimalisasi utilisasi CPU dengan response time maksimal = 1 detik.

ii. Maksimalisasi throughput sehingga rata-rata turnaround time menjadi sebanding terhadap total waktu eksekusi.

Ada empat metoda evaluasi untuk memenuhi kriteria tersebut, yaitu: permodelan deterministik, model antrian, simulasi, dan implementasi.

Rujukan

[Silberschatz2002] Abraham Silberschatz, Peter Galvin, dan Greg Gagne. 2002. Applied Operating

Systems. Sixth Edition. John Wiley & Sons.

[Silberschatz2005] Avi Silberschatz, Peter Galvin, dan Grag Gagne. 2005. Operating Systems

Concepts. Seventh Edition. John Wiley & Sons.

[Stallings2001] William Stallings. 2001. Operating Systems: Internal and Design Principles. Fourth Edition. Edisi Keempat. Prentice-Hall International. New Jersey.

[WEBIBMNY] IBM Corporation. NY. General Programming Concepts – Writing and Debugging

Programs – http://publib16.boulder.ibm.com/ pseries/ en_US/ aixprggd/ genprogc/ ls_sched_subr.htm . Diakses 1 Juni 2006.

[WEBIBM1997] IBM Coorporation. 1997. General Programming Concepts: Writing and

Debugging Programs – Threads Scheduling http://www.unet.univie.ac.at/ aix/ aixprggd/ genprogc/ threads_sched.htm . Diakses 1 Juni 2006.

[WEBLindsey2003] Clark S Lindsey. 2003. Physics Simulation with Java – Thread Scheduling and

Priority – http://www.particle.kth.se/ ~fmi/ kurs/ PhysicsSimulation/ Lectures/ 10A/ schedulePriority.html . Diakses 1 Juni 2006.

[WEBMooreDrakos1999] Ross Moore dan Nikos Drakos. 1999. Converse Programming Manual –

Thread Scheduling Hooks http://charm.cs.uiuc.edu/ manuals/ html/ converse/ 3_3Thread_ Scheduling_Hooks.html . Diakses 1 Juni 2006.

[WEBVolz2003] Richard A Volz. 2003. Real Time Computing – Thread and Scheduling Basics –

http://linserver.cs.tamu.edu/ ~ravolz/ 456/ Chapter-3.pdf . Diakses 1 Juni 2006.

Dokumen terkait