Proses dan Sinkronisasi Fair Share Scheduler FSS. Thread yang diatur oleh FSS dijadwalkan berdasar pembagian

kanan. Akhirnya tidak terjadi kemajuan dalam kerja dua antrian tersebut. Misal ada proses A mempunyai resource X, proses B mempunyai resource Y. Kemudian kedua proses ini dijalankan bersama, proses A memerlukan resource Y dan proses B memerlukan resource X, tetapi kedua proses tidak akan memberikan resource yang dimiliki sebelum proses dirinya sendiri selesai dilakukan. Sehingga akan terjadi tunggu-menunggu.

2. Starvation. Starvation adalah kondisi yang biasanya terjadi setelah deadlock. Proses yang

kekurangan resource karena terjadi deadlock tidak akan pernah mendapat resource yang dibutuhkan sehingga mengalami starvation kelaparan. Namun, starvation juga bisa terjadi tanpa deadlock. Hal ini ketika terdapat kesalahan dalam sistem sehingga terjadi ketimpangan dalam pembagian resouce. Satu proses selalu mendapat resource, sedangkan proses yang lain tidak pernah mendapatkannya. Ilustrasi starvation tanpa deadlock di dunia nyata dapat dilihat di bawah ini. Pada gambar diatas, pada antrian kanan terjadi starvation karena resource jembatan selalu dipakai oleh antrian kiri, dan antrian kanan tidak mendapatkan giliran.

17.8. Rangkuman

Dalam menjalankan fungsinya dalam sistem operasi, dibutuhkan interaksi antara beberapa proses yang berbeda. Interaksi tersebut bertujuan agar terjadi kesinambungan antar proses yang terjadi sehingga sistem operasi dapat berjalan sebagaimana mestinya. Interaksi tersebut dapat melalui sistem berbagi memori atau dengan cara saling berkirim pesan. Terkadang, beberapa pesan yang dikirim tidak dapat diterima seluruhnya oleh penerima dan menyebabkan informasi yang lain menjadi tidak valid, maka dibutuhkanlah sebuah mekanisme sinkronasi yang akan mengatur penerimaan dan pengiriman pesan sehingga kesalahan penerimaan pesan dapat diperkecil. Pesan yang dikirim dapat ditampung dalam penyangga sebelum diterima oleh penerima. Interaksi antar proses dapat juga terjadi antara proses yang memiliki sistem berbeda. Dalam interaksi tersebut dikenal sebutan client dan server yang memungkinkan sistem yang berbeda untuk berinteraksi dengan menggunakan socket. Dalam interaksi tersebut dikenal juga RPC Remote Procedure Call yaitu metode yang memungkinkan sebuah sistem mengakses prosedur sistem lain dalam komputer berbeda. Dalam interaksi antar proses, terkadang suatu proses saling menunggu proses yang lain sebelum melanjutkan prosesnya, sehingga proses-proses tersebut saling menunggu tanpa akhir, hal ini disebut deadlock. Jika deadlock terjadi dalam waktu lama, maka terjadilah starvation, yaitu suatu proses tidak mendapatkan resource yang dibutuhkan. Rujukan [Silberschatz2005] Avi Silberschatz, Peter Galvin, dan Grag Gagne. 2005. Operating Systems Concepts. Seventh Edition. John Wiley Sons. [WEBFSF1991a] Free Software Foundation. 1991. GNU General Public License – http:gnui.vLSM.org licenses gpl.txt . Diakses 29 Mei 2006. [WEBWIKIA] Wikipedia. http:en.wikipedia.orgwikiClient_28computing29 . Diakses 24 Mei 2007. [WEBWIKIB] Wikipedia. http:en.wikipedia.orgwikiServer_28computing29 . Diakses 24 Mei 2007. [WEBWIKIC] Wikipedia. http:en.wikipedia.orgwikiClient_server . Diakses 24 Mei 2007. 122

Bab 18. Sinkronisasi

18.1. Pendahuluan

Sinkronisasi diperlukan untuk menghindari terjadinya ketidak-konsistenan data akibat adanya akses data secara konkuren. Proses-proses disebut konkuren jika proses-proses itu ada dan berjalan pada waktu yang sama, proses-proses konkuren ini bisa bersifat independen atau bisa juga saling berinteraksi. Proses-proses konkuren yang saling berinteraksi memerlukan sinkronisasi agar terkendali dan juga menghasilkan output yang benar.

18.2. Race Condition

