Anda di halaman 1dari 5

SISTEM OPERASI

T0316 FORUM I INTER PROCESS COMMUNICATION Diskusikan pengertian pokok dari IPC yang menyangkut race condition dan critical region (section). Untuk critical region ini penyelesaiannya dengan menggunakan mutual exclusion (ME), diskusikan apa yang dimaksud dengan ME ini. Diskusikan juga empat syarat agar kondisi mutual exclusion ini dijamin terjadi. Bagaimana solusi ME dengan busy waiting bekerja pada disabling interrupt, lock variable, strict alteration, Petersons solution dan TSL instruction. Dimulai dari disabling interrupt jelaskan kelemahannya, yang kemudian berturut-turut kelemahan tersebut akan diperbaiki pada solusi-solusi berikutnya. Solusi ME pada busy waiting diperbaiki dengan solusi-solusi sleep and wake up, semaphore, mutex, monitor dan message passing. Diskusikan bagaimana solusi-solusi tersebut bekerja dan jelaskan kelemahan masing-masing. Jelaskan bagaimana masalah producer dan consumer terjadi dengan menyebutkan pertama kali inti permasalahan, baru kemudian masalah itu sendiri (permudah dengan contoh dalam praktek). Diskusikan bagaimana solusi-solusi sleep and wake up, semaphore, mutex, monitor dan message passing diimplementasikan pada masalah producer and consumer problem.

Race condition Dalam OS tertentu, beberapa process yg bekerja bersama-sama dapat berbagi storage dimana masing2 dapat read dan write dalam storage itu. Storage bisa berupa main memory maupun shared file, dan ketika ada 2 process yang bekerja bersama-sama mengakses alamat storage yang sama, bisa saja hasil dari process dalam storage tidak sesuai dengan yang diharapkan, karena kedua process berebut tempat, dan inilah yang disebut race condition. Critical section Merupakan bagian dari program yang menunjukkan lokasi shared memory yang diakses oleh process, jika kita bisa mengatur kondisi akses shared memory setiap process, maka race condition dapat dihindari. ME (Mutual Exclusion) Cara untuk memastikan dimana jika ada suatu program yang mengakses critical section, proses lain yang mengakses tempat itu akan dibuang. 4 syarat ME: >Tidak diperbolehkan untuk 2 process berada dalam critical section secara bersamaan >Tidak ada asumsi tentang kecepatan dan jumlah CPU >Tidak diperbolehkan untuk process yang bekerja diluar critical section menahan process lainnya >Tidak ada process yang harus menunggu selamanya untuk mengakses critical sectionnya Disabling interrupt Pada OS dgn single processor, cara termudah adalah membiarkan setiap process menghentikan semua gangguan setelah memasuki critical section dan memperbolehkan kembali setelah meninggalkannya, dengan ini maka tak akan ada gangguan waktu. Sekali process telah menghentikan gangguan, maka process dapat mengakses critical section dan melakukan operasinya tanpa ada gangguan Kelemahannya: tidak dapat diterapkan pada multiprocessor karena walaupun menghentikan gangguan di satu processor, processor lainnya dapat mengakses critical section dalam waktu yg sama. Lock variable Anggap shared storage punya variable bernama lock dengan nilai awal 0, ketika ada process mau masuk, maka process melihat nilai lock, dan nilai lock berubah menjadi 1. Jika nilai lock sudah 1 dan ada process mau masuk, maka process tersebut harus antri sampai process dalam critical section keluar dan mengubah nilai lock menjadi 0. Kelemahan: cara ini juga tidak dapat menghentikan race condition. Asumsikan ada 2 process, yang satu sudah lihat nilai lock 0, namun kalah cepat dengan process satunya

