Anda di halaman 1dari 23

SINKRONISASI DAN DEADLOCK Sinkronisasi adalah proses pengaturan jalannya beberapa proses pada saat yang bersamaan.

Tujuan utama sinkronisasi adalah menghindari terjadinya inkonsistensi data karena pengaksesan oleh beberapa proses yang berbeda (mutual exclusion) serta untuk mengatur urutan jalannya proses-proses sehingga dapat berjalan dengan lancar dan terhindar dari deadlock atau starvation. Sinkronisasi umumnya dilakukan dengan bantuan perangkat sinkronisasi. Dalam bab ini akan dibahas beberapa perangkat sinkronisasi, yaitu : TestAndSet(), Semafor, dan Monitor.

Sinkronisasi ProteksiOS: 1. Independent process tidak terpengaruh atau dapat mempengaruhi eksekusi/data proses lain. 2. Concurrent Process OS: mampu membuat banyak proses pada satu saat Proses-proses bekerja-sama: sharing data, pembagian tugas, passing informasi dll Proses => mempengaruhi proses lain dalam menggunakan data/informasi yang sengaja di-share 3. Cooperating process sekumpulanprosesyang dirancanguntuksalingbekerjasamauntukmengerjakantask tertentu. Keuntungan kerja sama antar proses Information sharing: file, DB => digunakan bersama Computation speed-up: parallel proses Modularity: aplikasi besar=> dipartisi dalam banyak proses. Convenience: kumpulan proses=> tipikal lingkungan kerja. Cooperating Process Bagaimana koordinasi antar proses? Akses/Update data Tujuan program/task: integritas, konsistensi data dapatdijamin Menjamin konsistensi data:

Program/task-task dapat menghasilkan operasi yang benar setiap waktu Deterministik: untuk input yang sama hasil harus sama (sesuai dengan logika/algroitma program). Contoh: Producer Consumer Duaproses: producer => menghasilkan informasi; consumer => menggunakan informasi Sharing informasi: buffer => tempat penyimpanan data unbounded-buffer, penempatan tidak pada limit praktis dari ukuran buffer bounded-buffer diasmumsikan terdapat ukuran buffer yang tetap

Bounded Buffer A. Implementasibuffer: 1. IPC: komunikasi antar proses melalui messages membaca/menulis buffer 2. Shared memory: programmer secara eksplisi tmelakukandeklarasidata yang dapat diakses secara bersama. 3. Buffer dengan ukurann => mampu menampungn data Producer mengisi data buffer => increment counter(jumlahdata) Consumer mengambil data buffer => decrement counter Buffer, counter=> shared data (update oleh2 proses) varbuffer array in, out: 0..n-1; counter: 0..n; in, out, counter := 0; C. Producer process repeat produce an item in nextp while counter = n do no-op; buffer [in] := nextp;

B. Shared data type item = ;

in := in + 1 mod n; counter := counter +1; until false; D. Consumer process repeat while counter = 0 do no-op; nextc:= buffer [out]; out := out + 1 mod n; counter := counter 1; consume the item in nextc until false; 1. Apakah terdapat jaminan operasi akan benar jika berjalan concurrent? 2. Misalkan: counter = 5 Producer: counter = counter+ 1; Consumer: counter = counter-1; Nilaiakhirdaricounter?

3. Operasicon current P & C => a. Operasidarihigh level language => sekumpulan instruksi mesin: increment counter Load Reg1, Counter Add Reg1, 1 Store Counter, Reg1
4. decrement counterLoad Reg2, CounterSubtract Reg2, 1Store Counter, Reg2 5. EksekusiP & C tergantung scheduler (dapat gantian)T0: Producer : Load Reg1,

Counter (Reg1 = 5)T1: Producer : Add Reg1, 1 (Reg1 = 6)T2: Consumer: LoagReg2, Counter (Reg2 = 5)T3: Consumer: Subtract Reg1, 1 (Reg2 = 4)T4:

Producer: Store Counter, Reg1 (Counter = 6)T5: Consumer: Store Counter, Reg2 (Counter = 4) Race Condition 1. Concurrent C & P Shared data counterdapat berakhir dengan nilai: 4, atau5, atau6 Hasilnya dapat salah dan tidak konsisten Race Condition: Keadaan dimana lebih dari satu proses meng-update data secaraconcurrentdan hasilnya sangat bergantung dari urutan proses mendapat jatahCPU (run) Hasilnya tidak menentu dan tidak selalu benar Mencegah race condition: sinkronisasi proses dalam meng-update shared data Sinkronisasi Sinkronisasi: Koordinasi akses ke shared data, misalkan hanya satu proses yang dapat menggunakah shared var. Contoh operasi terhadap var. counter harus dijamin di-eksekusi dalam satu kesatuan( atomik) : counter := counter + 1; counter := counter -1; Sinkronisasi merupakan issue penting dalam rancangan/implementasi OS (shared resources, data, dan multitasking). MasalahCritical Section n proses mencoba menggunakan shared data bersamaan Setiap proses mempunyaicodeyang mengakses/ manipulasi shared data tersebut=> critical section Problem: Menjamin jika ada satu proses yang sedang

eksekusi pada bagian critical sectiontidak ada proses lain yang diperbolehkan masukke code critical section dari proses tersebut. Structure of process Pi

SolusiMasalahCritical Section Ide: Mencakup pemakaian secara exclusive dari shared variable tersebut Menjamin proses lain dapat menggunakan shared variable tersebut Solusicritical section problemharus memenuhi: 1.Mutual Exclusion: Jika proses Pi sedang eksekusi pada bagiancritical section (dari proses Pi) maka tidak ada proses proses lain dapat eksekusi pada bagian critical section dari prosesproses tersebut. 2.Progress: Jika tidak ada proses sedang eksekusi pada critical sectionya dan jika terdapat lebih dari satu proses lain yang ingin masuk ke critical section, maka pemilihan siapa yang berhak masuk ke critical section tidak dapat ditunda tanpa terbatas. Solusi(cont.) 3.Bounded Waiting: Terdapat batasan berapa lama suatu proses harus menunggu giliran untuk mengakses critical section jika seandainya proses lain yang diberikan hak akses ke critical section. Menjamin proses dapat mengakses ke critical section (tidak mengalami starvation: proses seolah berhenti menunggu request akses ke critical section diperbolehkan). Tidak ada asumsi mengenai kecepatan eksekusi proses proses n tersebut SolusiSederhana: Kasus2 proses

Hanya 2 proses Strukturumumdariprogram code Pi danPj: repeat entry section critical section exit section reminder section until false; Software solution: merancang algoritma program untuk solusi critical section Proses dapat mengunakan common var. untuk menyusun algoritma tsb. Algoritma1 Shared variables: intturn; initially turn = 0 turn -iPi dapat masuk ke critical section Process Pi do{ while (turn !=i) ; critical section turn = j; reminder section } while (1); Mutual exclusion terpenuhi, tetapi menentang progress Algoritma2

Shared variables booleanflag[2]; initially flag [0] = flag [1] = false. flag [i] = truePi siap dimasukkan kedalam critical section Process Pi do { flag[i] := true; while (flag[j]) ; critical section flag [i] = false; remainder section } while (1); Mutual exclusion terpenuhi tetapi progress belum terpenuhi. Algoritma3 Kombinasishared variables darialgoritma1 and 2. Process Pi do{ flag [i]:= true; turn = j; while (flag [j] and turn = j) ; critical section flag [i] = false; remainder section } while (1); Ketiga kebutuhan terpenuhi, solusi masalah critical section pada dua proses