Race condition adalah suatu kondisi dimana dua atau lebih proses mengakses shared memorysumber daya pada saat yang bersamaan dan hasil akhir dari data tersebut tergantung dari proses mana yang terakhir selesai dieksekusi sehingga hasil akhirnya terkadang tidak sesuai dengan yang dikehendaki. Contoh 18.1. Race Condition 1. int counter = 0; 2. Proses yang dilakukan oleh produsen 3. item nextProduced; 4. while 1 { 5. while counter == BUFFER_SIZE { ... do nothing ... } 6. buffer[in] = nextProduced; 7. in = in + 1 BUFFER_SIZE; 8. counter++; 9. } 10. Proses yang dilakukan oleh konsumen 11. item nextConsumed; 12. while 1 { 13. while counter == 0 { ... do nothing ... } 14. nextConsumed = buffer[out] ; 15. out = out + 1 BUFFER_SIZE; 16. counter--; 17. } Pada program di atas, terlihat bahwa terdapat variabel counter yang diinisialisasi dengan nilai 0, dan ditambah 1 setiap kali terjadi produksi serta dikurangi 1 setiap kali terjadi konsumsi. Pada bahasa mesin, baris kode counter++ dan counter-- diimplementasikan seperti di bawah ini: Contoh 18.2. Race Condition dalam bahasa mesin counter++ register1 = counter register1 = register1 + 1 counter = register1 counter-- register2 = counter register2 = register2 - 1 counter = register2 Jika perintah counter++ dan counter-- berusaha mengakses nilai counter secara konkuren, 123 maka nilai akhir dari counter bisa salah. Hal ini tidak berarti nilainya pasti salah, tapi ada kemungkinan untuk terjadi kesalahan. Contoh urutan eksekusi baris kode tersebut yang mengakibatkan kesalahan pada nilai akhir counter: Contoh 18.3. Program yang memperlihatkan Race Condition 2misalkan nilai awal counter adalah 2 1.produsen: register1 = counter register1 = 2 2.produsen: register1 = register1 + 1 register1 = 3 3.konsumen: register2 = counter register2 = 2 4.konsumen: register2 = register2 - 1 register2 = 1 5.konsumen: counter = register2 counter = 1 6.produsen: counter = register1 counter = 3 Status akhir dari counter seharusnya adalah 0, tapi kalau urutan pengeksekusian program berjalan seperti di atas, maka hasil akhirnya menjadi 3. Perhatikan bahwa nilai akhir counter akan mengikuti eksekusi terakhir yang dilakukan oleh komputer. Pada program di atas, pilihannya bisa 1 atau 3. Perhatikan bahwa nilai dari counter akan bergantung dari perintah terakhir yang dieksekusi. Oleh karena itu maka kita membutuhkan sinkronisasi yang merupakan suatu upaya yang dilakukan agar proses-proses yang saling bekerjasama dieksekusi secara beraturan demi mencegah timbulnya suatu keadaan race condition. Gambar 18.1. Ilustrasi program produsen dan konsumen Kunci untuk mencegah masalah ini dan di situasi yang lain yang melibatkan memori bersama, berkas bersama, dan sumber daya lain yang digunakan secara bersama-sama adalah menemukan beberapa jalan untuk mencegah lebih dari satu proses melakukan proses tulis dan baca kepada data yang sama pada saat yang sama. Dengan kata lain, kita membutuhkan mutual exclusion, sebuah jalan yang menjamin jika sebuah proses sedang menggunakan variabel atau berkas yang digunakan bersama-sama, proses lain akan dikeluarkan dari pekerjaan yang sama. Cara untuk menghindari race condition adalah kita harus dapat menjamin bahwa jika suatu proses sedang menjalankan critical section, maka proses lain tidak boleh masuk ke dalam critical section tersebut. Critical section dijelaskan dibawah.

18.3. Critical Section

Critical section adalah segmen kode yang mengakses data yang digunakan proses secara bersama-sama yang dapat membawa proses itu ke bahaya race condition. Biasanya sebuah proses sibuk melakukan perhitungan internal dan hal-hal lainnya tanpa ada bahaya yang menuju ke race condition pada sebagian besar waktu. Akan tetapi, biasanya setiap proses memiliki segmen kode dimana proses itu dapat mengubah variabel, meng-update suatu tabel, menulis ke suatu file, dan lain-lainnya, yang dapat membawa proses itu ke bahaya race condition. 124