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