Critical
Section adalah sebuah segmen kode dari
sebuah proses yang mana sumber daya diakses bersamaan. Terdiri dari:
- Entry Section: kode yang digunakan untuk masuk ke dalam critical section
- Critical Section: Kode di mana hanya ada satu proses yang dapat dieksekusi pada satu waktu
- Exit Section: akhir dari critical section, mengizinkan proses lain
- Remainder Section: kode istirahat setelah masuk ke critical section
Solusi untuk
mengatasi masalah Critical Section, yaitu:
a). Mutual exclution : Jika proses pi sedang mengeksekusi critical section-nya maka tidak ada proses lain yang dapat mengeksekusi dalam critical section mereka.
b). Progress : Jika tidak ada proses yang
sedang dieksekusi dalam critical section dan ada beberapa proses yang ingin
masuk ke critical section mereka, maka pemilihan proses yang akan masuk ke
critical section berikutnya tidak bias ditunda
c). Bounded Waiting :Suatu keterikatan harus ada
pada sejumlah proses yang diijinkan masuk ke critical section mereka, setelah
adanya proses yang meminta masuk ke critical section dan sebelum permintaan itu
diterima.
Contoh pada algoritma
Cara-cara memecahkan masalah
• Hanya dua
proses, Po dan P1
• Struktur umum dari proses
adalah Pi (proses lain Pj)
do {
critical section
remainder section
} while(1);
Algoritma 1
Disini kita akan mencoba
membuat sebuah rangkaian solusi-solusi dari permasalahan yang makin meningkat
kerumitannya.
Pada semua contoh, i adalah
proses yang sedang berjalan, j adalah proses yang lain. Pada contoh ini code.
i. Shared variables
• int turn
Initially turn=0
• turn =
i, Pi can enter its critical section
ii. Process Pi
do {
while(turn!=1);
critical section
turn=j;
remainder section
} while(1);
iii. Memenuhi mutual
exclusion, tapi bukan progress.
Algoritma 2
FLAG untuk setiap proses
yang memberi STATE:
Setiap proses memantau suatu
flag yang mengindikasikan ia ingin memasuki critical section. Dia memeriksa
flag poses lain dan tidak akan memasuki critical section bila ada proses lain
yang sedang masuk.
i. Shared variables
• boolean flag[2];
initially flag [0] = flag [1] = false
• flag [i] = true , Pi ready to enter its critical section
ii. Process Pi
do {
flag[i]:=true;
while(turn!=1);
critical section
turn=j;
remainder section
} while(1);
iii. Memenuhi mutual
exclusion, tapi tidak memenuhi progess.
Algoritma 3
FLAG untuk meminta izin masuk:
· Setiap
proses mengeset sebuah flag untuk meminta izin masuk. Lalu setiap proses
mentoggle bit untuk mengizinkan yang lain untuk yang pertama
· Kode
ini dijalankan untuk setiap proses i
Shared variables
F boolean flag[2];
initially flag[0] = flag[1] =
false
F flag[i] = true;
Pi ready to enter its critical
section
· Gabungan
shared variables dari algorima 1 dan 2
· Process
Pi
do {
flag[i]:=true;
turn = j;
while(flag[j] and turn = j);
critical section
flag[i] = false;
remainder section
} while(1);
· Memenuhi
ketiga persyaratan, memecahkan persoalan critical section untuk kedua
proses
Algoritma Bakery
Critical Section untuk n buah
proses:
Sebelum memasukkan proses
ke critical section, proses menerima sebuah nomor. Pemegang nomor terkecil
masuk ke critical section. Jika ada dua proses atau lebih menerima nomor
sama, maka proses dengan indeks terkecil yang dilayani terlebih dahulu untuk
masuk ke critical section. Skema penomoran selalu naik secara berurut contoh:
1, 2, 3, 3, 3, 3, 4, 5,...
boolean choosing [n];
long long long int number [n];
/* 64 bit maybe okay for about
600 years */
Array structure elements are
initiallized to false and 0 respectively
while (true) {
choosing[i] = true;
number[i] = max(number[0], ...
[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))) {}
}
number[i] = 0
}
Solves the critical-section
problem
for n process
Referens :
http://teknikkom15.blogspot.com/2012/04/critical-section.html
https://caridokumen.com/download/sinkronisasi-dan-deadlock-_5a4523abb7d7bc7b7aa70c3f_pdf
Kenapa terjadi "critical section problem" ?
BalasHapusmakasih udah sharing yah kak
BalasHapusapp axis
Kenapa hanya satu proses yang bisa masuk ke critical section
BalasHapus