32
SISTEM OPERASI Mutual Exclusion Dan Deadlock Oleh: Nur Annisa D.A.P 12.5.00172 Nidia Aisyiyah 12.5.00171 Kurnia Matha. H 12.5.00157 Wahyu Ernawati 12.5.00188 Yuniana Arif Z 12.5.00196 SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER STMIK SINAR NUSANTARA SURAKARTA 2013

Mutuan Exclusion Dan Deadlock

Embed Size (px)

DESCRIPTION

Sistem Operasi

Citation preview

Page 1: Mutuan Exclusion Dan Deadlock

SISTEM OPERASI

Mutual Exclusion Dan Deadlock

Oleh:

Nur Annisa D.A.P 12.5.00172

Nidia Aisyiyah 12.5.00171

Kurnia Matha. H 12.5.00157

Wahyu Ernawati 12.5.00188

Yuniana Arif Z 12.5.00196

SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER

STMIK SINAR NUSANTARA

SURAKARTA

2013

Page 2: Mutuan Exclusion Dan Deadlock

Mutual Exclusion

Pentingnya Mutual Exclusion

Mutual Exclusion adalah persoalan untuk menjamin hanya satu proses yang mengakses

sumber daya pada suatu interval waktu tertentu. Pentingnya mutual exclusion dapat

dilihat pada dua ilustrasi berikut ini :

Ilustrasi eksekusi Daemon Printer

Adalah proses penjadwalan dan pengendalian untuk mencetak berkas – berkas

di printer sehingga menjadikan seolah-olah printer dapat digunakan secara

simultan oleh proses-proses. Daemon untuk printer mempunyai ruang

penyimpanan di harddisk (spooler) untuk menyimpan berkas-berkas yang akan

dicetak. Direktori spooler itu terbagi dalam sejumlah slot. Slot berisi satu

berkas yang akan dicetak. Terdapat variable in yang menunjuk slot bebas di

ruang harddisk yang dipakai untuk menyimpan berkas yang hendak dicetak.

Perhatikan program berikut ini :

Gambar 1.1

Skenario yang membuat situasi kacau

Misal proses A dan B ingin mencetak berkas, variable in bernilai 9. Skenario

berikut dapat terjadi, digambar pa gambar dibawah.

Page 3: Mutuan Exclusion Dan Deadlock

Gambar 1.2

Skenario

Proses A membaca variable in bernilai 9. Belum sempat A menyelesaikan

proses, pedjadwalan proses B berjalan. Proses B yang juga ini mencetak segera

membaca variable in, variable in masih bernilai 9. Proses B dapat

menyelesaikan prosesnya.

Pada contoh di atas terdapat kondisi yakni dua proses atau lebih sedang

membaca atau menulis data dengan hasil akhir bergantung jalannya proses-

proses. Kondisi yang tidak dapat diprediksikan hasilnya, bergantung pada

jalannya proses-proses yang bersaing disebut kondisi pacu. Kondisi pacu harus

dihilangkan agar hasil dapat diprediksi dan tidak bergantung jalannya proses-

proses itu.

Pokok penyelesain penghilangan kondisi pacu adalah system harus mencegah

lebih dari satu proses membaca atau menulis data bersama disaat bersamaan.

Persoalan mutul exclusion adalah menjamin hanya satu proses yang sedang

menggunakan sumber daya secara bersamaan. Bagian program yang sedang

mengakses sumber daya yang dipakai bersamaan dapat menimbulkan kondisi

pacu disebut critical section/region.

Untuk mengatasi kondisi pacu harus dijamin tidak terjadi dua proses atau lebih

memasukki critical section yang sama secara bersamaan. Penyelesaian mutual

exclusion merupakan landasan pemrosesan konkuren.

Ilustrasi Aplikasi Tabungan

Misalnya : Rekening A berisi Rp 1.000.000,- yang terdaftar di kantor cabang di

Bandung. Pada suatu saat program aplikasi kantor cabang di Jakarta melayani

penyetoran Rp 3.000.000,- ke rekening A. Program aplikasi membaca saldo

akhir rekening A. Pada waktu hampir bersamaan, di kantor cabang Bandung

juga terjadi transaksi penyetoran Rp 5.000.000 ke rekening A. Program aplikasi

di Bandung memebaca saldo masih Rp 1.000.000.

o Kriteria Penyelesaian Mutual-Exclusion

Kemampuan menjamin mutual exclusion harus memenuhi kriteria-kriteria berikut :

Page 4: Mutuan Exclusion Dan Deadlock

1. Mutual exclusion harus dijamin.

2. Hanya ada satu proses yang diizinkan masuk critical section.

3. Proses yang berada di noncritical section, dilarang mem-block proses-proses lain

yang ingin masuk.

4. Tidak boleh terdapat deadlock atau startvation.

5. Ketika tidak ada proses di critical section maka proses yang ingin masuk critical

section harus diizinkan masuk tanpa waktu tunda.

6. Tidak ada asumsi mengenai kecepatan relative proses.

Kriteria 1 merupakan kriteria pokok yang harus dipenuhi. Metode yang melanggar

kriteria 1 sama sekali tidak dapat digunakan.

Metode –metode Penjamin Mutual Exclusion

a. Metode naïf, metode ini dipelajari untuk memperoleh gambaran mekanisme

penjamin mutual exclusion lebih jelas.

Metode Variabel Lock Sederhana

Metode ini meniru mekanisme penguncian pintu bahwa kunci pintu diganti

variable lock. Variable lock bernilai 0 berarti pintu tidak terkunci, bernilai 1

berarti pintu terkunci. Metode ini gagal karena pengambilan kunci (variable

lock) tidak sama dengan pengmabilan kunci pintu.

Mekanisme yang Diusulkan sebagai Berikut :

Ketika proses hendak masuk critical section, proses lebih dulu memeriksa variable

lock dengan ketentuan sebagai berikut :

Variable lock bernilai 0, proses menge-set variable lock menjadi 1.

Variable lock bernilai 1, proses menunggu sampai nilai variable lock menjadi nol.

Gambar 1.3

Page 5: Mutuan Exclusion Dan Deadlock

Skenario yang memebuat situasi kacau

Metode ini menjamin proses tidak memasuki critical section yang telah dimasuki proses

lain. Saat proses A telah membaca variable lock dan sebelum men-set variable lock

menjadi 1, penjadwal dapat menjadwalkan proses B. Proses B pun membaca variable lock

yang masih bernilai 0 dan masuk critical section, kemudian menggilir A lagi.

Gambar 2.4

Variable lock bernilai 0 maka proses A pun segera masuk critical section yang juga

sedang dimasuki B. secara bersamaan A dan B masuk critical section yang sama. Kriteria

1 terlanggar, metode ini gagal.

Metode untuk situasi Tertentu

Metode bergantian secara ketat

Dapat menggilir proses-prose yang hendak masuk critical secara bergantian terus

menerus

Page 6: Mutuan Exclusion Dan Deadlock

Gambar 2.5

Variable turn(giliaran)

Mencatat (nomor) proses yang sedang masuk criticl section. Diinisialisasi 0.

Skenario yang terjadi adalah

- Proses 0, mememriksa variable trun, bernilai 0 dan segera memasuki critical

