Anda di halaman 1dari 28

BAB 5

KONKURENSI : MUTUAL
EXCLUSION DAN SINKRONISASI
5.1 PRINSIP KONKURENSI
A. Hal-hal Penting yang Perlu diperhatikan Sistem Operasi
B. Interaksi Proses
C. Persyaratan Mutual Exclusion
5.2 MUTUAL EXCLUSION:PENDEKATAN SOFTWARE
A. Algoritma Dekker
B. Algoritma Peterson
5.3 MUTUAL EXCLUSION:DUKUNGAN HARDWARE
A. Interrupt Disabling
B. Instruksi Mesin Khusus
5.4 SEMAPHORE
A. Mutual Exclusion
B. Masalah Producer/Consumer
C. Implementasi semaphore
5.5 MONITOR
A. Monnitor dengan Sinyal
B. Monitor dengan Notify dan Broadcast
5.6 MESSAGE PASSING
A. Sinkronisasi
B. Pengalamatan
C. Format Pesan
D. Aturan Antrean
E. Mutual Exclusion
5.7 MASALAH READERS/WRITERS
A. Reader Memeliki Perioritas
B. Writer memiliki perioritas

103 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
Topik utama rancangan sistem operasi adalah berkaitan dengan
manajemen proses dan thread :

 Multiprogramming : Manajemen proses jamak di dalam sistem uniprosesor


.Sesungguhnya semua sistem operasi mendukung multiprogramming.
 Multiprosessing : Manajemen proses jamak di dalam sistem proses
mikroprosesor.
 Distrubuted Processing : Manajemen proses jamak yang melakukan
eksekusi pada sistem komputer tristrubusi dan jamak.

Yang sangat mendasar bagi bidang-bidang yang disesbutkan diatas,dan


juga bagi rancangan sistem operasi ,adalah konkurensi.Konkurensi mencakup
sejumlah rancangan terrmasuk komunikasi antar proses,bagi pakai sumber daya
dan persaingan sumber daya ,,sinkronisasi aktivitas sejumlah proses, dan alokasi
waktu prosesor kepada proses. Kita akan meninjau masalah yang tidak hanya
terjadi pada lingkungan multiprosesing dan pengolahan terdistribusi saja ,namun
juga pada sistem multiprogramming berprosesor tunggal.

 Aplikasi jamak : Multiprogramming dibuat untuk memungkinkan waktu


pengolahan dapat dibagaipakaikan secara dinamais oleh beberapa
aplikasi yang aktif.
 Aplikasi terstruktur : Sebagai pengembangan prinsip rancangan modular
dan pemrograman terstruktur, beberapa aplikasi dapat secara efektif
diprogram sebagai sebuah himpunan proses konkuren.
 Struktur sistem operasi : Keuntungan penstrukturan yang sama berlaku
juga pada pemrograman sistem,dan telah kita ketahui bahwa sistem
operasi itu sendiri sering kali diimplementasikan sebagai himpunan
proses.

Dua masalah klasik pada konkurensi akan digunakan untuk menjelaskan


konsep-konsep diatas dan akan membandingkan pendekatan-pendekatan yang
diberikan pada bab ini.

5.1 PRINSIP KONKURENSI


Pada sebuah sistem multiprogramming, berprosesor tunggal, proses
digilirkan berdasarkanwaktu untuk merelisasikan yang simultan (lihat Gambar
2.12a). Walaupun pengolahan paralel yang sebenarnya tidak dapat dicapai, dan
walaupun terdapat sejumlah overhead yang terjadi dalam peralihan antarproses,
eksekusi secara bergiliran memberikan keuntungan yang penting dalam mencapai
efisiensi pengolahan dan dalam penstrukturan program. Pada sistem prosesor
jamak, tidak hanya bergiliran proses saja yang dimungkikan, namun juga
menumpangtindihkan proses tersebut dapat dilakukan (Gambar 2.12b).

104 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
Berikut ini adalah kesulitan yang mungkin timbul:

1. Bagi-pakai sumber daya global banyak. Misalnya apabila dua proses


menggunakan dua variabel global yang sama dan keduanya melakukan
pembacaandan penulisan terhadap variabel terssebut, urutan pembacaan
dan penulisan akan menjadi sesuat yang kritis.
2. Sangatlah sistem operasi untuk mengatur alokasi sumber daya secara
optimal.Misalnya, proses A dapat meminta penggunaan saluran I/O
tertentu dan kemudian ditunda sebelum dapat menggunakanya. Akan
tidak efisien apabila sistem operasi hanya mengunci dan mencegah
penggunaan saluran tersebut.

Semua kesulitan diatas terjadi juga dalam sistem multiprosesor, karena disini juga
kecepatan relatif eksekusi proses tidak dapat diprediksi. Sistem multiprosesing
juga berkaitan dengan masalah yang timbu dari eksekusi simultan sejumlah
proses. Namun secara fundamental masalah nya sama dengan masalah yang
terdapat pada sistem uniprosesor. Hal itu akan menjadi jelaas pada penjelasan
beerikutnya.

A. Hal-hal Penting yang Perlu diperhatikan Sistem Operasi

Masalah-masalah rancangan dan manajemen apakah yang akan terjadi yang


disebabkan oleh adanya konkurensi ? Kita dapat membuat daftar hal-hal
penting yang perlu mendapat perhatian itu.

1. Sistem operasi harus mampu mengawasi bermacam-macam proses


aktif. Hal ini dilakukan dengan menggunakan proses control block, dan
telah dijelaskan pada Bab 4.
2. Sistem operasi harus dapat mengalokasi dan mendealokasi berbagai
sumber daya bagi setiap proses aktif. Sumber daya tersebut meliputi :
 Waktu prosesor : hal ini merupakan fungsi penjadwalan
yang akan dibahsa pada bagian 4.
 Memori : sebagian besar sistem operasi menggunakan
teknik virtual memori topik ini akan dibahas pada bagian 3.
 File : hal ini akan dibahas pada Bab 12.
 Perangkat I/O : hal ini akan dibahas pada Bab 11.
3. Sistem operasi harus memproteksi data dan sumber-sumber daya fisik
setiap proses dari gangguan proses lainya yang tidak diinginkan.
Proteksi ini mencakup teknik yang berkaitan dengan memori, file, dan
perangkat I/O. Pembahasan proteksi akan diberikan pada Bab 15.
4. Hasil suatu proses harus tidak bergantung pada kecepatan dimana
eksekusi dilakukakan relatif terhadap kecepatan proses konkuren
lainya. Hal ini menjadi topik pembahasan pada Bab ini.

Untuk memahami pembahasan masalah indepedensi kecepatan, kita perlu


meninjau cara interaksi.

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 105
B. Interaksi Proses

Cara proses berinteraksi dapat diklasifikasikan berdasarkan derajat


pengetahuan keberadaan proses lainya. Tabel 5.1 memberikan tiga derajat
pengetahuan dan masing-masing konsekuensinya :

 Proses tidak saling mengetahui keberadaanya : proses seperti ini


merupakan proses yang tidak dimaksudkan untuk bekerja sama.
 Proses mengetahui keberadaan proses lainya secara tidak langsung
: proses-proses seperti ini adalah proses yang tidak harus saling
mengetahui akan keberadaan proses lainya berdasarkan namanya namun
memiliki akses bagi-pakai ke beberapa objek, misalnya buffer I/O.
 Proses mengetahui keberadaan proses lainya secara langsung :