AlgoritmaBakery Critical section untukn proses Sebelum proses akan masuk kedalamcritical section, maka proses harus mendapatkan nomor(tiket). Proses dengan nomor terkecil berhak masuk ke critical section. Jika proses Pi dan Pj menerima nomor yang sama, jika i< j, maka Pi dilayani pertama; jika tidak Pj dilayani pertama Skema penomoran selalu dibuat secara berurutan, misalnya1,2,3,3,3,3,4,5... AlgoritmaBakery (2) Notas < urutan lexicographical (ticket #, process id #) (a,b) < c,d) jikaa< cataujikaa= cand b < d max (a0,, an-1) dimana a adalah nomor, k, seperti padakaiuntuki-0, , n1 Shared data varchoosing: array [0..n 1] of boolean number: array [0..n 1] of integer, Initialized: choosing =: false ; number => 0 AlgoritmaBakery (3) do { choosing[i] = true; number[i] = max(number[0], number[1], , number [n 1])+1; choosing[i] = false;

for (j = 0; j < n; j++) { while (choosing[j]) ; while ((number[j] !=0) && (number[j,j] < number[i,i])) ; } critical section number[i] = 0; remainder section } while (1); Sinkronisasi Hardware Memerlukan dukungan hardware (prosesor) Dalam bentuk instruction set khusus: test-and-set Menjamin operasi atomic (satu kesatuan): test nilai dan ubah nilai tersebut Test-and-Set dapat dianalogikan dengan kode: Function Test-and-Set (var target : Boolean; Begin Test-and-Set := target; target := true; end; Test-and-Set (mutual exclusion) Mutual exclusion dapatditerapkan: Gunakanshared data, variabel: lock: boolean(initially false) lock: menjagacritical section Process Pi: do {

while (TestAndSet(lock)) ; critical section lock = false; remainder section } Semaphore Perangkatsinkronisasiyang tidakmembutuhkanbusy waiting Semaphore S integer variable Dapatdijaminakseskevar. S olehduaoperasiatomik: wait (S): while S 0 do no-op; S := S 1; signal (S): S := S + 1; Contoh: n proses Shared variables varmutex: semaphore initially mutex= 1 Process Pi do { wait(mutex); critical section signal(mutex); remainder section } while (1); ImplementasiSemaphore

DidefinisikansebuahSemaphore dengansebuahrecord typedefstruct{ intvalue; structprocess *L; } semaphore; Diasumsikanterdapat2 operasisederhana: blockmenhambatprosesyang akanmasuk wakeup(P)memulaieksekusipadaprosesP yang diblock ImplementasiSemaphore (2) OperasiSemaphore-nyamenjadi: wait(S): S.value--; if (S.value < 0) { add this process toS.L; block; } signal(S): S.value++; if (S.value <= 0) { remove a processP fromS.L; wakeup(P); } MasalahKlasikSinkronisasi Bounded-Buffer Problem

Readers and Writers Problem Dining-Philosophers Problem Bounded-Buffer Problem Shared data semaphore full, empty, mutex; Initially: full = 0, empty = n, mutex= 1 Bounded-Buffer Problem : Producer-Consumer

Readers-Writers Problem Shared data semaphore mutex, wrt; Initially mutex= 1, wrt= 1, readcount= 0 Readers-Writers Problem (2)

Dining-Philosophers Problem

Shared data semaphore chopstick[5]; Semuainisialisasibernilai1 Dining-Philosophers Problem Philosopher i: do { wait(chopstick[i] ) wait(chopstick[(i+1) % 5]) eat signal(chopstick[i]); signal(chopstick[(i+1) % 5]);

think } while (1); SolusiTingkatTinggi Motif: Operasiwait(S) dansignal(S) tersebarpadacode program => manipulasilangsungstrukturdata semaphore BagaimanajikaterdapatbantuandarilingkunganHLL (programming) untuksinkronisasi? Pemrogramantingkattinggidisediakansintakssintakskhususuntukmenjaminsinkronisasiantarproses, thread Misalnya: Monitor & Condition Conditional Critical Region Monitor Monitor mensinkronisasisejumlahproses: suatusaathanyasatuyang aktifdalammonitor danyang lain menunggu Bagiandaribahasaprogram (mis. Java). Tugascompiler menjaminhaltersebutterjadidenganmenerjemahkankelow level synchronization(semphore, instruction set dll) Cukupdenganstatement (deklarasi) suatusection/fungsiadalahmonitor => mengharuskanhanyaadasatuprosesyang beradadalammonitor (section) tsb Monitor (2)

Monitor (3) Proses-prosesharusdisinkronisasikandidalammonitor: Memenuhisolusicritical section. Prosesdapatmenunggudidalammonitor. Mekanisme: terdapatvariabel(condition) dimanaprosesdapatmenguji/menunggusebelummengaksescritical section varx, y: condition Monitor (4) Condition: memudahkanprogrammer untukmenuliscode padamonitor. Misalkan: varx: condition ; Variabelcondition hanyadapatdimanipulasidenganoperasi: wait() dansignal() x.wait() jikadipanggilolehsuatuprosesmakaprosestsb. akansuspend -sampaiadaproseslain yang memanggil: x. signal() x.signal() hanyaakanmenjalankan(resume) 1 prosessajayang sedangmenunggu(suspend) (tidakadaproseslain yang wait makatidakberdampakapapun)

SkemaMonitor

.Sumber daya dalam sebuah sistem computer hanya dapat digunakan oleh satu proses dalam satu waktu. Contoh: pencetak, tape drive, slot dalam tabel inode (sistem berkas) Sistem operasi mempunyai kemampuan memberikan akses eksklusif secara temporal pada beberapa sumber daya. Pada banyak aplikasi, proses memerlukan akses eksklusif ke beberapa sumber daya, tidak hanya satu saja. (dan sesuai urutan tertentu) Contoh: penggunaan 2 proses untuk melakukan pemindaian dokumen dan menuliskannya ke dalam CD-RW. Jika 2 proses tersebut meminta sumber daya yang sedang dimiliki masing- masing, sehingga kedua proses berstatus tertahan atau blocked dan saling tergantung satu sama lain, maka akan muncul kondisi deadlock. Dalam lingkup yang lebih luas seperti jaringan, keterlibatan sumber daya yang tersebar dan dapat diakses oleh banyak orang memungkinkan terjadi deadlock pula. Deadlock dapat terjadi tidak hanya pada perangkat masukan dan keluaran saja. Contoh: pada sistem basis data ketika sebuah program dapat mengunci beberapa rekaman untuk menghindari kondisi balapan. Sumber Daya Deadlock muncul ketika melibatkan banyak proses dan satu atau lebih proses diberikan akses ekslusif pada perangkat, berkas, dan sebaliknya.

Secara umum obyek yang diakses oleh proses, kita sebut sebagai sumber daya. Sumber daya dapat berupa perangkat keras atau informasi. Sumber daya apapun dapat digunakan oleh sebuah proses dalam waktu tertentu. Terdapat dua tipe sumber daya: preemptable dan nonpreemptable. Contoh: Penggunaan Jalan

Lalu lintas hanya satu arah. Setiap bagian jembatan dapat dilihat sebagai sebuah sumber daya. Jika deadlock muncul, hal ini dapat diatasi dengan meminta mundur satu mobil (preempt resources and rollback) Beberapa mobil dapat pula mundur jika deadlock muncul. Kondisi kelaparan/starvation mungkin saja terjadi. Kebanyakkan sistem operasi tidak mencegah atau berurusan dengan deadlock.

Deadlock Definisi: kondisi pada beberapa proses yang masing-masing proses tersebut dalam kondisi menunggu sebuah kejadian yang hanya disebabkan oleh proses lainnya. Tidak ada proses yang berjalan, tidak ada proses yang melepas sumber daya, dan tidak ada proses yang diaktifkan kembali. Deadlock muncul pada sumber daya yang nonpreemptable Deadlock dapat dicegah dengan mengalokasikan ulang sumber daya dari sebuah proses ke proses yang lainnya. Catatan: jumlah proses dan jumlah/jenis sumber daya yang dimiliki/diminta tidaklah penting.

Urutan Penggunaan Sumber Daya 1) Permintaan sumber daya 2) Penggunaan sumber daya 3) Pelepasan sumber daya Kondisi Penyebab Deadlock Terdapat empat kondisi yang harus ada agar terjadi deadlock (Coffman et al., 1971): Mutual exclusion: sebuah sumber daya hanya digunakan oleh 1 proses Hold and wait: sebuah proses dapat menggunakan sumber daya tambahan No preemption: sumber daya yang sudah dimiliki oleh sebuah proses tak dapat digunakan oleh proses lainnya, sampai proses pertama yang menggunakan selesai Circular wait: kondisi satu atau lebih proses meminta sumber daya yang digunakan oleh proses lain dan membentuk sebuah siklus/lingkaran