section.

- Proses 1, menemukan variable turn brnilai 0, melakukan loop memeriksa variable

trun terus-menerus, memeriksa apakah trun telah bernilai 1.

Busy Waiting

Kondisi memeriksa variable terus-menerus, menunggu sampai suatu nilai muncul

disebut busy waiting. Hanya kalau selang waktu terus menunggu singkat maka metode

dengan busy waiting dapat digunakan.

Skenario yang membuat situasi kacau

Misalnya proses 0 adalah proses cepat, proses 1 adalah proses lambat.

Page 7: Mutuan Exclusion Dan Deadlock

Gambar 1.6

Skenario pelanggaran adalah

Proses 0 meninggalkan critical_section, men-set turn 1, mengijinkan proses 1

memasuki critical_section.

Proses 1 mengakhiri critical_section dengan cepat maka keduanya berada di

noncritical_section dengan variable turn bernliai 0.

Proses 0 kembali memasuki critical_section dengan cepat dan segera memasuki

noncritical_section maka variable turn bernilai 1.

Proses 0 hendak kembali memasuki critical_section tapi variable turn berniali 1

Proses 1 di non_critical_section memblock proses 0 sehingga tidak dapat memasuki

critical_section. Metode ini masih dapat digunakan selama diketahui memang proses-

proses harus secara bergantian memasuki critical section. Cirri-ciri ini adalah untuk

aplikasi batch sekuen seperti pada kompilator seperti pada kompilator dengan banyak

pass.

Metode dengan busy waiting

Dibagian ini kita akan melihat bermacam-macam cara untuk mencapai mutual

exclusion, sehingga ketika sebuah proses sedang memutakhirkan memori yang digunakan

bersama-sama di dalam critical regionnya, tidak akan ada proses lain masuk kedalam

critical regionnya dan membuat masalah.

Disabling Interrupts

Cara yang paling sederhana adalah dengan mentidurkan seluruh interrupts tepat

sesudah masuk kedalam critical regionnya dan mengaktifkannya sesaat sebelum

meninggalkannya. Tanpa interupt aktif maka clock interupt juga tidak akan terjadi. CPU

hanya berpindah dari proses ke proses jika ada interupt clock ataupun lainnya. Jika

interupt dimatikan maka CPU tidak akan berpindah ke proses lainnya. Sehingga jika

sebuah proses telah mematikan interupt maka ia akan dapat melakukan perubahan pada

memori bersama tanpa kuatir proses lain akan mengintervensi.

Page 8: Mutuan Exclusion Dan Deadlock

Pendekatan ini artinya memberikan kemampuan kepada pengguna untuk

menentukan kapan interupt akan diaktifkan atau dinonaktifkan. Pendekatan ini dapat

menyebabkan sebuah aplikasi akan menguasai CPU time. Kalau prosesornya banyak,

akan mengakibatkan prosesor yang melayani aplikasi tersebut akan terkunci, sementara

yang lainnya akan tetap berjalan dan dapat menggunakan memory bersama. Pada

kenyataannya kernel memerlukan kemampuan untuk mematikan interrupt untuk beberapa

instruksi sementara ia melakukan update terhadap beberapa variable. The conclusion is:

disabling interrupts is often a useful technique within the operating system itself but is

not appropriate as a general mutual exclusion mechanism for user processes.

Lock Variables

Cara kedua adalah dengan menggunakan pemecahan secara software. Sebagai contoh

kita akan menggunakan sebuah variable lock :

1. Awalnya berinilai 0.

2. Ketika sebuah proses ingin memasuki critical regionnya, maka akan menguji lock. :

1. Jika lock bernilai 0, maka ia akan merubahnya menjadi 1 dan masuk kedalam

critical region.

2. Jika lock bernilai 1, maka proses tinggal menunggu menjadi 0.

3. Artinya jika bernilai 0 maka tidak ada proses yang berada didalam critical region,

dan 1 artinya ada proses didalam critical region.

3. Permasalahan yang muncul adalah jika ada dua proses membaca variable tersebut sebagai

0 dan kemudian secara bersamaan menggantinya menjadi, maka kedua proses dapat

berada dalam critical region secara bersama-sama.

4. Jika kita membaca lock value terlebih dahulu, dan memeriksanya kembali tepat sebelum

menulis nilai, amak tetap saja tidak akan membantu. Race conditions terjadi jika proses

kedua memodifikasi nilai lock tepat setelah proses pertama melakukan check kedua.

Strict Alternation

Pendekatan ketiga adalah dengan menggunakan strict alternation. Pada gambar Fig. 2-

20, turn, awalnya bernilai 0, digunakan untuk menjejaki siapa yang memperoleh giliran

untuk masuk ke critical region dan memeriksa atau memutakhirkan shared memory.

Awalnya proses 0 memeriksa turn, ternyata bernilai 0, dan masuk ke critical region.

Proses 1 juga menemukan turn juga bernilai 0 dan memeriksa kapankah bernilai 1. Secar

terus menerus menguji variable sampai nilainya berubah : busy waiting. It should

usually be avoided, since it wastes CPU time. Only when there is a reasonable

expectation that the wait will be short is busy waiting used. lock yang menggunakan

busy waiting disebut spin lock.

Figure 2-20. A proposed solution to the critical region problem. (a) Process 0. (b)

Process 1. In both cases, be sure to note the semicolons terminating the while

statements.

Page 9: Mutuan Exclusion Dan Deadlock

Ketika proses 0 leaves meninggalkan critical region, ia merubah nilai turn menjadi 1,

untuk

memungkinkan proses 1 masuk ke critical region. Umpamakan bahwa proses 1

menyelesaikan critical regionnya dengan cepat, maka kedua proses akan berada didalam

noncritical regions, dengan nilai turn : 0. Selanjutnya process 0 menjalankan loopnya

dengan segera dan keluar dari critical regionnya dan turn bernilai 1. Sekarang kedua

proses berada diluar critical regions. Mendadak proses 0 menyelesaikan noncritical

region dan kembali ke awal loop. Tetapi tidak diijinkan untuk masuk ke critical region

sekarang, karena turn bernilai 1 dan proses 1 sibuk dengan noncritical regionnya. Maka

proses 0 akan menjalankan loop untuk menunggu giliran sampai proses 1 merubah nilai

turn menjadi 0. Put differently, taking turns is not a good idea when one of the processes

is much slower than the other.

Situasi ini melanggar aturan 3 : process 0 di block oleh proses yang sedang tidak didalam

critical regionnya. This solution requires that the two processes strictly alternate in

entering their critical regions, it is not really a serious candidate as a solution because it

violates condition 3. Dengan mengkombinasikan lock variable dan warning variables

serta bergiliran. T. Dekker (Dijkstra, 1965), adalah orang pertama yang membuat

pemecahan software untuk mutual exclusion tanpa strict alternation.

1981, G.L. Peterson menemukan cara yang lebih sederhana lagi. Algoritmanya

menggunakan dua fungsi dalam bahasa C

Page 10: Mutuan Exclusion Dan Deadlock

#define FALSE 0

#define TRUE 1

#define N 2 /* number of processes */

int turn; /* whose turn is it? */