yang sudah melihat nilai lock, mengubah nilai menjadi 1, dan masuk ke critical section. Hasil dari kondisi ini adalah kedua process masuk bersama walaupun nilai lock adalah 1. Strict alteration Kali ini solusi dalam bahasa C++. Kita memiliki variable bernama turn, bernilai 0. Kita juga memiliki 2 process, process0 dan process1. Untuk permulaan, process0 melihat turn bernilai 0, maka masuklah process0 ke dalam critical section. Ketika process0 selesai, maka nilai turn berubah menjadi 1 dan process1 bisa masuk ke dalam critical section, lalu selesai dan keluar serta mengubah nilai turn menjadi 0. Bagaimana dengan process diluar critical section? Process itu melakukan loop diluar sampai nilai turn berubah sesuai kondisi masing2 process. Kelemahan: Ketika process0 selesai dan keluar dari critical section, bisa saja terjadi bentrokan dengan process1 yang masih looping dan belum melihat nilai turn karena waktu yang digunakan process0 di dalam critical section lebih cepat disbanding waktu looping process1. Petersons solution Merupakan gabungan dari strict alterarion dan lock variable. Kita kembali dengan variable turn, process0 dan process1. Kedua process memanggil turn hingga nilainya sesuai dengan kondisi salah satu process, baru process itu masuk (fungsi enter_region berjalan) sementara satunya menunggu di luar. Jika process di dalam sudah selesai maka process akan keluar (fungsi leave_region berjalan) dan process satunya melakukan hal seperti process sebelumnya. Kelemahan: asumsikan kedua process menjalankan enter_region bersamaan, maka turn akan mengambil nilai dari process yang terakhir disimpan, dan nilai turn untuk process satunya akan ditimpa sehingga terjadi bentrokan lagi. Dan juga terjadi busy waiting yang memakan waktu process dalam CPU, dimana kedua process berada diluar critical section tanpa melakukan processnya. TSL instruction. TSL (Test, Set, and Lock), bekerja dengan sedikit bantuan dari hardware, khususnya untuk multiprocessor. TSL membaca isi dari memory lock kedalam register dan memberikan nilai bukan 0 kedalam alamat memory lock, sehingga tidak ada processor lain yang mengakses memory hingga instruksi selesai. Mirip dengan disabling interruption, namun yang dikunci disini bukan gangguannya, melainkan jaringan bus dari processor satunya. Kelemahan: Busy waiting masih terjadi dalam TSL. Processpun bisa melanggar aturan-aturan dalam TSL sehingga memungkinkan ME gagal. Sleep and wake up Kita menggunakan 2 fungsi penting, yakni sleep dan wakeup. Fungsi sleep membuat process ditunda oleh system caller hingga dipanggil kembali, sedangkan fungsi wakeup memanggil process yang telah ditunda tadi. Kedua fungsi sleep dan wakeup

masing2 memiliki 1 parameter, yakni alamat memori untuk mencocokkan sleep dengan wakeup. Kelemahan: terjadi priority inversion problem, dimana jika kedua process memiliki perbedaan prioritas, maka akan (lagi-lagi) rebutan tempat untuk process. Semaphore Buatan Dijkstra. Mirip dengan sleep and wakeup, cara semaphore menggunakan 2 fungsi, down dan up. Fungsi down mengecek nilai semaphore, apakah lebih besar dari 0. Jika ya, maka nilai akan dikurangi terus hingga 0 dan menyebabkan process tertidur tanpa menyelesaikan process down. Fungsi up menaikkan nilai semaphore, jika ada beberapa process yang tertidur dalam semaphore dan down belum complete, maka salah satu dari process yang tertidur dibangunkan dan boleh menyelesaikan down yang belum selesai. Kelemahan: untuk OS dgn multiprocessor, variable semaphore harus dilindungi dengan variable TSL lock biar lebih yakin pengunciannya karena semaphore tidak dapat mengunci dengan baik Mutex Versi lebih mudah dari semaphore. Mutex merupakan variable yang memiliki 2 kondisi: terbuka atau tertutup. Ketika ada process perlu masuk ke critical section, maka status mutex akan dicek, jika mutex terbuka maka process boleh masuk dan mutex berubah menjadi tertutup. Namun jika status mutex tertutup dan ada yang perlu masuk, maka process itu diblok hingga process dalam critical section keluar dan mengubah status mutex menjadi terbuka. Kelemahan: terjadi busy waiting untuk menunggu perubahan status mutex. Monitor Kumpulan dari prosedur, variable, dan struktur data yang dikelompokkan menjadi suatu modul. Process boleh memanggil monitor kapan saja tetapi tidak boleh masuk langsung ke struktur data internal dari monitor. Kekhususan monitor adalah hanya satu process yang bisa aktif dalam monitor. Ketika process memanggil monitor, maka monitor akan mengecek apakah ada process lain di dalam monitor, jika ya maka pemanggilan ditunda, jika tidak maka process boleh masuk. Kelemahan: hanya dapat digunakan untuk menyelesaikan masalah ME baik terhadap single processor maupun multiprocessor dimana semuanya mengakses memory yang sama. Message passing Kita memiliki 2 fungsi, send dan receive. Lebih mirip semaphore ketimbang monitor. Receive menerima panggilan dari send, sedangkan send mengirim pesan ke receive. Jika receive telah menerima pesan dari send, send membalas dengan laporan yang menyatakan bahwa pesan telah diterima. Jika send belum terima pesan, maka pesan akan dikirim kembali, ini yang mengganggu system. Ini diselesaikan dengan member nomor urut di setiap pesan yang dikirim. Jika pesan yang diterima memiliki nomor yang berurutan, maka hanya yang pertama yg diterima dan sisanya bisa diabaikan.

