Cigarette

Minggu, 19 Mei 2013

SINKRONISASI PROSES


Sejauh ini, setiap proses dianggap sebagai entitas yang independen, bekerja sendiri, dan tidak saling berhubungan satu sama lain. Namun, pada kenyataannya setiap proses harus saling bekerja sama. Kerja sama ini diperlukan misalnya ketika ada file yang digunakan secara bersama (file sharing), pembagian penggunaan alat input/output, dan sebagainya. Serupa dengan proses, setiap thread dalam satu proses yang sama akan menggunakan ruang alamat memori yang sama. Sinkronisasi proses diperlukan misalnya dalam hal konsistensi data. Ketika beberapa proses/thread mengakses suatu data secara bersamaan maka data tersebut dapat menjadi tidak konsisten. Sinkronisasi juga diperlukan untuk menghindari terjadinya deadlock. Kondisi deadlock dapat terjadi pada scenario berikut :
v  Sistem memiliki 2 proses yang siap dieksekusi, yaitu proses A dan B. Proses A memegang control atas sumber daya P. Proses B memegang control atas sumber daya Q. Bila proses A dieksekusi dulu, dan kemudian di tengah eksekusinya membutuhkan sumber daya Q, maka proses A akan dimasukkan ke antrian sumber daya Q (karena sumber daya Q sedang dipegang oleh proses B). Maka, proses A dikeluarkan dari CPU dan proses B dieksekusi. Di tengah eksekusinya, proses B membutuhkan sumber daya P (padahal sumber daya P masih dipegang oleh proses A). Akibatnya kini proses B akan dimasukkan ke antrian sumber daya P. Bila proses A dan proses B tidak ada yang mau mengalah (melepas control atas sumber daya yang dipegangnya), maka akan terjadi deadlock. CPU tidak akan mengeksekusi apa-apa. Proses A dan proses B pun tidak dapat melanjutkan eksekusinya. Oleh karena itu masalah sinkronisasi proses merupakan masalah penting yang harus diperhatikan dalam sebuah system operasi.
Sinkronisasi proses/komunikasi antarproses membutuhkan place by calls untuk mengirim dan menerima data primitive. Terdapat rancangan yang berbeda-beda dalam implementasi setiap primitive. Pengiriman pesan mungkin dapat diblok (blocking) atau tidak dapat diblok (nonblocking). Pesan yang diblock dianggap sebagai synchronous dan pesan yang tidak diblock dianggap sebagai asynchrounous, sedangkan send dan receive primitive mungkin adalah blocking atau nonblocking.

1.      Pengiriman yang diblock : Proses pengiriman diblok sampai pesan diterima oleh proses penerima (receiving process) atau oleh mailbox.
2.      Pengiriman yang tidak diblock : Proses pengiriman pesan dan mengkalkulasi operasi.
3.      Penerimaan yang diblock : Penerima memblok sampai pesan tersedia.
4.      Penerimaan yang tidak diblock : Penerima mengembalikan pesan valid atau null.

Tidak ada komentar:

Posting Komentar