int interested[N]; /* all values initially 0 (FALSE) */

void enter_region(int process) /* process is 0 or 1 */

{

int other; /* number of the other process */

/* the opposite of process */

interested[process] = TRUE; /* show that you are interested */

turn = process; /* set flag */

while (turn == process && interested[other] == TRUE) /* null statement */;

}

void leave_region (int process) /* process, who is leaving */

{

interested[process] = FALSE; /* indicate departure from critical region */

}

Figure 2-21

1. Sebelum masuk critical region, setiap proses memanggil enter_region dengan nomor

proses, 0 atau 1, sebagai parameternya.

2. Lalu proses akan menunggu, jika perlu sampai aman untuk masuk.

3. Setelah selesai dengan shared variables, proses akan memanggil leave_region untuk

memberitahu bahwa ia telah selesai dan mengijinkan proses lain untuk masuk.

Cara bekerjanya adalah sebagai berikut :

1. Dua buah proses tidak berada dalam critical region.

2. Process 0 memanggil enter_region. Ia merubah elemen arraynya dan merubah nilainya

menjadi 0.

Page 11: Mutuan Exclusion Dan Deadlock

3. Karena process 1 tidak akan bekerja maka enter_region akan segera kembali.

4. Jika proses 1 sekarang memanggil enter_region, ia akan menunggu sampai interested[0]

menjadi FALSE : event yang hanya terjadi jika proses 0 memanggil leave_region untuk

keluar dari critical region.

Jika kedua buah proses masuk secara simultan maka :

1. Kedua-duanya akan menyimpan nomor prosesnya kedalam turn. Yang terakhir yang akan

disimpan, yang pertama akan ditimpa.

2. Jika process 1 menyimpan terakhir maka turn bernilai 1. Jika kedua proses masuk kedalam

while, process 0 akan berjalan 0 kali dan masuk ke critical region. Process 1 loops dan

tidak masuk critical region sampai process 0 keluar dari critical region.

The TSL Instruction

Sekarang kita akan melihat cara mencapai mutex dengan hardware. Komputer memiliki

instruksi : TSL RX,LOCK (Test and Set Lock). Cara bekerjanya adalah sebagai berikut :

1. Membaca isi memory word lalu diletakkan kedalam register RX dan menyimpan nilai

nonzero memory address lock. Operasi membaca dan menyimpan merupakan satu

kesatuan. Prosesor lain tidak akan dapat menggunakan memory word sampai instruksinya

selesai. CPU yang melakukan TSL mengunci memory bus sehingga CPU yang lain tidak

dapat menggunakan memory sampai selesai.

2. TSL menggunakan shared variable, lock, untuk koordinasi access ke shared memory.

Ketika lock, setiap proses dapat dibuat bernilai 1 dengan instruksi TSL lalu

3. dilanjutkan dengan membaca dan menulisi shared memory. Ketika selesai process

mengunci lock ke 0 dengan menggunakan move instruction.

TSL REGISTER,LOCK | copy lock to register and set lock to 1

CMP REGISTER,#0 | was lock zero?

JNE enter_region | if it was non zero, lock was set, so loop

RET | return to caller; critical region entered

leave_region:

MOVE LOCK,#0 | store a 0 in lock

RET | return to caller

Figure 2-22. Entering and leaving a critical region using the TSL instruction.

1. Before entering its critical region, a process calls enter_region, which does busy waiting

until the lock is free.

Page 12: Mutuan Exclusion Dan Deadlock

2. Then it acquires the lock and returns. After the critical region the process calls

leave_region, which stores a 0 in lock.

3. As with all solutions based on critical regions, the processes must call enter_region and

leave_region at the correct times for the method to work.

4. If a process cheats, the mutual exclusion will fail.

Sleep and Wakeup

Kedua cara Peterson dan TSL dapat berjalan dengan benar, tetapi memerlukan busy waiting.

Permasalahannya :

1. Pemborosan CPU time,

2. Jika sebuah komputer memiliki 2 buah proses H, (prioritas utama) dan L prioritas rend

Aturannya : H berjalan jika dalam keadaan ready. Pada satu waktu dimana L pada criti

regionnya, H berada dalam keadaan ready to run (operasi I/Onya selesai). H sekarang

menunggu, tetapi karena L tidak pernah dijadwalkan ketika H berjalan, L tidak

pernah memperoleh kesempatan untuk untuk meninggalkan critical region, maka H

akan loops selamanya. Situasi ini disebut sebagai priority inversion problem.

Bagaimana kalau menggunakan block ? Caranya adalah pasangan sleep dan wakeup :

1. Sleep adalah sebuah system call yang menyebabkan caller to block, ditunda

berjalannyasampai proses yang lain wake (membangunkannya) .

2. Wakeup call memiliki hanya satu parameter : proses yang akan dibangunkan.

3. Atau alternativenya sleep dan wakeup masing-masing memiliki satu one parameter :

memory address yang digunakan untuk mencocokkan sleeps dan wakeups.

The Producer-Consumer Problem

Sebagai contoh bagaimana wake dan sleep digunakan mari kita lihat producer

consumer (aka bounded-buffer problem). Dua proses menggunakan buffer yang sama. :

Salah satunya, producer, meletakkan informasi kedalam buffer, dan yang lain,

consumer, mengambilnya takes it out. Juga mungkin bahwa sistem terdiri dari m

producers and n consumers, tetapi untuk pembahasan ini kita hanya akan menggunakan

satu produsen dan satu konsumePermasalahan yang timbul adalah producer akan

meletakkan data baru didalam bu

sudah penuh. Pemecahannya adalah sleep, dan wake jika consumer sudah mengambil

satu data. Jika consumer ingin mengambil satu data dari dalam buffer dan melihat bahwa

buffmaka ia akan tidur (sleep) sampai producer meletakkan data didalam buffer

danmembangunkannya (wakes it up).

Pendekatan ini ternyata membawa permasalahan race conditions. : Untuk menjejaki

jumlah item didalam buffer, kita memerlukan variable count. Jika maksimum data

Page 13: Mutuan Exclusion Dan Deadlock

didalam buffer N, maka producer akan menguki apakah count b. Jika ya producer tidur,

jika tidak producer akan menambah data dan menambah count. Demikian juga dengan

consumer : pertama-tama melihat apakah count 0. Jika ya sleep, Jika tidak 0, maka data

diambil, dan mengurangi nilai counter. Setiap pro menguji apakah yang lain harus

dibangunkan.

#define N 100 /* number of slots in the buffer */

int count = 0; /* number of items in the buffer */

void producer (void)

{

int item;

while (TRUE) { /* repeat forever */

item = produce_item(); /* generate next item */

if (count == N) sleep(); /* if buffer is full, go to sleep */

insert_item(item); /* put item in buffer */

count = count + 1; /* increment count of items in buffer */

if (count == 1) wakeup(consumer); /* was buffer empty? */

}

}

void consumer(void)

{

int item;

while (TRUE) { /* repeat forever */

if (count == 0) sleep(); /* if buffer is empty, got to sleep */

item = remove_item(); /* take item out of buffer */

count = count

t

consume_item(item); /* print item */

}

}

Source code producer-consumer : fatal race condition.