prose-proses seperti ini adalah proses yang dapat berkomunikasi satu
dengan laninya berdasarkan nama dan merupakan proses yang dirancang
untuk bekerja sama dalam melakukan aktivitas-aktivitas tertentu.

Tabel 5.1 Instruksi proses

Tingkat relationshi Pengaruh satu proses Control potensial


pengetahuan p masalah terhadap
proses lainnya
Proses saling Kompetisi Hasil suatu proses akan Mutual ekslusion
tidak independen terhadap
mengetahui keberadaan proses aksi Deadlock (sumber
proses lainnya lainnya terbaharui)

Timing proses dapat Starvation


terpengaruh

Poses Kooperasi Hasil satu proses Mutual ekslusion


mengetahui dengan menggunakan dapat
keberadaan bagi-pakai bergantung pada Deadlock
imformasi yang diperoleh
proses lainnya
dari proses lainnya Starvation
secara tidak
lansung Timing proses dapat Koherensi data
(misalnya objek terpengaruh
bagi-pakai)

Mengetahui Kooperasi Hasil suatu proses Deadlock


keberadaan dengan dapatbergantung pada
proses lainnya menggunak informasi yang diperoleh Starvation
dari proses lainnya
secara an
langsung komunikasi Timing proses dapat
(memiliki terpengaruh
primitive
komunikasi)

106 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
Kondisi-kondisi yang terjadi tidak akan selalu persis seperti yang ditunjukan
pada tabel 5.1. melainkan, beberapa proses dapat menunjukan kedua aspek
kompetisi dan kooperasi. Akan tetapi, akan bermanfaat apabila dilakukan
pembahasan tentang ketiga item diatas secara terpisah dan menentukan
implikasinya terhadap sistem operasi.

1. Kompetisi Diantara Proses Untuk Mendapatkan Sumber Daya

Proses konkuren akan mengalami konflik satu dengan lainya pada saat
proses tersebut berkompetisi untuk dapat menggunakan suatu sumber
daya yang sama. Dalam bentuknya yang murni, kita dapat menjelaskan
situasi itu sebagai berikut. Dua proses atau lebih ingin mengakses sebuah
sumber daya pada saat berlangsungnya eksekusi. Masing-masing proses
tidak menyadari keberadaan proses lainnya, dan semua proses tersebut
tidak akan berpengaruh oleh eksekusi proses lainnya. Dengan demikian
setiap

2. Kooperasi Antar-proses dengan Bagi-Pakai


Masalah kooperasi antar-proses dengan menggunakan bagi-pakai
mencakup proses yang berinteraksi dengan proses lainnya tanpa
menyadari keberadaannya secara eksplisit.misalnya, sejumlah proses
dapat memiliki akses ke variable bagi-pakai atau ke file atau database
bagi-pakai. Proses dapat menggunakan dan mengupdate data bagi-pakai
tanpa mereferensi ke proses lainnya,namun mengetahui bahwa proses-
proses lainnya memiliki akses ke data itu. Dengan demikian, proses-
proses harus bekerja sama untuk menjamin bahwa data yang mereka
bagi-pakaikan dikelola dengan benar .mekanisme control harus menjamin
integritas data bagi-pakai tersebut.

3. Kooperasi Antar-proses dengan menggunakan komunikasi


Pada dua kasus pertama yang telah kita bahas, setiap proses memiliki
lingkungan terisolasinya sendirinya yang tidak memasukkan proses-
proses lainnya. Interaksi antar-proses bersifat tidak langsung. Pada
kedua kasus tersebut, terdapat pembagi-pakaian. Dalam hal kompetisi,
proses tersebut melakukan bagi-pakai sumber daya tanpa mengetahui
proses lainnya. Pada kasus kedua, proses berbagi-pakai nilai,dan
walaupun setiap proses tidak mengetahui proses lainnya secara eksplisit,
proses satu menyadari adanya kebutuhan.

C. Persyaratan Mutual Exclusion

Setiap fasilitas dan kemampuan yang di maksudkan untuk mendukung


mutual exclusion harus memenuhi h proses yang dpers yaratan-persyaratan
berikut ini:

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 107
1. Mutual exclution harus dilaksanakan:di antara sejumlah proses yang
memiliki bagian kritis bagi sumber daya yang sama atau objek bagi pakai
,pada suatu saat tertentu hanya sebuah proses yang di izinkan memasuki
bagian kritisnya
2. Suatu proses yang berhenti didalam bagian kritisnya tidak boleh
menggangu proses lainnya.
3. Suatu proses yang memerlukan akses ke bagian krisis tidak boleh di-
delay-kan dalam waktu yang tidak tertentu : tidak ada dedlock atau
starvation
4. Apabila dalam bagian kritis tidak ada proses, proses yang ingin masuk ke
dalam bagian kritisnya harus di izinkan masuk tanpa delay.
5. Tidak ada asumsi dibuat tentang kecepatan proses relatif atau jumlah
prosesor.
6. Suatu proses berada dalam bagian kritisnya dalam waktu tertentu saja.

5.2 MUTUAL EXCLUSION:PENDEKATAN SOFTWARE


Pendekatan software dapat di implementasikan untuk proses konkuren
yang melakukan eksekusi pada mesin berprosesor tunggal atau berprosesor
tunggal atau berprosesor jamak yang memiliki memori bagi-pakai.Umumnya
pendekatan ini mengasumsikan mutual exclution elementer pada tingkat akses
memori ({LAMP91},kecuali lihat Soal 5.10).Dengan kata lain,akses
simultan(pembacaan dan/atau penulisan)ke lokasi yang sama di dalam memori
arbiter,walaupun urutan pemberian akses tidak di tentukan terlebihh dahulu .Di
atas hal tersebut,tidak di asumsikan adanya dukungan pada tingkat hardware
sistem operasi,atau bahasa pemograman..

A. Algoritma Dekker

Dijkstra telah menulis algoritma mutual exclusion bagi dua proses yang
dirancang oleh ahli matematik Belanda bernama Dekker.Dengan mengikuti
apa yang dikemukakan Dijkstra,kita akan membuat solusi secara
bertahap.Pendekatan ini memiliki kelebihan dalam menjelaskan bug-bug yang
paling sering dijumpai di dalam membuat program-program konkuren.Dengan
dibuatnya algoritma tersebut,kita juga akan menggunakan ilustrasi bergambar
yang di ambil dari [BEN82]

1. Usaha Pertama
Seperti telah diketahui di atas ,setiap usaha pada mutual exclution harus
mengandalkan mekanisme ekslusi fundamental di dalam hardware.Salah
satu mekanisme yang paling umum adalah constraint yang hanya
mengizinkan satu akses ke lokasi memori pada suatu saat tertentu
Menggunakan constraint ini,kita menyediakan sebuah lokasi memori
global yang di beri label tura.Sebuah proses(P0 atauP1)menginginkan