Model Deadlock (1)

Dimodelkan dengan graf berarah. Proses disimbolkan dengan lingkaran, sumber daya disimbolkan dengan kotak. (a) Sumber daya R digunakan oleh proses A; (b) Proses B meminta sumber daya S; (c) Kondisi deadlock dengan circular wait.

Model Deadlock (2)

Model Deadlock (3)

Strategi untuk Mengatasi Deadlock Mengabaikan semua masalah. Mendeteksi deadlock dan memulihkan kondisi. Menghindari deadlock secara dinamis. mengalokasi sumber daya secara hatihati. Mencegah deadlock. Mengurangi secara terstruktur satu dari 4 kondisi yang menyebabkan deadlock. Algoritma Burung Onta Algoritma paling sederhana: ngumpet dan purapura tak tahu masalah yang terjadi. Matematikawan: deadlock tidak dapat diterima secara total. Insinyur: seberapa sering masalah muncul? Seberapa sering sistem crash karena alasan lain? seberapa serius deadlock yang terjadi?

Diterapkan pada kondisi deadlock yang jarang terjadi dan usaha untuk menghindarinya mahal. Unix dan Windows menggunakan algoritma ini. Kenyamanan vs. ketepatan. Algoritma Deteksi Deadlock (1)

Mencatat kepemilikan dan permintaan sumber daya Siklus yang ditemukan pada graf menandakan adanya deadlock Algoritma Deteksi Deadlock (2)