Inti dasarnya adalah : wakeup yang dikirimkan ke proses yang belum tidur akan hilang

Perbaikannya adalah dengan merubah aturan : menambahkan : wakeup waiting bit.

Ketika sebuah wakeup signal dikirimkan ke proses yang masih aktif, nilai bit ini di set.

Selanjutnya ketika process mencoba untuk tidur, dan wakeup waiting bit bernilai on, akan

dijadikan off, tetapi proses akan tetap berjalam (the process will stay awake). The wakeup

waiting bit is a piggy bank for wakeup signals.

Meskipun wakeup waiting bit kelihatannya sederhana tetapi menyimpan permasalahan

tersendiri.

Semaphores

Semaphore adalah sistem sinyal yang digunakan untuk berkomunikasi secara visual.

Dalam software, semafor adalah sebuah variabel bertipe integer yang selain saat

inisialisasi, hanya dapat diakses melalui dua operasi standar, yaitu increment dan

decrement. Semafor digunakan untuk menyelesaikan masalah sinkronisasi secara umum.

Page 14: Mutuan Exclusion Dan Deadlock

Berdasarkan jenisnya, semafor hanya bisa memiliki nilai 1 atau 0, atau lebih dari sama

dengan 0. Konsep semafor pertama kali diajukan idenya oleh Edsger Dijkstra pada tahun

1967. Operasi standar pada semafor (dalam bahasa pemrograman C) :

void kunci(int sem_value) {

while(sem_value <= 0);

sem_value--;

}

void buka(int sem_value) {

sem_value++;

}

Nama asli dari operasi tersebut sebenarnya adalah Proberen (test) dan Verhogen

(increment). Namun, sebutan untuk 2 method ini sangat beragam, antara lain sering

dikenal dengan nama : release dan acquire, P dan V , serta kunci dan buka. Dalam buku

ini akan digunakan istilah buka dan kunci. Fungsi wait dipanggil ketika thread akan

memasuki critical section-nya atau ketika thread akan memakai resource yang tersedia.

Jika sem_value kurang dari atau sama dengan 0, thread tersebut harus menunggu sampai

thread lain memanggil fungsi buka. Fungsi buka dipanggil ketika thread meningggalkan

critical section-nya atau ketika melepaskan resource yang telah digunakannya. Tentu saja

kedua operasi tersebut harus bersifat atomik karena sem_value dapat diakses oleh

beberapa proses (shared resource).

Semafor memiliki dua jenis, yaitu:

1. Binary semaphore. Semafor ini hanya memiliki nilai 1 atau 0. Sering juga disebut sebagai

semafor primitif

2. Counting semaphore. Semafor ini memiliki nilai 0, 1, serta integer lainnya.

3. Banyak sistem operasi yang tidak secara langsung mengimplementasikan semafor ini,

tetapi dengan memanfaatkan binary semaphore

Fungsi Semafor

Seperti telah disebutkan sebelumnya, semafor berfungsi untuk menangani masalah

sinkronisasi secara umum, yaitu: Mutual Exclusion. Sesuai dengan prinsip mutual

exclusion, jika suatu thread sedang berada dalam critical section-nya, thread lain harus

menunggu thread tersebut keluar dari critical section-nyasebelum dapat memasuki critical

section-nya sendiri. Di sinilah semafor digunakan, thread yang akan memasuki critical

section-nya akan memanggil fungsi kunci terlebih dahulu. Jika tidak ada thread lain yang

sedang berada dalam critical section, thread ini akan memasuki critical section-nya. Jika

terdapat thread lain yang sedang berada dalam critical section-nya, thread ini harus

menunggu.Setelah thread keluar dari critical section-nya, thread tersebut akan memanggil

fungsi buka sehingga sem_value akan naik menjadi lebih dari 0, dan satu (dari beberapa)

thread yang sedang menunggu akan mendapatkan giliran untuk memasuki critical section-

nya. Sebagai contoh, misalnya terdapat dua buah thread yang sedang berjalan bersamaan:

thread A: thread B:

count = count + 1; count = count + 1;

Page 15: Mutuan Exclusion Dan Deadlock

Thread A dan B mengakses variabel yang sama, yaitu count sehingga thread A dan B

harus berjalan satu-satu. Untuk itu digunakan semafor mutex yang berupa binary

semaphore dengan nilai awal 1.

thread A: thread B:

kunci(mutex); kunci(mutex);

count = count + 1; count = count + 1;

buka(mutex); buka(mutex);

Thread manapun yang mengeksekusi kunci terlebih dahulu akan jalan terus, sedangkan

thread yang tiba belakangan akan menunggu sampai thread yang sudah berjalan terlebih

dahulu mengeksekusi buka, setelah itu kedua thread berjalan lagi dengan normal.

Resource Controller.

Bayangkan sebuah restoran yang setiap malamnya ramai dikunjungi pelanggan. Kapasitas

restoran terbatas, tetapi pemilik restoran memiliki kebijakan bahwa semua pengunjung

yang datang akan mendapatkan kesempatan untuk makan, dengan konsekuensi yaitu

pelanggan harus sabar menunggu gilirannya.

Oleh karena itu, dikerahkanlah pegawai restoran untuk menahan tamu di luar jika

restoran penuh lalu mempersilahkan tamu masuk jika tempat telah tersedia. Dari analogi

di atas, pelanggan adalah thread, kapasitas restoran adalah resource, dan pegawai restoran

adalah semafor. Semafor menyimpan banyaknya resource yang tersedia.

Saat thread ingin memakai resource ia akan memanggil fungsi kunci. Jika resource masih

tersedia, thread bisa langsung menggunakannya, sebaliknya jika semua resource sedang

dipakai, thread tersebut harus menunggu. Setelah resource selesai dipakai thread akan

memanggil fungsi buka sehingga resource yang bebas bertambah. Contohnya dapat kita

lihat pada kasus berikut:

Terdapat tiga buah thread yang berjalan bersamaan. Resource yang tersedia hanya cukup

untuk dua buah thread.

thread A: thread B: thread C:

//critical section //critical section //critical section

Tentu saja harus diatur agar pada suatu saat hanya ada dua buah thread yang berada pada

critical section-nya. Hal ini dilakukan dengan menggunakan semafor multiplex yaitu

sebuah counting semaphore dengan nilai awal sama dengan jumlah resource yang tersedia

yaitu dua.

thread A: thread B: thread C:

kunci(multiplex); kunci(multiplex); kunci(multiplex);

//critical section //critical section //critical section

buka(multiplex); buka(multiplex); buka(multiplex);

Page 16: Mutuan Exclusion Dan Deadlock

Jika dua buah thread sedang berada dalam critical section, thread berikutnya yang akan

memasuki critical section harus menunggu kedua thread tersebut selesai untuk dapat

memasuki critical section-nya.

Sinkronisasi Antar-Proses. Ada kalanya suatu thread memerlukan resource yang

dihasilkan oleh thread lainnya. Oleh karena itu dibutuhkan suatu mekanisme untuk

mengatur urutan eksekusi thread. Mekanisme ini dilakukan dengan memanfaatkan

semafor. Sebagai contoh, misalnya terdapat dua buah thread yang sedang berjalan