108 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
untuk mengeksekusi bagian kritis pertama yang memeriksa isi dari
turn.Jika nilai dari nurn menjadi sama jumlah dari proses,kemudian
proses dapat melanjutkan ke bagian kritis.Jika tidak,akan mendorong
untuk menunggu.Proses menunggu beulaang kalii membaca nilai turn
sebagai busy waiting karena proses tidaak dapat melakukan bagian
kritis..Daripada harus menunda dan secara periodik memeriksa variable
mengkonsumsi waktu prosedur (sibuk) sementara menunggu
kesempatannya.
Kontruksi yanag disebut diatas merupakan kontruksi suaru coroutine.
Coroutine dirancang untuk dapat mengirimkan dn mengembalikan kontrol
eksekusi di antara coroutine itu sendiri.Walaupun merupakan sebuah
teknik penstrukturan yang cukup berguna,coroutine tidak lah cukup untuk
mendukung pengolahan konkuren.
2. Usaha kedua
Masalah ada usaha pertama adalah usaha tersebut menympan nama
prosesyang dapat masuk ke bagan kritisnya.pada saat kta benar-benar
memerlukan informasi keadaan tentang kedua proses tersebut akibatnya,
setap proses perlu memiliki kunci kunci sendiri ke bagian kritis itu
sehingga apabila proses musnah, maka proses lainnya masih dapat
mengakses bagian kritiisnya untuk memenuhi persyaratan ini sebuah
vektor boolean flag didefenisikan dengan flag (0) berhubungan dengan
P0 dan flag (1) yang berhubungan dengan P1, masing-masng proses
dapat memeriksa untuk flag laiinnya namun tidak dapat mengubahnya
ketika sebuah proses memungkinkan untuk masuki bagian kritis,secara
perodik memeriksa flag lainnya sampai flag memilik nilai false
mengiindikaskan bahwa roses lainnya tdak dalam bagian kritis proses
dengan langsung men-set flag-nya sendiri ke truedan melanjutkan ke
bagian kritis untuk memenuh persyaratann sebuah vektor boolean flag di
dfenisikan, dengan flag (0) berhubungan dengan P0 dan flag (1) yang
berhubungan dengan P1, masing-masng proses dapat memeriksa flag
lainnya, namun tiidak dapat mengubahnya, ketika sebuah proses
mungkinkan untuk memasuki bagian kritis, secara perodik memeriksa flag
lain nya tidak dalam bagian kritis proses dengan langsung men-set flag-
nya sendiri ke true dan melanjutkan kebagian kritis pada saat
meninggalkan bagan krits nya, proses itu mengubah tulisan d atas papan
tulisnya menjadi (false)
Karena sekarang kedua proses itu berada di bagian kritisnya, programnya
menjadi salah.masalah nya adalah solusi yg di ajukan tidak indenpenden
terhadap kecepatan eksekusi proses relatif.

3. Usaha ketiga
Karena sebuah proses dapat menggantikan keadaandari proses lainnya
telah di periksa namun sebelum proses lainya dapat memasukkan bagian
kritis, upaya kedua gagal mungkin. Seperti pada kasus

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 109
sebelumnya,apabiala sebuah proses mengalami kegagalan di dalam
bagian kritis,termasuk kode flag settingnya yang mengontrol bagian
kritis,proses lainnya akan diblokir.apabila suatu proses mengalami
kegagalan di luar bagian kritisnya,proses lain nya tidak akan di blokir.
Usaha ini dapat menjamin mutual exclusion namun menimbulkan
masalah lainnya. Setiap proses itu akan salingmengira bahwa proses
lainnya telah masuk kebagiankritisnya yg mana hal ini akan menimbulkan
deadlock.

4. Usaha keempat
Dalam usaha ketiga, sebuah proses menyetel keadaannya tanpa
mengetahui keadaan proses lainnya.Deadlock akan terjadi karena semus
proses menunntut haknya untuk dapat memasuki bagian kritisnya.Proses
menyetel flagnya untuk mengindikasikan keinginannya untuk masuk ke
bagian kritisnya.
Usaha ini hampir sama dengan solusi yg benar namun masih
mengandung cacat. Mutual exlusion masih dijamin, dengan
menggunakan pemikiran yg sama seperti pada usaha ketiga.

5. Solusi yang benar


Kita perlu dapat mengamati keadaan kedua proses yg tersedia dalam
bentuk flag variable array.namun hal itu tidak lah cukup.untuk
menghindarkan masalah “mutual courtesy”yang telah kita amati,kta perlu
membuat urutan aktifitas kedua proses.mengetahui bahwa akan kembali
untuk memaksakan dan secara periodik memeriksa P1 flag.P1 akan
dalam beberapa titik memeriksa bahwa akan kembali ke eriksaan kembali
dan men-set flag salah,membolehkan P0 untuk dilanjutkan setelah
P0untuk dilanjutkansetelah P0 telah digunakan dalam bagian kritis akan
men-set flaguntuk mentransfer hak untuk melaksanakn ke P1.

B. Algoritma Peterson
Algoritma Dekker mampu menyelesaikan masalah mutual excluesion namun
dengan menggunakan program yg agak rumit yg sulit dipahami dan
kebenaran nya sangat sulitdipahami dan kebenarannya sangat sulit di
buktikan. Peterson(PETE81) telah memberikan solusi yg singkat dan baik
sekali.seperti diatas,flag variable array global mengindikasi kan bahwa posisi
setiap proses dealam kaitan nya dengan mutual exclusion dan variable glbal
turn memecahkan konflik yang simultan.bahwa mutual exclusion dijaga dapat
dibuktian dengan mudah. proses P0.apabila P0 itu menyetel flag(0)-nya ke
true,P1 tidak bisa masuk bagian krisisnya.apabila P1 telah ada didalam
bagiannya
1. P1 tidak berminat memasuki bagian krisinya.hal itu tidak mungkin terjadi
karena P1 mengimplemtasikan flag (1) = false

110 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
2. P1 sedang menunggu bagian kritisnya.hal ini juga tidak mungkin terjadi
karna apabila turn=1,P1 dapat memasuki bagian kritisnya.
3. P1 sedangmenggunakan bagian kritisnya secara berulang-ulangdan
kemudian memonopoli akses ke bagian kritis itu.hal ini tidak mungkin
terjadi,karena P1 mempunyai kwajiban memberikan kesempatan
kepada P0 dengan cara menyetel turn menjadi 0 sebelum memasuki
bagian kritisnya.

5.3 MUTUAL EXCLUSION : DUKUNGAN HARDWARE


A. Interrup disabling

Dalam sebuah mesin uniprosesor,proses konkuren tidak dapat ditumpang-


tindihkan. proses tersebut hanya dapat digilirkan saja.disampng itu suatu
proses akan terus menerus berjalan sampai memanggiln layanan sistem
operasi atau sampai di interupsi. karna itu untuk menjamin mutual exclusion
maka penting untuk mencegah proses untuk mengizinkan dan tidak
mengizinkan interupsi.

B. Instruksi Mesin Khusus

Di dalam suatu konfigurasi multiprocessor, beberapa prosesor berbagi-pakai


akses kesebuah memori utama umum. Pada konfigurasi seperti itu, tidak ada
hubungan master/slave; melainkan prosesor tersebut berlaku sebagai
hubungan mitra(peer) yang independen. Tidak terdapat mekanisme interupsi
di antara prosesor yang mana dapat dijadikan dasar mutual exclusion.

Seperti telah dinyatakan sebelumnya, pada tingkatan hardware, akses ke


lokasi memori tidak mencakup akses lainnya ke lokasi yang sama itu. Dengan
menjadikannya sebagai dasar, para perancang telah mengajukan beberapa
instruksi mesin yang melaksanakan aksinya secara atomic, seperti
pembacaan dan penulisan atau pembacaan daan pengujian, sebuah lokasi
memori yang memiliki satu siklus pembacaan instruksi. Karena dilakukan
dalam bentuk instruksi tunggal, aksi-aksi itu tidak akan terganggu oleh
instruksi lainnya.