Struktur data dibutuhkan oleh algoritma deteksi deadlock Algoritma Deteksi Deadlock (3)

Algoritma Pemulihan Deadlock Pemulihan melalui preemption Ambil sebuah sumber daya dari proses lain Tergantung dari kealamiahan sebuah sumber daya Pemulihan melalui rollback Melakukan checkpoint secara periodik Gunakan status checkpoint yang tersimpan Jalankan kembali proses yang ditemukan deadlock Pemulihan dengan mematikan proses Cara paling kasar untuk menyelesaikan deadlock Matikan satu proses dalam siklus deadlock Proses lain yang tidak dimatikan akan mendapatkan sumber daya Pilih proses yang dapat dijalankan dari awal Algoritma Menghindari Deadlock Resource trajectories Safe dan Unsafe states Algoritma Bankir Resource Trajectories

Pencegahan Deadlock (1) Tidak mungkin menghindari deadlock, karena kita membutuhkan informasi tentang permintaan sumber daya yang tidak diketahui Akhirnya kita kembali ke 4 kondisi yang harus ada agar deadlock terjadi

Jika kita dapat memastikan salah satu dari 4 kondisi tersebut tidak ada, maka deadlock tidak mungkin terjadi, secara terstruktur (Havender,1968.) Pencegahan Deadlock (2) Mencegah mutual exclusion Beberapa perangkat seperti pencetak dapat menjadi pengumpul pekerjaan (spooling.) Hanya daemon pencetak yang mempunyai akses ke sumber daya pencetak. Prinsip: (1) hindari pemberian sumber daya ketika sangat tidak dibutuhkan; (2) usahakan untuk meminimalkan proses yang memiliki sumber daya Mencegah hold and wait Sebelum dijalankan, sebuah proses harus meminta sumber daya apa saja yang dibutuhkan. Masalah yang muncul: proses tidak tahu pasti apa yang dibutuhkan saat dijalankan, mengikat sumber daya yang seharusnya dapat digunakan oleh proses lainnya. Variasi lain: proses harus harus menyerahkan semua sumber daya, kemudian baru memintanya sekaligus ketika dibutuhkan Pencegahan Deadlock (3) Mencegah kondisi no preemption Bukan pilihan yang pas/layak Contoh kasus: ketika proses A sedang mengakses sumber daya pencetak, kemudian di tengah jalan diambil proses B Mencegah circular wait Urutkan sumber daya secara normal Buat graf sumber daya Pencegahan Deadlock (4) Mencegah circular wait (cont.)

Isu-Isu Lain (1) Twophase locking. Langkah pertama: kunci semua rekaman yang ingin ditulis sekaligus. Jika ada rekaman yang belum terkunci, lakukan lagi. Jika langkah pertama berhasil, maka lakukan langkah kedua seperti melakukan pemutakhiran. Lepas kunci jika telah selesai. Algoritma ini sesuai jika pemrogram dapat mengatur program yang dapat dihentikan dan dijalankan ulang. Isu-Isu Lain (2) Nonresource deadlock. Ada pada dua proses yang menunggu proses lain selesai dijalankan dan dapat terjadi pada penggunaan semaphore yang keliru dalam urutannya. Kelaparan/Starvation. Masalah yang hampir mendekati deadlock. Memberikan sumber daya pada pekerjaan yang paling cepat diselesaikan. Cocok untuk sistem dengan banyak pekerjaan yang cepat/pendek waktunya. Solusi: kebijakan FCFS Referensi Silberschatz, A., et.al., Operating System Concepts, Seventh Edition, Wiley, 2005 Tanenbaum, A., Modern Operating Systems, Second Edition, Prentice Hall, 2008

Anda mungkin juga menyukai