bersamaan:

thread A: thread B:

count = count + 1; count = count * 2;

Nilai awal dari variabel count adalah 5, nilai akhir yang diinginkan adalah 12, oleh karena

itu thread A harus dieksekusi sebelum thread B. Agar hal ini dapat terjadi dibutuhkan

suatu semafor

mutex yang merupakan sebuah binary semaphore dengan nilai awal 0.

thread A: thread B:

count = count + 1; kunci(mutex);

buka(mutex); count = count * 2;

Thread B akan menunggu sampai eksekusi thread A selesai sebelum melanjutkan. Jika

kita cermati fungsi kunci, thread akan terus berada dalam waiting loop sampai sem_value

naik lebih dari 0. Padahal, di dalam loop tersebut thread tidak melakukan tugas apa-apa.

Inilah yang disebut dengan busy waiting (semafor jenis ini disebut dengan semafor

spinlock). Hal ini tentu saja akan berakibat buruk terhadap kinerja CPU, karena loop

tersebut membutuhkan CPU cycle, sementara loop tersebut tidak menghasilkan apa-apa,

jadi sama saja dengan menyia-nyiakan CPU cycle. Untuk mengatasi hal ini, dibuatlah

modifikasi dari semafor, yaitu dengan menambahkan waiting queue pada masing-masing

semafor. Tujuannya adalah agar thread yang harus menunggu dipindahkan ke waiting

queue dan kegiatannya dihentikan sementara.

Ketika thread keluar dari critical section-nya, thread tersebut akan memanggil fungsi buka

yang akan mengeluarkan satu (dari beberapa) thread yang berada dalam waiting queue

lalu membangunkannya untuk kemudian memasuki critical section-nya.

Struktur semafor ini menjadi (masih dalam bahasa C):

void buka(int sem_value) {

sem_value++;

if(sem_value <= 0)

{

/*keluarkan satu thread dari waiting queue*/

/*aktifkan thread tersebut*/

Page 17: Mutuan Exclusion Dan Deadlock

}

}

void kunci(int sem_value)

{

sem_value--;

if(sem_value < 0)

{

/*masukkan thread ke dalam waiting queue*/

/*blok thread tersebut*/

}

}

Berbeda dengan semafor yang biasa, pada semafor yang telah dimodifikasi ini sem_value

bisa menjadi negatif. Jika kita renungkan maknanya, ternyata ketika semafor bernilai

negatif, nilai tersebut melambangkan banyaknya thread yang berada pada waiting queue

semafor tersebut.

Keuntungan menggunakan semafor:

1. Dari segi programming, penanganan masalah sinkronisasi dengan semafor

umumnya rapi dan teratur, sehingga mudah untuk dibuktikan kebenarannya

2. Semafor diimplementasikan dalam hard code sehingga penggunaannya

bersifat portabel.

Metode dengan dukungan perangkat keras

1. Metode pematian interupsi

cara pematian interupsi mengakibatkan

pemroses tidak dapat beralih ke proses lain karena interupsi clock dimatikan sehingga

penjadwal pun tidak diekseskusi.

proses dapat memakai memori bersama tanpa takut intervensi proses lain.

kelemahan utama

bila proses yang mematikan interupsi mengalami gangguan maka proses tidak akan

pernah menghidupkan interupsi kembali.

jika terdapat dua pemroses atau lebih, mematikan interupsi hanya berpengaruh pada

pemroses yang mengeksekusi intruksi itu.

pemroses-pemroses lain masih bebas memasuki critical section yang sedang dimasuki

proses lain. teknik ini tidak dapat diterapkan pada sistem multiprocessor.

Teknik mematikan interupsi dapat digunakan untuk proses-proses kernel yang sangat kritis

yang tidak boleh diintervensi proses lain seperti saat memodifikasi PCB.

Pemroses Intel mendukung mekanisme ini dengan menyediakan intruksi sebagai berikut:

cli - mematikan interupsi

sti - mengaktifkan kembali interupsi

Page 18: Mutuan Exclusion Dan Deadlock

2. Metode dengan intruksi Test and Set Lock

Pemroses-pemroses yang memakai memori bersama maka pengaksesan terhadap suatu

memori dijaga pada tingkat perangkat keras

agar pemroses lain tidak boleh mengakses suatu lokasi yang sama di saat yang sama.

Perancang perangkat keras menyediakan intruksi-intruksi atomik yang tidak dapat

diinterupsi, intruksi dilaksanakan sampai selesai. intruksi

ini biasanya dilaksanakan dengan cara mengunci bus sehingga pemroses-pemroses lain

tidak dapat menggunakan bus. Beragam intruksi

disediakan perancang pemroses guna membantu implementasi mutual exclusion. intruksi-

intruksi itu adalah:

tsl(test set and lock)

tas atau ts(test and set),digunakan IBM S/360,keluarga Motorola M68000,dan lain-lain.

cs(compare and set),digunakan IBM 370 Series

xchg(exchange),digunakan Intel x86

dan sebagainya

Intruksi ini membaca isi memori ke register dan kemudian menyimpan nilai bukan nol

ke alamat memori itu. tidak ada pemroses lain yang dapat

mengakses memori itu sampai intruksi berakhir. Pemroses yang mengeksekusi intruksi tsl

mengunci bus memori, mencegah pemroses-pemroses lain

mengakses memori.

Dengan intruksi tsl, kita dapat menggunakan flag untuk koordinasi pengaksesan ke

memori bersama. Ketika flag bernilai 0, proses boleh menge-set-nya

menjadi 1 menggunakan intruksi tsl dan kemudian maasuk critical section. Ketika telah

selesai dengan critical region, proses menge-set flag dengan 0.

Dengan adanya intruksi ini maka dapat dibuat prosedur

Prosedur Tsl_to_critical_section

Prosedur Tsl_leave_critical_section

Gambar 1.7

3. Metode dengan intruksi Exchange (XCHG)

Intruksi dapat digunakan untuk implementasi mutual exclusion. Dengan intruksi xchg tersebut

dapat dibuat

Page 19: Mutuan Exclusion Dan Deadlock

Prosedur Xchg_to_critical_section

Prosedur Xchg_leave_critical_section

Sebelum mengeksekusi seluruh proses maka flag diinisialisasi dengan nilai 0. Proses sebelum

masuk critical_section, proses menge-set dengan kunci (key)

proses itu sebagai 1 kemudian memanggil xchg_to_enter_section. Proses melakukan busy

waiting sampai terbebas. Selesai dengan critical section, proses

memanggil xchg_leave_critical_section menukarkan nilai 0 ke flag agar proses lain dapat

memasuki critical section itu.

Karakteristik Pendekatan dengan Intruksi Mesin

Penggunaan instruksi mesin untuk memaksakan mutual exclusion mempunyai keunggulan

dan kelemahan.

Keunggulan:

sederhana dan mudah diverifikasi

dapat diterapkan ke sembarang jumlah proses

dapat digunakan untuk mendukung banyak critical region

Kelemahan:

merupakan metode dengan busy waiting, sangat tidak efisien. Selagi proses menunggu

memasuki critical region, proses berlanjut mengkonsumsi waktu pemroses.

adanya busy waiting memungkinkan deadlock dan startvation.