1. Instruksi Tes dan Set

Instruksi tes dan set dapat ditentukan :

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 111
Instruksi itu menguji nilai argumentasinya, i. Jika nilainya sama dengan 0,
nilai itu akan diganti dengan 1 dan di kembalikan sebagai true. Bila sama
dengan 1, nilai tersebut tidak akan di ubah dan di kembalikan sebagai
false. Fungsi test set ini dilaksanakan secara atomic, yaitu, tidak akan di
interupsi.

2. Instruksi Exchange

Instruksi exchange dapat ditentukan : Procedure exchange(var


r:register;var m:memori);

Void exchange (int register, int memory)


{
Int temp;
temp = memory
memory = register;
register = temp;
}

Instruksi tersebut mempertukarkan isi register dengan isi lokasi memori.


Selama eksekusi instruksi berlangsung, access ke lokasi memori untuk
instruksi lainnya yang mereferensi ke lokai itu.

3. Sifat-sifat Pendekatan Intruksi Mesin


Penggunaan intruksi mesin khusus untuk melaksanakan mutual exclusion
memiliki beberapa kelebihan:
 Dapat doterapkan pada sembarang jumlah proses baik pada sistem
prosesor tunggal maupun sistem prosesor jamak yang berbagi-pakai
memori utama.
 Cukup sederhana sehingga mudah untuk diverifikasi.
 Dapat digunakan untuk mendukung beberapa bagian kritis; setiap
bagian kritis dapat diterapkan oleh variabel miliknya sendiri.

Namun, terdapat juga beberapa kekurangan:

 Adanya busy-waiting sehingga, pada saat suatu proses sedang


menunggu akses ke bagian kritisnya, proses tersebut menghabiskan
waktu prosesor.
 Mungkin terjadi starvatior. Pada saat sebuah proses meninggalkan
bagian krisisnya dan lebih dari sebuah proses berada dalam keadaan
menunggu, pemilihan proses yang menunggunya bersifat
sembarang. Dengan demikian, sebagian proses akan selalu ditolak
untuk mendapatkan akses.
 Dapat terjadi deadlock. Perhatian skenario berikut pada sistem
prosesor tunggal. Prosesor P1 mengeksekusi untruksi khusus
(misalnya, testset, exchange) dan memasuki bagian krisisnya.

112 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
Kemudian P1 diintrupsi agar menyerahkan prosesor keP2, yang
memiliki prioritas yang lebih tinggi. Sekarang apabila P2 berusaha
untuk menggunakan sumber daya yang sama dengan P1, P2 akan
ditolak aksesnya karena adanya mekanisme mutual exclusion. Jadi
P2 akan menuju dalam loop busy-waiting. Namun, P1 tidak akan
pernah dikirimkan (diproses) karena memiliki prioritas yang lebih
rendah dibandingkan dengan proses yang sudah siap (ready) lainnya
yaitu P2.

5.4 SEMAPHORE
Prinsip dasarnya : dua proses atau lebih dapat berkooperasi dengan
menggunakan sinyal sederhana, sedemikian rupa sehingga suatu proses dapat
dipaksa berhenti pada posisi tertentu sampai proses tersebut menerima sinyal
tertentu. Persyaratan koordinasi yang kompleks dapat dipenuhi oleh struktur sinyal
yang sesuai. Pada pensinyalan, digunakan secara khusus yang disebut
semaphore. Untuk mengirimkan sinyal melalui semaphore s, proses melakukan
eksekusi primitive signal (s); apabila sinyal yang dimaksud belum ditransmisikan,
maka proses akan dihetikan sampai transmisi itu terjadi.

Untuk mencapai efek yang ditentukan, kita dapat melihat semaphore


sebagai variabel yang mempunyai nilai integer pada tiga operasi berikut ini:

1. Semaphore dapat diinisialisasikan sebagai nilai tidak negatif.


2. Operasi wait menurunkan nilai semaphore. Jika nilai menjadi negatif, maka
proses eksekusi wait diblok.
3. Operasi signal meningkatkan nilai semaphore. Jika nilainya bukan positif,
maka proses yang diblok oleh operasi wait dibuka blocknya.

Selain ketiga operasi ini, tidak terdapat cara lain untuk meneliti ataupun
memanipulasi semaphore.

Untuk semaphore dan semaphore biner, antrean digunakan untuk


menahan proses menunggu pada semaphore. Defenisi ini tidak mengharuskan
tingkatan yang prosesnya digeser dari antrean seperti itu. Polese satu per satu
yang keluar yang adil: proses yang telah diblokir paling lama dikeluarkan dari
antrean: proses yang telah memblok yang tepanjang dikeluarkan dari antrean
pertama sebuah semaphore yang defenisi termasuk dalam kebijaksanaan ini
dikenal sebagai semaphore kuat (lihat Gambar 5.1).

A. Mutual Exclusion

Algoritma berikut ini menunjukan sebuah solusi langsung bagi masalah mutual
exclusion yang menggunakan semaphore s (bandingkan dengan gambar 5.1)

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 113
Anggap terdapat n buah proses, yang ditetentukan dalam bentuk array P(i).
Di dalam setiap proses, wait (s) dieksekusi sesaat sebelum bagian kritisnya.
Apabila nilai s menjadi negatif, proses akan dihentikan. Apabila nilai s sama
dengan 1, nilai itu akan diturunkan menjadi 0 dan proses segera memasuki
bagian kritisnya; karena s tidak positif lagi, tidak akan ada proses lainnya yang
dapat memasuki bagian kritisnya.

Gambar 5.1 Contoh dari mekanisme semaphore

114 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
Listing Algoritma mutual exclusion dengan semaphore s

/*program mutualexclusion*/
const int n= /* number of processes */;
semaphore s =1;
void P(int i)
{
while (true)
{
wait(s);
/*critical section */;
Signal(s);
/*remainder */;
}
}
void main()
{
parbegin (P(1), P(2),.....,P(n));
}

Semaphore di beri nilai awal 1. Jadi, proses pertama yang mengesekusi wait
akan segera memasuki bagian kritisnya, menyetel nilai s menjadi 0. Semua
proses lainnya yang mencoba memasuki bagian kritisnya akan mendapatkan
bagian kritis itu dalam keadaan sibuk dan kemudian akan di blokir, menyetel
nilai s menjadi -1. Sejumlah proses dapat mencoba masuk; setiap usaha yang
gagal itu akan menurunkan nilai s lebih lanjut, pada saat proses yang pada
awalnya berada di bagian kritis akan menuju keluar, maka s dinaikan nilainya
dan salah satu proses yang di blokir (apabila ada) akan di keluarkan dari
antrian proses proses yang di blokir yang berkaitan dengan semaphore dan
disimpan di keadaan Ready. Pada saat proses itu di jadwalkan lagi oleh sistem
operasi, maka proses tersebut dapat masuk ke bagian kritis.

