NIM : 8020170120

PENGERTIAN DAN CONTOH CRITICAL SECTION

PENGERTIAN 
Critical Section adalah sebuah segmen kode dari sebuah proses yang mana sumber daya diakses bersamaanTerdiri 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

CONTOH CRITICAL SECTION 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


Tidak ada komentar:

Posting Komentar