Dampak Adanya Busy Waiting

Busy waiting mempunyai keterbatasan yaitu tidak dapat diterapkan pada sistem dengan

penjadwalan berprioritas. Metode dengan busy waiting dapat menimbulkan deadlock.

Page 20: Mutuan Exclusion Dan Deadlock

Aturan penjadwalan berprioritas selalu menjadwalkan proses-proses berprioritas lebih tinggi

di antrian proses Ready

Misalnya terdapat dua proses,

1. Proses H berprioritas tinggi

2. Proses L berprioritas rendah

Metode dengan Semaphore

Semaphore mempunyai dua properti, yaitu:

1. Semaphore dapat diinisialisasi dengan nilai bukan negatif

2. Terdapat dua operasi terhadap semaphore yaitu Down dan Up.

Operasi Down

Operasi ini menurunkan nilai semaphore. Jika nikai semaphore menjadi bukan positif maka

proses yang mengeksekusinya di-block.

operasi down adalah atomik yang tidak dapat diinterupsi sebelum selesai. Menurunkan nilai,

memeriksa nilai, menempatkan proses pada antrian dan mem-block sebagai interupsi tunggal.

Operasi UP

Operasi menaikkan nilai semaphore, memindahkan dari antrian dan menempatkan satu proses

ke senarai Ready tidak dapat diinterupsi.

Mutual Exclusion dengan semaphore

Adanya semaphore mempermudah persoalan mutual exclusion. Sebelum masuk critical

section, proses melakukan Down. Bila berhasil maka proses masuk critical section. Bila tidak

berhasil

maka proses di-block pada semaphore itu. Proses yang berada di critical section keluar dan

melakukan operasi UP dan menjadikan proses yang di-block menjadi Ready dan berlanjut

sehingga operasi Down-nya berhasil.

Implementasi Semaphore

Operasi UP dan Down adalah primitif atomik. Beragam skema dapat diterapkan untuk

implementasi Up dan Down.

Skema implementasi dapat dilakukan secara perangkat lunak atau dengan dukungan

perangkat keras.

DEADLOCK

Sekumpulan proses berkondisi deadlock bila setiap proses yang berada di kumpulan

itu menunggu suatu kejadian yang hanya dapat dilakukan proses lain yang juga berada di

kumpulan itu. Sehingga proses-proses menunggu kejadian yang tidak akan pernah terjadi.

Deadlock terjadi ketika proses-proses mengakses sumber daya secara ekslusif. Semua

deadlock yang terjadi melibatkan persaingan untuk memperoleh sumber daya ekslusif oleh

dua proses atau lebih. Seperti pada system pengendalian proses waktu nyata, maka harus

membayar semua kemahalan karena keberadaan deadlock akan mengakibatkan kekacauan

system.

1. Model Deadlock

Urutan kejadian operasi perangkat masukan/keluaran adalah

Page 21: Mutuan Exclusion Dan Deadlock

Meminta (request) : meminta layanan perangkat masukan/keluaran.

Memakai (use) : memakai perangkat masukan/keluaran.

Melepaskan (release) : melepaskan pemakaian perangkat masukan/keluaran.

Model deadlock dua proses dan dua sumber daya. Deadlock dapat digambarkan

sebagai graph. Misalnya Dua proses p0 dan p1, Dua sumber daya R0 dan R1.

Page 22: Mutuan Exclusion Dan Deadlock
Page 23: Mutuan Exclusion Dan Deadlock

GAMBAR 7.1

P0 meminta sumber daya R0, ditandai dengan busur berarah dari proses p0 ke

sumber daya R0. Sumber daya R1 dialokasikan ke p0 ditandai busur berarah dari

sumber daya R1 ke proses p1.

Skenario yang menimbulkan deadlock :

P0 dialokasikan R0

P1 dialokasikan R1, kemudian

P0 sambil masih menggenggam R0, meminta R1.

P1 sambil masih menggenggam R1, meminta R0.

Kejadian ini mengakibatkan deadlock karena sama-sama proses P0 dan P1 akan saling

menunggu. Graph deadlock ini digambarkan sebagai graph melingkar. Terjadinya deadlock

ditandai munculnya graph melingkar.

GAMBAR 7.2

Page 24: Mutuan Exclusion Dan Deadlock

Deadlock tidak hanya terjadi pada satu atau dua proses saja namun juga melibatkan

lebih dari dua proses.

A. Syarat-syarat Terjadinya Deadlock

1. Mutual Exclusion

Sumber daya diberikan tepat satu proses.

2. Kondisi Genggam Dan Tunggu

Proses-proses yang menggenggam sumber daya, menunggu sumber daya baru.

3. Kondisi Non-Preemption

Sumber daya harus secara eksplisit dilepaskan dari proses yang menggenggamnya

tanpa paksa.

4. Kondisi Menunggu secara Sirkuler

Harus ada rantai sirkuler dari dua proses atau lebih, masing-masing menunggu

sumber daya yang digenggam oleh anggota berikutnya pada rantai itu.

B. Metode-metode Mengatasi Deadlock

Metode untuk mengatasi deadlock dikelompokkan menjadi tiga, yakni :

1. Metode Pencegahan (Deadlock Prevention)

Pencegahan merupakan solusi yang bersih dipandang dari sisi tercegahnya

deadlock. Dan metode inilah yang paling banyak dipakai. Namun, metode ini

sering menghasilkan penggunaan sumber daya yang buruk.

2. Metode Penghindaran (Deadlock Avoidance)

Sistem operasi akan memeriksa semua permintaan sumber dayasecara hati-

hati. Jika system operasi mengetahui bahwa alokasi sumber daya menimbulkan

risiko deadlock,maka system operasi akan menolak pengaksesan itu. Dengan

demikian menghindari terjadinya deadlock.

3. Metode Deteksi dan Pemulihan dari Deadlock (Deadlock detection and

recovery)

Tujuan dari metode ini adalah memeriksa apakah telah terjadi deadlock dan

menentukan proses-proses dan sumber daya-sumber daya yang terlibat

deadlock secara presisi. Setelah dapat ditentukan, system dipulihkan dari

deadlock dengan metode pemulihan sehingga system beroperasi kembali.

C. Pencegahan Deadlock

Strategi-strategi untuk meniadakan terjadinya deadlock :

Tiap proses harus meminta semua sumber daya yang diperlukan dan tidak

berlanjut sampai semuanya diberikan.

Jika proses telah memegang sumber daya tertentu, maka untuk permintaan

berikutnya harus melepas dulu sumber daya yang dipegangnya. Jika

diperlukan, proses meminta kembali sekaligus dengan sumber daya yang baru.

Memberi pengurutan linear terhadap tipe-tipe sumber daya. Jika proses telah

dialokasikan suatu tipe data, maka proses hanya boleh meminta sumber daya-

sumber daya pada urutan berikutnya.

C.1 Meniadakan Mutual Exclusion

Page 25: Mutuan Exclusion Dan Deadlock

Deadlock disebabkan terdapatnya pengaksesan eksklusif terhadap sumber daya. Cara

untuk mengakali pengaksesan eksklusif adalah melakukan spooling perangkat-perangkat yang