Gambar 5.2 menunjukkan sebuah deretan yang mungkin untuk tiga proses
menggunakan disiplin mutual esklusi dari Gambar 5.9. dalam contoh ini tiga
proses (A,B,C) mengakses sebuah proses yang terproteksi oleh kunci (lock)
semaphore. Proses A mengesekusi wait (lock); karena semaphore memiliki
nilai 1 dalam suatu waktu dari operasi wait. A dapat secara langsung
memasuki daerah kritis dan semaphore mengambil nilai 0. Sementara A
berada dalam daerah kritis, kedua B dan C melakukan sebuah operasi tunggu
dan block di tunda keberadaan dari semaphore. Ketika A ada dalam daerah
kritis dan melakukan signal (lock),B, yang merupakan proses yang pertama
dalam antrean dapat sekarang memasuki daerah kritisnya.

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 115
Program yang terdapat pada Gambar 5.2 dapat sama baiknya menangani
persyaratan yang mengizinkan lebih dari suatu proses berada dalam bagian
kritisnya pada suatu saat tertentu. Persyaratan ini akan di penuhi cukup
dengan memberi nilai awal tertentu kepada semaphore. Jadi, setiap saat, nilai
s count dapat di interpretasikan sebagai berikut :
 s.count (besar sama) 0; s.count adalah jumlah proses yang dapat
mengesekusi wait (s) tanpa suspend [Apabila tidak aada signal (s) di
eksekusi dalam waktu itu]
 s.count <0; magnitude s.count adalah jumlah proses yang terhenti di dalam
s.queue.

Gambar 5.2 Proses Mengakses Shared data terproteksi oleh Sebuah


Semaphore.

B. Masalah Producer/Consumer
Sekarang kita dapat membahas masalah yang paling umum yang di hadapi
dalam proses proses kongkuren ; masalah produser/consumer. Pernyataan
umumnya adalah: terdapat suatu proses atau lebih yang membuat beberapa
jenis data (record caracter) dan menempatkannya di dalam buffer. Terdapat
suatu consumer yang mengambil item item tersebut dari buffer pada saat
tertentu. Sistem terpaksa mencegah terjadinya tumpang tindih pada operasi
buffer. Dengan kata lain hanya satu agen (Producer atau consumer) yang
dapat mengakses buffer pada suatu saat tertentu. Kita akan meninjau
beberapa solusi bagi masalah ini untuk menjelaskan baik kelebihan atau pun
kekurangan yang di miliki semaphore.

116 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
Gambar 5.3 menjelaskan struktur buffer b. Produser dapat menghasilkan item
dan menyimpannya di dalam buffer menurut kecepatanya.Setiap waktu, suatu
indeks (in) ke dalam bufffer di naikan. Consumer terus melanjutkan
kegiatannya dengan cara yang sama, namun harus yakin bahwa dirinya tidak
mencoba melakukan pembacaan terhadap buffer yang kosong.Karena itu,
consumer perlu meyakinkan bahwa produser telah melakukan kegiatanya
lebih dahulu daripada dirinya (in > out) sebelum melakukan pembacaan.

Gambar 5.3 Buffer tak Terhingga bagi masalah produser/ Consumer

C. Implementasi semaphore

Seperti telah dinyatakan sebelumnya, adalah penting sekali bahwa operasi


wait dan sinyal diimlementasikan sebagai primitive atomik. Salah satu caranya
adalah dengan mengimplementasikan operasi tersebut dalan hardware dan
firmware. Untuk menutupi kekurangannya, diberikan pula beberapa teknik
lainnya. Masalah penting yang dihadapi adalah masalah muntual exclusion :
pada suatu saat tertentu hanya satu proses yang dapat memanipulasi satu
semaphore baik dengan operasi siyal maupun operasi wait. Jadi, software apa
pun, minsalnya algoritma Dekker atau algoritma Peterson,dapat digunakan:
hal ini akan menyebabkan terjadinya overhead pengolahan yang cukup
berpengaruh.

Gambar 5.4 Buffer sikular hingga untuk Persoalan produser/komsumer

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 117
5.5 MONITOR
Semaphore memiliki primitive yang sangat berguna dan fleksibel untuk
melaksanakan mutual exclusion dan koordinasi proses. Namun, seperti yang
dibahas sebelumnya, sangatlah sulit untuk membuat program yang benarr dengan
menggunakan semaphore. Kesulitannya adalah dimana operasi wait dan sinyal
dapat disebarkan di seluruh bagian program dan bukanlah hal yang mudah untuk
mengetahui akibat keseluruhan operasi ini terhadap semaphore yang
dipengaruhinya.

Monitor merupakan konsep bahasa pemrograman yang memiliki fungsi


yang sama dengan fungsi semaphore namun cukup mudah untuk dikontrol.
Konsep ini untuk pertama kalinya ditetapkan dalam [HOAR74]. Konsep monitor
telah diimplementasikan didalam sejumlah bahasa pemrograman, termasuk di
antaranya adalah Concurrent Pascal, Pascal –plus, Modula -2, Modula-3. Terakhir
konsep ini memunginkan orang untuk menaruh kunci monitor pada sembarang
objek. Khususnya, untuk sesuatu yang menyerupai linked list, Anda dapat
mengunci semua linked list dengan satu buah kunci, atau satu kunci bagi setiap
linked list, atau satu kunci bagi setiap elemen suatu list.

A. Monnitor dengan Sinyal

Monitor merupakan modul software yang terdiri dari sebuah procedure atau
lebih, sejumlah insialisasi , dan data lokal. Karakteristik utama sebuah monitor
sebagai berikut :

1. Variabel data lokal hanya bisa diakses oleh prosedur monitor dan tida
diakses oleh procedure eksternal.
2. Suatu proses memasuki sebuah monitor dengan cara memanggil salah
satu procedurenya.
3. Pada saat tertentu hanya sebuah proses yang dapat melakukan eksekusi
di dalam monitor; proses lainnya yang telah memanggil monitor dihentikan,
menunggu monitor dapat digunakan kembali.

Dua karakteristik pertama mengingatkan kita terhadap karakteristik objek di


dalam software berorientasi objek. Di samping itu, sistem operasi atau bahasa
pemrograman yang berorientasi objek telah siap untuk mengimplementasikan
monitor sebagai objek dengan karakteristik khusus.

Dengan menjalankan disiplin satu proses pada saat tertentu, monitor mampu
memberikan fasilitas mutuaal exclusion. Variabel data di dalam monitor dapat
diakses oleh hanya sebuah proses pada suatu saat tertentu. Jadi struktur data
bagi-pakai dapat diproteksi dengan cara menaruhnya di dalam monitor.
Apabila data di dalam monitor mempresentasikan beberapa sumber daya,
monitor menyediakan fasilitas mutual exclusion untuk mengakses sumber
daya tersebut.

118 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
Monitor mendukung sinkronisasi dengan menggunakan variable kondisi yang
berada di dalam monitor dan hanya dapat diakses di dalam monitor. Dua
fungsi beroperasi pada variable kondisi tersebut :

 cwait ( c ) : menghentikan eksekusi proses yang memanggil pada


kondisi c. Sekarang monitor dapat digunakan oleh proses lainnya.
 csignal ( c ) : Melanjutkan eksekusi beberapa proses yang dihentikan
setelah cwait pada kondisi yang sama.

Gambar 5.5 menjelaskan struktur sebuah monitor. Walaupun proses dapat


memasuki monitor dengan memanggil prosedur, hanya seuah proses yang
dapat masuk ke dalam monitor pada satu waktu.

Gambar 5.5 Struktur sebuah Monitor

B. Monitor dengan Notify dan Broadcast


