Concurensy
merupakan landasan umum perancangan sistem operasi. Proses-proses
disebut concurrensy jika proses-proses (lebih dari satu proses) berada
pada saat yang sama. Proses-proses yang mengalami kongkuren dapat
berdiri sendiri (independen) atau dapat saling berinteraksi, sehingga
membutuhkan sinkronisasi atau koordinasi proses yang baik. Untuk
penanganan kongkuren, bahasa pemograman saat ini telah memiliki
mekanisme kongkurensi dimana dalam penerapannya perlu dukungan sistem
operasi dimana bahasa berada.
Proses yang kongkuren ini mempunyai beberapa masalah yang harus diselesaikan, yaitu :
Proses yang kongkuren ini mempunyai beberapa masalah yang harus diselesaikan, yaitu :
a. Mutual Exclusion
Mutual Exclusion adalah
suatu cara yang menjamin jika ada sebuah proses yang menggunakan
variabel atau berkas yang sama (digunakan juga oleh proses lain), maka
proses lain akan dikeluarkan dari pekerjaan yang sama. Jadi, Mutual Exclusive terjadi
ketika hanya ada satu proses yang boleh memakai sumber daya, dan proses
lain yang ingin memakai sumber daya tersebut harus menunggu hingga
sumber daya tadi dilepaskan atau tidak ada proses yang memakai sumber
daya tersebut.
Pengertian
lain Mutual exclusion adalah jaminan hanya satu proses yang mengakses
sumber daya pada suatu interval waktu tertentu, sedangkan proses lain
dilarang mengerjakan hal yang sama -> contoh : sumberdaya printer
hanya bisa diakses 1 proses, tidak bisa bersamaan -> sumber daya ini
disebut sumber daya kritis dan bagian program yang menggunakan
sumber daya kritis disebut critical region / section. Hanya satu program
pada satu saat yang diijinkan masuk ke critical region. Pemrogram tidak
dapat bergantung pada sistem operasi untuk memahami dan memaksakan
batasan ini, karena maksud program tidak dapat diketahui oleh sistem
operasi. Hanya saja, system operasi menyediakan layanan (system call) yang bertujuan untuk mencegah proses lain masuk ke critical section yang sedang digunakan proses tertentu. Pemrograman harus menspesifikasikan bagian-bagian critical section,
sehingga sistem operasi akan menjaganya. Pentingnya mutual exclusion
adalah jaminan hanya satu proses yang mengakses sumber daya pada suatu
interval waktu.
Pemaksaan atau pelanggaran mutual exclusion menimbulkan :
· Deadlock
· Starvation
· Deadlock (buntu)
· Sinkronisasi
b. Syncronization
Sinkronisasi
adalah proses pengaturan jalannya beberapa proses pada saat yang
bersamaan. Tujuan utama sinkronisasi adalah menghindari terjadinya
inkonsitensi data karena pengaksesan oleh beberapa proses yang berbeda
(mutual exclusion) serta untuk mengatur urutan jalannya proses-proses
sehingga dapat berjalan dengan lancar dan terhindar dari deadlock dan
starvation. Sinkronisasi umumnya dilakukan dengan bantuan perangkat
sinkronisasi. Penyelesaian terhadap masalah ini sangat penting karena
perkembangan teknologi sistem komputer menuju ke sistem multiprocessing, terdistribusi dan paralel yang mengharuskan adanya proses-proses kongkuren.
· Concurrency Deadlock
Deadlock adalah suatu kondisi dimana dua proses atau lebih saling menunggu proses yang lain untuk melepaskan resource
yang sedang dipakai. Karena beberapa proses itu saling menunggu, maka
tidak terjadi kemajuan dalam kerja proses-proses tersebut. Deadlock adalah masalah yang biasa terjadi ketika banyak proses yang membagi sebuah resource yang hanya boleh dirubah oleh satu proses saja dalam satu waktu. Di kehidupan nyata, deadlock dapat digambarkan dalam gambar berikut.Pada gambar diatas, deadlock
dianalogikan sebagai dua antrian mobil yang akan menyeberangi jembatan.
Dalam kasus diatas, antrian di sebelah kiri menunggu antrian kanan
untuk mengosongkan jembatan (resource), begitu juga dengan
antrian 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.
· 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.
a, Penanganan Deadlock
Terdapat beberapa cara dalam menangani deadlock, yang secara umumnya ada 4 cara untuk menangani keadaan deadlock, yaitu:
1. Pengabaian.
Maksud dari pengabaian dari kata tersebut yaitu sistem mengabaikan
terjadinya deadlock dan berpura-pura tidak mengetahui jika deadlock
telah terjadi. Dalam penanganan dengan cara ini dikenal dengan istilah
ostrich algorithm. Pelaksanaan algoritma ini yaitu sistem tidak
mendeteksi adanya deadlock dan secara otomatis mematikan proses atau
program yang mengalami deadlock. Kebanyakan
sistem operasi yang ada mengadaptasi cara ini untuk menangani keadaan
deadlock. Cara penanganan dengan mengabaikan deadlock banyak digunakan
karena masalah deadlock tersebut jarang terjadi dan relatif rumit dan
kompleks untuk diselesaikan. Sehingga biasanya diabaikan oleh sistem
untuk kemudian diselesaikan masalahnya oleh user atau pengguna dengan
cara melakukan terminasi dengan Ctrl+Alt+Del atau melakukan restart
terhadap komputer.
2. Pencegahan.
Penanganan ini dengan cara mencegah munculnya salah satu karakteristik
deadlock. Penanganan ini dilaksanakan pada saat deadlock belum terjadi
pada sistem. Yang terutama memastikan agar sistem tidak akan pernah
berada pada kondisi deadlock.
3. Penghindaran.
Menghindari keadaan deadlock. Bagian yang perlu diperhatikan yaitu
bahwa antara pencegahan dan penghindaran adalah berbeda. Pencegahan
lebih mengarah kepada mencegah salah satu dari empat karakteristik
terjadinya deadlock, sehingga deadlock pun tidak terjadi. Sedangkan
penghindaran merupakan memprediksi apakah tindakan yang diambil oleh
sistem, dalam kaitannya dengan permintaan proses akan sumber daya, dapat
mengakibatkan terjadi deadlock.
4. Pendeteksian
dan Pemulihan. Pada sistem yang sedang berada pada kondisi deadlock,
tindakan yang harus diambil adalah tindakan yang bersifat represif.
Tindakan tersebut adalah dengan mendeteksi adanya deadlock, kemudian
memulihkan kembali sistem. Proses pendeteksian akan menghasilkan
informasi apakah sistem sedang deadlock atau tidak serta proses mana
yang mengalami deadlock.
b. Metode untuk Mengatasinya
Metode untuk megatasinya adalah sebagai berikut:
1. Masalah
Mutual Eksklusif Kondisi ini tidak dapat dilarang, jika aksesnya perlu
bersifat spesial untuk satu proses, maka hal ini harus di dukung oleh
kemampuan sistem operasi. Jadi diusahakan agar tidak mempergunakan
kondisi spesial tersebut sehingga sebisa mungkin deadlock bisa dihindari.
2. Masalah Kondisi Menunggu dan Memegang Penanggulangan deadlock
dari kondisi ini lebih baik dan menjanjikan, asalkan kita bisa menahan
proses yang memegang sumber daya untuk tidak menunggu sumber daya laun,
kita bisa mencegah deadlock. Caranya ialah dengan meminta semua
sumber daya yang ia butuhkan sebelum proses berjalan. Tetapi masalahnya
sebagian proses tidak mengetahui keperluannya sebelum ia berjalan. Jadi
untuk mengatasi hal ini, kita dapat menggunakan algoritma bankir. Yang
mengatur hal ini bisa sistem operasi ataupun sebuah protokol. Hasil yang
bisa terjadi ialah sumber daya lebih di-spesifikasi dan kelaparan
sumber daya, atau proses yang membutuhkan sumber daya yang banyak harus
menunggu sekian lama untuk mendapat sumber daya yang dibutuhkan.
3. Masalah tidak ada Preemption.Hal ketiga ialah jangan sampai ada preemption
pada sumber daya yang telah dialokasikan. Untuk memastikan hal ini,
kita bisa menggunakan protokol. Jadi jika sebuah proses meminta sumber
daya yang tidak dapat dipenuhi saat itu juga, maka proses mengalami
preempted. Atau dengan kata lain ada sumber daya dilepaskan dan
diberikan ke proses yang menunggu, dan proses itu akan menunggu sampai
kebutuhan sumber dayanya dipenuhi. Atau kita harus mencek sumber daya
yang dimaui oleh proses di cek dahulu apakah tersedia. Jika ya maka kita
langsung alokasikan, sedangkan jika tidak tersedia maka kita melihat
apakah ada proses lain yang menunggu sumber daya juga. Jika ya, maka
kita ambil sumber daya dari proses yang menunggu tersebut dan memberikan
pada proses yang meminta tersebut. Jika tidak tersedia juga, maka
proses itu harus menunggu. Dalam menunggu, beberapa dari sumber dayanya
bisa saja di preempted, tetapi jika ada proses yang memintanya. Cara ini
efektif untuk proses yang menyimpan dalam memory atau register.
4. Masalah
Circular Wait Masalah ini dapat ditangani oleh sebuah protokol yang
menjaga agar sebuah proses tidak membuat lingkaran siklus yang bisa
mengakibatkan deadlock
Tidak ada komentar:
Posting Komentar