harus didedikasikan ke suatu proses. Hanya dengan spooling permintaan-permintaan itu

diantrikan di harddisk dan akan dilayani satu per satu.

Terdapat masalah terhadap teknik ini adalah

Tidak semua sumber daya eksklusif dapat di-spooling.

Kompetisi terhadap ruang harddisk untuk spooling dapat menuntun ke

deadlock. Abstraksi ini berarti kembali menjadi kondisi yang mengharuskan

mutual exclusion namun mutual exclusion menjadi di level lebih bawah yaitu

level suatu lokasi memori bukan lagi satu perangkat.

Mutual exclution benar-benar tidak dapat dihindari, hanya mampu diperkecil lama

waktu berlangsungnya.

C.2 Meniadakan Syarat Hold and Wait

Metode untuk meniadakan syarat hold and wait dapat dilakukan dengan cara:

1. Mengalokasikan semua sumber daya atau tidak sama sekali

Proses hanya dilayani permintaanya bila semua sumber daya yang diperlukan tersedia.

Teknik ini berbasis pada kaidah memperoleh semua atau tidak sama sekali.

Jika semua sumber daya tersedia,proses dialokasikan semua sumber daya yang

diperlukannya berjalan sampai selesai.

Jika tidak tersedia sedikitnya satu sumber daya maka proses harus menunggu

sampai semua sumber daya yang diperlukannya tersedia untuk dialokasikan

padanya.

Masalah :

Sukar mengetahui lebih dulu semuasumber daya yang diperlukan suatu proses

karena diawal proses tidak diketahui berapa sumber daya yang akan

diperlukan.

Cara ini dapat mengakibatkan penggunaan sumber daya yang tidak efisien.

2. Hold and Release

Yaitu setiap kali terjadi permintaan suatu sumebr daya maka proses harus melepas

sumber daya lain yang telah digunakan. Pada satu saat,hanya satu sumberyang

dialokasikan.

Masalah :

Teknik ini tidak mungkin, sebab terdapat proses yang mensyaratkan harus memegang

beberapa sumber daya sekaligus untuk melanjutkan eksekusinya.

Page 26: Mutuan Exclusion Dan Deadlock

C.3 Meniadakan Non-preemption

Peniadaan non-preemption mencegah proses-proses lain harus menunggu. Seluruh

proses menjadi preemption agar tidak ada kejadian saling menunggu.

C.4 Meniadakan Menunggu Sirkular

Kondisi inidapatditiadakan dngan bermacamcara, antara lain :

Proses hanya dibolehkanmenggenggam satu sumber daya pada satu saat telah

dibahas

Teknik ini tidak dimungkinkan karena terdapat proses yang mengharuskan

memegang lebih darisatu sumber daya pada saat yang sama untuk menyelesaikan

prosesnya.

Penomoran global semua sumber daya.

Proses dapat meminta proses kapanpun tapi permintaan harus dibuat berurut secara

numerik. Cara ini tidak akan menimbulkan siklus.

C.5 Penghindaran Deadlock

Gagasan dasar penghindaran deadlock adalah hanya member akses ke permintaan

sumber daya yang tidak mungkin menimbulkan deadlock. Strategi ini biasanya

diimplementasikan dengan pengalokasi sumber daya memeriksa dampak-dampak pemberian

akses ke suatu permintaan.

Jika pemberian akses sumber daya tidak mungkin menuju deadlock, sumber daya

diberikan ke peminta.

Jika memungkinkan timbulnya deadlock, proses yang meminta di-suspend sampai

suatu waktu permintaannya aman diberikan.

Agar dapat mengevaluasi safe-nya state system individu, penghindaran deadlock

mengharuskan semua proses menyatakan jumlah kebutuhan sumberdaya maksimum sebelum

eksekusi. Begitu eksekusi dimulai, tiap proses meminta sumber daya saat diperlukan sampai

batas maksimum yang dinyatakan di awal. Proses-proses yang menyatakan kebutuhan sumber

daya melebihi kapasitas total system tidak dapat dieksekusi.

Pengalokasi sumber daya mencatat jumlah sumber daya teralokasi dan jumlah sumber

daya masing-masing tipe, serta mencatatjumlah sumber daya tersisa yang diklaim tapi belum

diminta proses. Proses yang memintasumber daya yang tidak tersedia harus menunggu

sementara. Jika sumber daya yang diminta tersedia, pengalokasi sumber daya memeriksa

apakah pemberian dapat menuntun ke deadlock, dengan memeriksa apakah proses-proses

yang telah aktif dapat selesai.

a. State Selamat dan State Tak Selamat

State dinyatakan sebagaistate selamat (safe state) jika tidak deadlock dan terdapat cara

untuk memenuhi semua permintaan yang ditunda tanpa menghasilkan deadlock dengan

menjalankan proses-proses secara hati-hati mengikuti suatu urutan tertentu.

Page 27: Mutuan Exclusion Dan Deadlock

Contoh :

Pada sistem dengan 10 sumber daya setipe, proses A memerlukan sumber daya

maksimum sebanyak 10, sedang saat ini menggenggam 2. Proses B memerlukan sumber daya

maksimum sebanyak 7 sedang saat ini menggenggam 3 sumber daya.masih tersedia 4 sumber

daya.

GAMBAR 7.3

Pada gambar tersebut dinyatakan sebagai safe karena terdapat barisan pengalokasian

yang dapat memungkinkan semua proses selesai. Dengan penjadwalan secara hati-hati,

system dapat terhindarkan dari deadlock. Barisan tersebut adalah :

Langkah 1 : Alokasikan empat sumber daya ke proses C, sehingga sumber daya tersedia

tinggal 1 dan nantikan sampai proses C berakhir.

Maka setelah proses C selesai menjadi

Langkah 2: Alokasikan lima sumber daya ke proses B, nantikan proses B sampai berakhir.

Maka setelah proses B selesai menjadi

Page 28: Mutuan Exclusion Dan Deadlock

Langkah 3: Alokasikan delapan sumber daya ke proses A , nantikan proses A samapi

berakhir.

Maka setelah proses A selesai menjadi

Maka ketiga proses tersebut dengan penjadwalan hati-hati dapat menyelesaikan proses

mereka dengan sempurna.

State Tak Selamat (unsafe state )

State dinyatakan sebagai state tak selamat jika tidak terdapat cara untuk memenuhi semua

permintaan yang saat ini ditunda dengan menjalankan proses-proses dengan suatu urutan.

Contoh:

Gambar di bawah ini adalah seperti gambar 7-2 menunjukkan state selamat. State ini dapat

berubah menjadi state tak selamat bila alokasi sumber daya tak terkendali.

State tersebut dapat menjadi state tak selamat apabila

- Dua permintaan sumber daya oleh proses A dilayani,kemudian

- Permintaan satu sumber daya oleh proses B dilayani

Maka state menjadi

Page 29: Mutuan Exclusion Dan Deadlock

State ini pada gambar 7-4 adalah state tak selamat, pada state ini tidak terdapat barisan

pengalokasian yang dapat membuat semua proses selesai.

Langkah 1 : Alokasikan satu sumber daya ke proses B, sehingga sumber daya tersedia tinggal

1 dan nantikan sampai proses B berakhir.