Definisi monitor dari Hoare, mengharuskan bahwa apabila terdapat sedikitnya
sebuah proses di dalam antrian kondisi, proses yang berasal dari antrian
tersebut akan segera beroperasi apabila proses lainnya mengeluarkan csignal

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 119
untuk kondisi itu. Jadi proses yang mengeluarkan csignal harus segera keluar
dari monitor atau dihentikan di monitor.
Pendekatan ini memiliki beberapa kelemahan :
1. Apabila proses yang mengeluarkan csignal tidak dikerjakan monitor,
maka diperlukan dua peralihan proses tembahan : satu peralihan untuk
menunda proses tersebut dan peralihan lainnya untuk melanjutkan
kembali apabila monitor sudah dapat digunakan lagi.
2. Penjadwalan proses terkait dengan sinyal harus reliable. Pada saat signal
dikeluarkan,proses dari antrian kondisi tertentu harus segera diaktivasi
dan schedule harus menjamin bahwa tidak aka nada proses lainnya yang
akan masuk ke dalam monitor sebelum pengaktivasian itu.

Untuk mengatasi kelemahan monitor Hoare ini, Lampson dan Redel membuat
definisi monitor yang berbeda. Pendekatannya dengan menggunakan
notifikasi (notify) dan broadcast, sehingga lebih tahan dari keadaan kesalahan
jika dibandingkan dengan monitor Hoare.
Monitor Lampson/ Redell mengandalkan pendekatan yang lebih modular bagi
konstruksi programnya. Terdapat dua tingkatan kondisi yang perlu dipenuhi
untuk kooperasi proses sekuensial :
1. Struktur data yang konsiste, sehingga monitor melaksanakan mutual
exclusion dan menyelesaikan operasi I/O sebelum mengisinkan operasi
lainnya pada buffer.
2. Level 1, ditambah dengan mmemori yang mencukupi agar proses ini dapat
meneyelesaikan permintaan alokasinya.

5.6 MESSAGE PASSING

Pada saat proses saling berinteraksi, dua persyaratan fundamental harus


dipenhi: sinkronisasi dan komunikasi. Proses perlu disinkroisasikan agar
menjalankan mutual exclusion; proses yang bekerja sama perlu saling bertukar
informasi. Sebuah pendekatan untuk mendapatkan kedua fungsi tersebut adalah
message passing. Message passing memiliki keuntungan lebih lanjut di mana
message passing ini dapat digunakan untuk implementasi di dalam sistem
terdistribusi dan juga sistem multiprosesor dan uniprosesor bagi-pakai
Message passing memiliki beberapa bentuk. Dalam subbab ini, kita akan
mendapatkan pendahuluan secara umum yang membahas feature yang umum
ditemukan dalam sistem yang telah disebut di atas. Fungsi aktual message
passing umumnya diberikan dalam bentuk pasangan pritmitive:
Send (destination, message)
Receive (source, message)

Pasangan primitve itu merupakan set operasi minimum yang diperlukan


agar proses melaksanakan message passing. Proses akan mengirimkan informasi

120 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
dalam bentuk pesan (message) ke proses lainnya yang ditandai dengan tujuan
(destination). Proses akan menerima informasi dengan mengeksekusi primitive
receive, yang mengindikasikan sumber (source) proeses pengirim dan pesan.
Beberapa masalah rancangan yang berkaitan dengan sistem message
passing diberikan pada tabel 5.4; pada bagian lainnya subbab ini, kita akan
membahas satu per satu msalah tersebut.

A. Sinkronisasi
Komunikasi pesan di antara dua proses mengimplikasikan beberapa tingkat
sinkronisasi di antara keduanya: receiver tidak dapat menerima pesan sampai
pesan itu telah dikirimkan oleh proses lainnya. Di samping itu, kita perlu
menspesifikasikan apa yang terjadi terhadap suatu proses setelah
mengeluarkan primitve send atau receive.
Pertama – tama, perhatikan primive send. Pada saat primitive send dieksekusi
di dalam suatu proses, terdapat dua kemungkinan: apakah proses yang
melakukan pengiriman akan diblokir hingga pesan diterima atau tidak.

Demikian pula, pada saat proses mengeluarkan primitive receive, terdapat


dua kemungkinan :
1. Apabila sebuah pesan sebelumnya telah dikirimkan, pesan akan
diterima dan dieksekusi akan di lanjutkan.
2. Apabila tidak terdapat pesan yang menunggu, (a) proses akan diblokir
hingga pesan itu tiba, atau (b) proses melanjutkan eksekusi, yang
menolak untuk menerima pesan.

Jadi, baik sender maupun receiver dapat memblokir atau tidak memblokirnya. Ada
tiga buah kombinasi, walaupun suatu sistem tertentu biasanya hanya akan
mengimplementasikan satu atau dua buah kombinasi saja :

 Blocking send, blocking receive : Baik sender maupun receiver diblokir


sampai dikirimkannya pesan yang diminta; hal ini kadang-kadang disebut
rendezvouz. kombinasi ini mengizinkan sinkronisasi antar-dua proses
secara ketat.
 Nonbloking send, blocking receive : Walaupun sender dapat terus
melakukan pengiriman, receiver diblokir sampai pesan yang diminta tiba.
Kombinasi ini mungkin merupakan kombinasi yang paling berguna. Hal itu
memungkinkan suatu mengirimkan satu pesan atau lebih ke tujuan-tujuan
yang berbeda secepatnya. Proses yang harus menerima pesan sebelum
melakukan tugas lainnya perlu diblokir terlebih dahulu sampai pesan tiba.
Sebagai contoh adalah proses server yang dimaksudkan untuk
menyediakan layanan atau sumber daya bagi proses lainnya.
 Nonblocking send, nonblocking receive : tidak ada satu pihak pun yang
perlu menunggu.

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 121
B. Pengalamatan

Jenis di dalam primitive send diperlukan cara menspesifikasikan proses mana


yang akan menerima pesan. Demikian pula, sebagian besar implementasi
mengizinkan proses untuk mengindikasikan sumber pesan yang akan
diterima.

Penspisifikasikan didalam primitive send dan receive dapat digolongkan


menjadi dua kategori: pengalamatan langsung dan pengalamatan tidak
langsung. Pada pengalamatan langsung primitive send mengandung identifier
spesifik proses yang dituju. Primitive receive dapat ditangani dengan salah
satu dari kedua cara itu. Salah satu dari kedua cara itu.salah satu caranya
adalah dengan mengharuskan proses itu menandai proses yang melakukan
pengiriman secara eksplisit. Jadi, proses itu harus mengetahui terlebih dahulu
dari proses mana pesan itu yang akan datang. Hal ini sering sekali akan efektif
untuk mengkoopersikan proses-proses konkuren. Dalam kasus lainnya
adalah tidak mungkin untuk menspesifikasikan proses sumber yang
dimaksud.

Pendekatan umum lainnya adalah pengalamatan tak langsung. Dalam


pendekatan ini, pesan tidak dikirimkan secara langsung dari sender ke
receiver melainkan dikirimkan terlebih dahulu ke struktur data bagi-pakai yang
berupa antrean yang dapat menampung pesan secara temporer. Umumnya
antrean seperti itu di kenal sebagai mailbox (kotak surat). Jadi, bagi dua
proses yang sedang melakukan komunikasi, satu proses mengirimkan pesan
ke mailbox dan proses lainnya mengambil pesan itu dari mailbox tersebut.

Kelebihan penggunaan pengalamatan tak langsung adalah kemampuannya