Kelemahan: pengiriman pesan berulang memakan waktu process sehingga menjadi lambat. Selain itu receiver bisa saja tidak menerima pesan dari send karena lost message. Masalah producer consumer Ada 2 process, satu berperan sebagai producer, lainnya menjadi consumer. Producer menyimpan info di buffer, sementara consumer mengambil info itu. Masalah muncul ketika producer mau menyimpan info sementara buffernya penuh. Solusi dengan sleep and wake up Producer di-sleep ketika buffer penuh dan di-wakeup ketika consumer sudah mengambil isi buffer, begitu pula sebaliknya, consumer di-sleep ketika buffer kosong dan di-wakeup ketika producer menyimpan info di buffer. Solusi dengan semaphore Sleep dan wakeup belum cukup untuk menyelesaikan masalah ini karena masih bisa memicu kondisi dimana buffer penuh dan producer dan consumer masih balapan menuju buffer. Maka disiapkanlah variable count sebagai counter isi buffer. Jika nilai count sama dengan jumlah max buffer, maka producer ditidurkan namun consumer dibangunkan dan nilai dari count akan berkurang hingga 0. Begitu pula sebaliknya, ketika nilai count 0, maka producer dibangunkan dan consumer ditidurkan dan nilai count meningkat hingga sama dengan maximum buffer. Solusi dengan mutex Producer dan consumer sama-sama memanggil buffer. Jika producer mau masuk, maka producer mengecek status buffer apakah penuh atau masih bisa diisi. Jika masih bisa diisi, maka producer masuk, dan mutex berperan di sini sebagai kunci agar consumer tidak masuk. Jika producer sudah membuka kunci, maka consumer boleh masuk, dan seterusnya. Solusi dengan monitor Producer memanggil monitor untuk mulai process. Monitor mengecek apakah ada process lain di dalamnya, jika tidak maka producer masuk ke dalam buffer. Begitu consumer memanggil monitor, monitor mengecek dan ternyata producer di dalamnya sehingga consumer dilarang masuk. Solusi dengan message passing Producer memasukkan info ke buffer dengan send(buffer,pesan), ketika buffer menerima send(buffer,pesan) maka buffer mengirim pesan balik dengan receive(producer,pesan) bahwa info sudah masuk, sementara itu buffer mengirimkan pesan ke consumer dengan send(consumer,pesan) dan consumer dapat mengambil pesan karena receive(buffer,pesan) menerima pesan bahwa buffer ada isinya, setelah itu consumer mengirim pesan lagi dengan send(buffer,pesan) bahwa isi sudah diambil, dan buffer mengabarkan ke producer dengan send(producer,pesan) bahwa buffer masih bisa diisi.

Anda mungkin juga menyukai