Maka setelah proses B selesai menjadi

Saat ini hanya tersedia tiga sumber daya sementara dua proses yang sedang aktif masinmasing

membutuhkan enam dan empat sumber daya.

Algoritma Banker oleh Disjkstra

Algoritma ini disebut algoritma Banker karena memodelkan banker di kota kecil yang

berurusan dengan sekumpulan nasabah yang memohon kredit. Pada Algoritma Banker

ini, kondisi mutual exclusion, hold-and-wait, dan no-preemption diijinkan dan

proses-proses melakukan klaim penggunaan eksklusif sumber daya-sumber dayayang

diperlukan. Proses-proses diijinkan menggenggam sumber daya sambil meminta dan

menunggu sumber daya lain serta sumber daya itu tidak diijinkan dipreempt proses

lain.

Sistem hanya memberikan permintaan yang menghasilkan state selamat. Permintaan

proses yang akan menghasilkan state tak selamat secara berulang ditolak sampai

permintaan dapat dipenuhi. Tentunya karena system selalu memelihara agar dalam

state safe, cepat atau lambat (yaitu dalam waktu yang berhingga) semua permintaan

data dipenuhi dan semua proses dapat berakhir. Implementasi algoritma ini dijelaskan

secara rinci pada buku Stallings [STA-95].

Kelemahan Algoritma Banker

Kelemahan algoritma banker adalah sebagai berikut: [TAN-92,STA-95,DEI-90]

1. Proses-proses jarang mengetahui di awal proses jumlah maksimum sumber daya

yang akan diperlukan.

2. Jumlah proses tidak tetap secara dinamis beragam begitu pemakai-pemakai baru

login dan logout.

Page 30: Mutuan Exclusion Dan Deadlock

3. Sumber daya yang dihitung sebagai tersedia data saja tiba-tiba ditanggalkan

sehingga sebenarnya menjadi tidak tersedia.

4. Proses-proses harus independen , yaitu urutan proses-proses dieksekusi tidak

dibatasi kebutuhan sinkronisasi antarproses.

5. Algoritma menghendaki meberikan semua permintaan selama waktu yang

berhingga.

6. Algoritma menghendaki client-client mengembalikan sumber daya setelah suatu

waktu yang berhingga.

DETEKSI DAN PEMULIHAN DEADLOCK

Deteksi Adanya Deadlock

Deteksi deadlock adalah teknik untuk menentukan apakah deadlock terjadi serta

mengidentifikasi proses-proses dan sumber daya-sumber daya yang terlibat deadlock.

Umumnya algoritma-algoritma deteksi yang digunakan adalah menentukan

keberadaan menunggu sirkular (circular wait). Penggunaan algoritma deteksi

deadlock melibatkan overhead pada saat berjalan karena secara periodik dijalankan

untuk mendeteksi menunggu sirkular. Sembarang algoritma pendeteksian siklus pada

graph berarah dapat digunakan.

Pemulihan dari Deadlock

Begitu system terdapat deadlock , deadlock harus diputuskan dengan menghilangkan

suatu syarat perlu atau lebih. Biasanya beberapa proses akan kehilangan sebagian atau

semua kerja yang telah dilakukan. Hal ini merupakan ongkos yang harus dibayar

dibanding terjadinya deadlock yang berarti semua proses tidak menghasilkan apapun.

Pemulihan dari deadlock dirumitkan oleh faktor-faktor berikut :

1. Belum tentu dapat menetukan adanya deadlock secepatnya.

2. Kebanyakan system tidak memiliki fasilitas atau mempunyai fasilitas-fasilitas

buruk untuk men-suspend proses, menghilangkan dari system dan me-resume

roses lain waktu. Pada system nyata yang harus berfungsi terus menerus , proses-

proses tidak data di-suspend dan di-resume.

3. Bahkan jika terdapat kemampuan suspend dan resume yang efektif

Kemampuan ini melibatkan sejumlah overhead berarti dan memerlukan perhatian

operator yang berkemampuan tinggi.

4. Pemulihan memerlukan sejumlah kerja yang berarti.

Pada system operasi dengan hanya tiga state dasar ( Running, Ready , Blocked ),

maka tidak ada cara lain kecuali dilakukan penyingkiran terhadap proses itu. Proses

benar-benar hilang dari memori dan harus dimuat kembali.

Teknik pemulihan yang biasa digunakan adalah menghilangkan (dengan suspend atau

kill) proses-proses dari system dan pengklaiman kembali (reclaim) sumber daya-

sumber daya yang dipegang proses-proses itu. Proses yang dihilagkan biasanya akan

cacat , tapi proses-proses lain dapat menyelesaikan prosesnya. Kadang perlu

menyingkirkan beberapa proses sampai tidak terjadi deadlock (yaitu tidak membentuk

siklus). Istilah “pemulihan” sebenarnya kurang berarti di sini karena yang terjadi

sesungguhnya adalah penyingkiran beberapa proses “untuk memberi manfaat”

prosesproses lain.

Page 31: Mutuan Exclusion Dan Deadlock

Pendekatan berikut dapat dilakukan pemulihan deadlock. Pendekatan-pendekatan

dituliskan terurut kecanggihan penyelesaiannya.[STA-95]

1. Abaikan (singkirkan) semua proses yang terlibat deadlock. Teknin merupakan cara

mudah dan solusi yang paling sering dipilih.

2. Backup semua proses yang terlibat deadlock ke suatu checkpoint yang

didefinisikan sebelumnya dan dijalankan kembali semua prose situ.

3. Secara berurutan abaikan proses-proses samapi deadlock tidak ada lagi. Urutan

proses yang dipilih untuk disingkirkan berdasar criteria ongkos minimum.

4. Secara berurutan preempt sumber daya-sumber daya smapai tidaka ada deadlock

lagi. Sebagaimana item 3, pemilihan berdasar ongkos yang digunakan dan

algoritma deteksi harus dijalankan setelah tiap preempt.

Untuk item 3 dan 4 kriteria pemilihan proses yang akan disingkirkan atau di-suspend

adalah dengan criteria-kriteria sebagai berikut :

1. Waktu pemrosesan yang telah dijalankan paling kecil

2. Jumlah baris keluaran yang diproduksi paling kecil.

3. Mempunyai estimasi sisa waktu eksekusi terbesar.

4. Jumlah total sumber daya terkecil yang telah dialokasikan.

5. Prioritas terkecil.

Strategi penanggulangan deadlock terpadu

Masing-masing teknik mempunyai keunggulan dan kelemahan , maka daripada

berusaha merancang fasilitas system operasi dengan satu strategi penanggulangan

deadlock maka lebih efisien menggunakan strategi-strategi berbeda untuk situasi

berbeda. Silberschatz [SIL-94] menyarankan satu pendekatan teradu, yaitu

- Kelompokkan sumber daya-sumber daya menjadi sejumlah kelas sumber daya.

- Gunakan strategi pengurutan linear seperti yang didefinisikan pada pencegahan

menunggu sirkular.

- Dalam satu kelas sumber daya , gunakan algoritma yang paling cocok untuk kelas-

kelas sumber daya.

Page 32: Mutuan Exclusion Dan Deadlock