yang lebih besar dalam menggunakan pesan, yaitu dengan melakukan
decouple antara sender dan receiver. Hubungan antara sender-sender
dengan receiver dapat diterapkan sebagai hubungan suatu satu ke satu,
jamak ke satu, satu ke jamak, ataupun jamak ke jamak. Hubungan satu ke
satu dilakukan dengan membuat link komunikasi privat antara kedua buah
proses. Hal ini akan melindungi interaksi kedua proses tersebut dari gangguan
yang disebabkan oleh proses lainnya. Hubungan jamak ke satu bermanfaat
bagi interaksi client/server; sebuah proses memberikan layanan ke beberapa
proses lainnya. Dalam hubungan ini, mailbox sering disebut sebagai port
(Gambar 5.6). Hubungan satu ke jamak memiliki sebuah sender dan beberapa
receiver; hubungan ini sangat berguna bagi aplikasi yang pesan atau
informasinya akan di-broadcast ke beberapa proses.

Hubungan antara proses dengan mailbox dapat berbentuk statis atau dinamis.
Port sering kali dihubungkan dengan proses-proses tertentu secara statis;
dengan kata lain, port dibuat dan di asssign ke proses secara permanen.
Demikian pula halnya, biasanya hubungan satu ke satu ditetapkan secara

122 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
statis dan permanen. Apabila terdapat beberapa sender, hubungan antara
sender dengan mailbox dapat berbentuk dinamis. Primitive seperti connect
dan disconnect dapat digunakan dalam hal ini.

Gambar 5.6 Komunikasi proses tak


langsung

Terdapat masalah yang berkaitan


dengan kepemilikan mailbox yang
perlu dilakukan.pada port, mailbox
umumnya dimiliki dan dibuat oleh
proses yang menerima pesan. Jadi,
pada saat proses dimusnahkan,
portnya juga turut dimusnahkan. Pada
kasus mailbox secara umum, sistem
operasi dapat menawarkan layanan
pembuatan mailbox. Mailbox seperti itu
dapat dianggap sebagai dimiliki oleh
proses yang membuat, dimana jika
mailbox tersebut dimusnahkan oleh
proses, dan sebagai dimiliki oleh
sistem operasi, apabila diperlukan
perintah eksplisit untuk memusnahkan
mailbox.

C. Format Pesan

Format pesan bergantung pada tujuan fasilitas pesan dan apakah fasilitas itu
beroperasi pada sebuah komputer atau sistem terdistribusi. Bagi sistem
operasi, para perancang lebih menyukai
pesan-pesan pendek dan berukuran tetap
untuk meminimalkan pengolahan dan
overhead penyimpanan. Apabila data yang
berjumlah akan dikirimkan maka data dapat
disimpan di dalam sebuah file dan kemudian
pesan itu dapat mereferensi file tersebut.
Pendekatan yang lebih fleksibel adalah
dengan menggunakan pesan yang
panjangnya berubah-ubah (variabel).

Gambar 5.7 Format Pesan Umum

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 123
Gambar 5.7 menunjukkan format pesan secara umum bagi sistem operasi
yang mendukung pesan yang panjangnya variabel. Pesan dibagi menjadi dua
bagian header; header, yang berisi informasi pesan, dan body,yang berisi isi
pesan. Header berisi identifikasi sumber pesan dan tujuan pesan, panjang
field, dan jenis field untuk membedakan jenis pesan. Mungkin juga terdapat
informasi kontrol lainnya, seperti pointer field sehingga linked list pesan dapat
dibuat; nomor urut, untuk mengawasi jumlah dan urutan pesan yang
dilewatkan antara sumber dengan tujuan; dan field prioritas.

D. Aturan Antrean
Aturan anterean yang paling sederhana adalah first-in-first-out,namun antrean
ini tidak akan cukup bila ada pesan yang di anggap lebih penting di
bandingkan dengan pesan lainya.Cara lain nya adalah dengan
memungkinkan perioritas pesan,yang di dasarkan pada jenis pesan atau
dengan penandaan oleh sender.Alternatifnya lagi dengan mengizinkan
receiver untuk memeriksa antrean pesan dan memilih pesan yang akan
diterima berikutnya.

E. Mutual Exclusion
Algoritma berikut ini menunjukkan sebuah cara dimana pesan yang dikirimkan
dapat digunakan untuk melaksanakan mutual exclusion. Diamsumsikan
pengguna blocking receive primitive dan nonblocking sen primitive.Beberapa
proses konkuran berbagi-pakai sebuah mailbox yaitu mutex,yang dapat
digunakan oleh seluruh proses untuk mengirimkan dan menerima
pesan,Apabila mailbox kosong,maka proses di blokir.Apabila proses berhasil
mendapatkan pesan,prose situ di izinkan masuk daerah kritisnya dan
kemudian menyimpan kembali pesan ke dalam mailbox.Jadi,pesan berfungsi
sebagai token yang dikirimkan dari suatu proses ke proses lain nya.
Solusi di atas mengumsusikan bahwa apabila lebih dari satu proses
melakukan operasi penerima secara konkuren,maka:
 Apabila terdapat pesan,pesan itu dikirimkan hanya ke satu proses dan
proses-proses lainnya di blokir
 Apabila antrean pesan kosong,semua pesan di blokir;pada saat pesan
tersedia ,maka hanya satu proses yang akan di blokir yang akan diaktivasi
dan di beri pesan.

/* program mutualexclusing*/
Cont int n=/*number or prosesing*/;
Void P(int i)
{
Massage msg;
While (true)
{receive(mutex,msg);

124 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
/*critical section*/
Send(mutex,msg)
/*remainder*/
}
}
Void main ()
{create_mailbox(mutex);
Send(mutex,null);
Parbegin{P(1),P(2),…….P(n));
}

Asumsi diatas berlaku bagi semua fasilitas mesegge passing.

Seperti contoh penggunaan massage passing lainnya, algoritma program


berikut ini merupakan solusi bagi masalah bounded-buffer
producer/consumer.

Const int
Capacity = /*buffering capacity*/
Null= /*empity massage*/
Int I;
Void produser()
{massage pmsg;
While(true)
{
Recerve (mayproduce,pmsg);
Pmsg =produce();
Send(mayconsume,pmsg)
}
}
Void consumer()
{massage cmsg;
While(true)
{receive(mayproduce,cmsg);
Consume(cmsg);
Send (mayproduce,null)
}
}
Void main()
{
Create_mailbox(mayproduce)
Create_mailbox(mayconsume)
For {int i=1;i<=capacity; 1++)
Send(mayproduce,null);
Parbegin(producer,consumer);
}

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 125
5.7 MASALAH READERS/WRITERS
Dalam membahas rancangan mekanisme sinkronisasi dan
konsekuensi,sangat lah berguna apabila dapat menghubungkan masalah yang di
jumpai dengan masalah yang telah diketahui dan mampu menguji semua solusi
dalam hal kemampuannya untuk masalah yang telah diketahui.Dalam
literature,beberapa masalah di anggap penting dan sering di jumpai,baik karena
masalah tersebut merupakan contoh masalah rancangan yang uum maupun
karena alasan nilai edukatifnya salah satu di antara masalah tersebut adalah
masalah produser/consumer,yang telah di bahas di atas.Dalam subbab ini,kita
akan meninjau ,masalah klasik lainya masalah readers/writers.

Masalah reader/writer ditentukan sebagai berikut terdapat suatu daerah data


yangdi bagi-pakai oleh sejumlah proses.Daerah data tersebut dapat berupa
file,blok memori utama,atau bahkan sebuah papan register prosesor.Terdapat
sejumlah proses yang hanya memebaca daerah data tersebut(readers)dan
sejumlah proses yang hanya menulisi daerah data itu(writers).Maka kondisi di
bawah ini
1. Sembarang jumlah reader dapat membaca file secara silmultan.
2. Hanya satu writer yang dapat menulis file pada suatu saat tertentu.
3. Apabila suatu writer sedang menulisis,tidak ada satu reder-pun yang akan
membacanya

A. Reader Memeliki Perioritas


Program readerwriters berikut ini merupakan suatu solusi dengan
menggunakan semarphone,yang menunjukan sebuah instance pada setiap
reader dan writer; solusi ini tidak untuk beberapa reader dan beberapa writer.
Proses writer cukup sederhana. Semaphone wsem digunkan unutk
melaksakan mutual exclusion. Selama satu writer mengakses daerah data
bagi-pakai,tak ada satupun rader yang lainya yang di izinkan mengakses
daerah data itu. Proses reader juga menggunakan semarphone wsem untuk
melaksakan mutual exclusion. Namun ,untuk mengizinkan sejumlah reader
pertama yang akan membaca harus menunggu wsem. Pada saat sedikit nya
suatu reader melakukan pembacaan,reader berikutnya tidak perlu menunggu
sebelum memasuki daerah data. Varibal global readcount digukan unutk
mengawasi jumlah reader dan semaphone digunakan untuk menjamin bahwa
readacount di update dengan benar.
/*program readersandwritars*/
int readcount;
semaphore x = 1, wsem = 1;
void reader()
{
While (true)
{
wait (x);

126 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
readcount++,
if (readcount == 1)
wait (wsem);
signal (x);
READUNIT();
wait (x);
readcount--;
if (readcount == 0)
signal (wsem);
signal (x);
}
}
void write()
{
while (true)
{
wait (wsem);
WRITEUNIT();
signal (wsem);
}
}
void main()
{
readcount = 0
parbegin ( reader,writer);
}

B. Writer memiliki perioritas


Pada solusi sebelumnya,reader memeliki prioritas. Sekali sebuah reader telah
di mulai mengakses daerah data,maka reader di mungkinkan unutk
mepertahankan daerah data selama terdapat satu reader yang melakukan
pembacaan. Karna itu, writer dapat terkena starvation.

Listing program readerandwriters berikut ini menunjukkan sebuah solusi yang


menjamin bahwa tidak ada reader baru yang diijinkan mengakses daerah data
apabila sedikitnya satu writer telah menyatakan akan menulis daerah data
tersebut. Bagi writer, semaphore-semaphore dan variable-variabel berikut ini
ditambahkan ke smarphore dan variable yang telah ditetapkan sebelumnya:
 Semaphore rsem yang menghalangi semua reader apabila terdapat
sedikitnya satu writer yang ingin mengakses ke daerah data
 Variable writecount yang mengontrol penyetelan rsem
 Semaphore y yang mengontrol peng-update-an writecount

Bagi reader, diperlukan sebuah smarphore tambahan. Antrean yang panjang


harus tidak diijinkan terbentuk pada rsem, apabila tidak demikian write tidak
akan dapat melompati antrean. Karna itu, hanya satu reader yang diizinkan

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 127
untuk mengantre pada rsem, dengan antrean reader tambahan pada
semaphore z, sesaat sebelum menunggu rsem. Tabel 5.5 merangkum
kemungkinan-kemungkinan yang dapat terjadi.

*/ program readersandwrites */
int readcount, writecount;
semaphore x =1, y = 1, z = 1, wsem = 1, rsem
=1;
void reader()
{
while (true)
{
wait (z);
wait (rsem);
wait (x);
readcount++;
if (readcount ==1)
{
wait (wsem);
}
signal (x);
signal (rsem);
signal (z);
READUNIT();
wait (x);
readcount--;
if (readcount == 0)
signal (wsem);
signal (x );
}
}
void writer()
{
while (true)
{
wait (y);
writecount++;
if (writecount == 1)
wait (rsem);
signal (y);
wait (wsem);
WRITEUNIT();
signal (wsem);
wait (y);
writecount--;
if (writecount == 0)
signal (rsem);
signal (y);
}
}
void main()

128 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n
{
readcount = writecount = 0;
parbegin (reader,writer);
}

Sebuah solusi alternative, yang memberikan perioritas ke[ada writer dan yang
diimplementasikan dengan menggunakan innesaage passing, ditunjukkan pada
gambar 5.30. di dalam kasus ini, terdapat mikrokontroler yang memiliki akses ke
daerah data bagi-pakai. Proses lainnya yang berhubungan mengakses ke daerah
data mengirimkan

Table 5.5 Keadaan antrean proses bagi program di atas.

Hanya reader yang berada dalam  Penyetelan wsem


system  Tidak ada antrean
Hanya writer yang berada dalam  Penyetelan wsem dan rsem
system  Antrean writer pada wsem
Reader dan writer dengan baca terlebih  Wsem disetel oleh reader
dahulu  Rsem disetel oleh writer
 Semua writer mengantri pada
wsem
 Satu reader mengantre pada
rsem
 Reader lainnya mengantre
pada z
Reader dan writer dengan menulis  Wsem disetel oleh writer
terlebih dahulu  Rsem disetel oleh reader
 Semua writer mengantre pada
rsem
 Reader lainnya mengantre
pada z

Pesan permintaan ke controller akan diberi akses dengan pesan jawaban


“OK” dan mengindikasikan lengkapnya akses dengan pesan “finished”.
Controller dilengkapi dengan tiga mailbox, yang masing-masing mailbox
diperuntukkan bagi setiap pesan yang diterimanya

Untuk memberi perioritas kepada writer, layanan proses controller menulis


pesan permintaan sebelum pesan permintaan pembacaan. Selain itu, mutual
exlusin harus dilakukan. Untuk melakukan hal itu, digunakan variable count,
yang diberi nilai awal yang sedikit lebih besar dari jumlah reader maksimum
yang diizinkan. Di dalam contoh ini, kita akan memakai nilai 100. Kegiatan
controller dapat dirangkum sebagai berikut:

B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n | 129
 Apabila count > 0, tidak ada writer yang menunggu dan dapat atau tidak
dapat ada reader yang aktif. Melayani pesan-pesan “finished” terlebih
dahulu untuk menghapus reader yang aktif. Kemudian melayani
permintaan write dan dilanjutkan permintaan read.
 Apabila count = 0, satu-satunya permintaan yang belum dilaksanakan
adalah permintaan write. Mengizinkan writer untuk melanjutkan
aktifitasnya dan menunggu pesan “finished”.
 Apabila count < 0, writer telah membuat pemintaan dan dibuat
menunggu untuk menghapus semua reader yang sedang aktif. Dengan
demikian, hanya pesan-pesan “finished” yang perlu dilayani.

REFERENSI UTAMA :

Kifer, Michael and Smolka, Scott A. (2007). Introduction to Operating System


Design and Implementation, The OSP Approach, New York : Springer

Silberschatz et.al (2014). Operating System Concept Essentials, 2nd Edition, New
Jersey, USA : John Wiley & Sons, Inc

Stalling, William. (2012). Operating Systems : Internals and Design Principles, 7th
Edition, Boston, USA : Prentice-Hall.Inc

Tanenbaum , Andrew S. and Bos, Herbert. (2014). Modern Operating System, 4th
Edition, New Jersey : Pearson Education, Inc.

130 | B a b 5 . K o n k u r e n s i : M u t u a l E x c l u s i o n

Anda mungkin juga menyukai