Ads 468x60px

welcome

welcome

welcome

welcome

welcome

Minggu, 01 Juli 2012

MUTUAL EXCLUSION

PAPER MUTUAL EXCLUSION
Oleh : Yusuf Machsar
NRP : 100411100026



















ABSTRAK
Mutual exclusion dapat mencegah proses kongkurensi (concurrency) dikerjakan bersamaan oleh resource (sumber daya). Sehingga dibutuhkan penanganan proses kongkurensi tersebut agar dapat dikerjakan oleh resource. Metode penyelesaian masalah mutual exclusion ini adalah mengatur proses yang akan memasuki critical section. Jika proses yang sedang mengerjakan critical section, maka proses lain tidak boleh memasuki critical section. Ada beberapa metode yang dapat meyelesaikan permasalahan ini. Prinsip kerja antara satu metode dengan metode lainnya didalam mengatur penanganan mutual exclusion adalah berbeda. Dalam bahasan ini akan membahas bagaimana kinerja beberapa metode tersebut dalam menangani masalah mutual exclusion jika terjadi proses kongkurensi.















PENDAHULUAN
Perkembangan sistem komputer mendatang adalah menuju ke sistem multiprocessing, multip rogramming, terdistribus i dan paralel yang mengharuskan adanya proses-proses yang berjalan bersama dalam waktu yang bersamaan. Hal demikian merupakan masalah yang perlu perhatian dari perancang sistem operasi. Kondisi dimana pada saat yang bersamaan terdapat lebih dari satu proses disebut dengan kongkurensi (concurrency) atau proses-proses yang kongkuren. Proses-proses yang mengalami kongkuren dapat berdiri sendiri (independen) atau dapat saling berinteraksi, sehingga membutuhkan sinkronisasi atau koordinasi proses yang baik. Untuk penanganan kongkuren, bahasa pemograman saat ini telah memiliki mekanisme kongkurensi dimana dalam penerapannya perlu dukungan sistem operasi dimana bahasa berada.















PEMBAHASAN

1.1 MUTUAL EXCLUSION
Merupakan kondisi dimana terdapat sumber daya yang tidak dapat dipakai bersama pada waktu yang bersamaan (misalnya : printer, disk drive). Kondisi demikian disebut sumber daya kritis, dan bagian program yang menggunakan sumber daya kritis disebut critical region / section. Hanya satu program pada satu saat yang diijinkan masuk ke critical region. Pemrogram tidak dapat bergantung pada sistem operasi untuk memahami dan memaksakan batasan ini, karena maksud program tidak dapat diketahui oleh sistem operasi. Hanya saja, system operasi menyediakan layanan (system call) yang bertujuan untuk mencegah proses lain masuk ke critical section yang sedang digunakan proses tertentu. Pemrograman harus menspesifikasikan bagian-bagian critical section, sehingga sistem operasi akan menjaganya. Pentingnya mutual exclusion adalah jaminan hanya satu proses yang mengakses sumber daya pada suatu interval waktu.
Pemaksaan atau pelanggaran mutual exclusion menimbulkan :
Ø  Deadlock
Ø  Starvation
Critical Section
Segmen kode yang mengakses data yang digunakan secara bersama-sama itu disebut critical section. Bagaimana menghindari race conditions? Kunci untuk mencegah masalah ini da situasi yang lain yang melibatkan shared memory, shared file, and shared sumber daya yang lain dalah menemukan beberapa jalan untuk mencegah lebih dari satu proses untuk melakukan proses writing dan reading kepada shared data pada saat yang sama. Dengan kata lain kita membutuhkan mutual exclusion, sebuah jalan yang menjamin jika sebuah proses sefang menggunakan shared files, proses lain dikeluarkan dari pekerjaan yang sama. Kesulitan yang terjadi karena proses 2 menggunakan shared variabel sebelum proses 1 menyelesaikan tugasnya.
Walaupun dapat mencegah race conditions, tapi tidak cukup untuk melakukan kerjasama antar proses secara paralel dengan baik dan efisien dalam menggunakan shared data. Kita butuh 4 kondisi untuk menghasilkan solusi yang baik :
Ø  Tidak ada dua proses secara bersamaan masuk kedalam critical section.
Ø  Tidak ada asumsi mengenai kecepatan atau jumlah cpu.
Ø  Tidak ada proses yang berjalan diluar critical section yang dapat mengeblok proses lain.
Ø  Tidak ada proses yang menunggu selamanya untuk masuk critical section.
Tiga kondisi untuk menentukan mutual exclusion  :
Ø  Tidak ada dua proses yang pada saat bersamaan berada di critical section.
Ø  Tidak ada proses yang berjalan diluar critical region yang bisa menghambat proses lain.
Ø  Tidak ada proses yang tidak bisa masuk ke critical region.
Solusi masalah critical section
  1. Ide :
Ø  Mencakup pemakaian secara “exclusive” dari shared variable tersebut
Ø  Menjamin proses lain dapat menggunakan shared variable tersebut
  1. Solusi “critical section problem” harus memenuhi:
Ø  Mutual Exclusion: Jika proses Pi sedang “eksekusi” pada bagian “critical section” (dari proses Pi) maka tidak ada proses proses lain dapat “eksekusi” pada bagian critical section dari proses-proses tersebut.
Ø  Progress: Jika tidak ada proses sedang eksekusi pada critical section-nya 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.
  1. 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 se-olah berhenti menunggu request akses ke critical section diperbolehkan).
Ø  Tidak ada asumsi mengenai kecepatan eksekusi  proses proses n tersebut.

1.2  Metode Penyelesaian Masalah Mutual Exclusion.
Ada beberapa metode penyelesaian masalah mutual exclusion, antara lain :
  1. a. Sinkronisasi.
Algoritma 1
Pada bagian ini akan dibatasi pada aplikasi ke 2 proses yaitu Pi dan Pj , atau P0dan P1
Secara umum, jika ada proses Pimaka akan digunakan proses Pj sebagai proses lainnya, dengan j=1-i. Ada beberapa algoritma penyelesaian mutual exclusion dengan  menggunakan sinkronisasi, yakni
Kedua proses akan berbagi suatu variabel bertipe integer yaitu turn yang diinisialisaikan dengan 0 (atau 1). Jika turn=0, maka proses P0 diijinkan untuk
mengeksekusi critical section. Struktur P0 terlihat pada gambar dibawah ini :
repeat
while turn ≠0 do
critical section
turn := 1
remainder section
until false
Solusi ini sudah menunjukkan adanya mutual exclusion, karena pada suatu saat hanya ada satu proses yang masuk critical section. Namun belum menunjukkan adanya progress dan bounded waiting. Sebagai contoh:
Jika P0 meninggalkan critical section, maka nilai turn=1 yang berarti bahwa P1  siap untuk masuk ke critical section;
Ø  P1 selesai menggunakan critical section dengan cepat maka baik P1  maupun P0 beradapada remainder section dengan nilai turn=0.
Ø  P0 kembali menggunakan critical section dengan cepat dan segera masuk ke  remainder section dengan nilai turn=1.
Ø  P0 hendak kembali menggunakan critical section namun nilai turn=1.Terlihat bahwa P1 yang berada pada remainder section memblok P0 sehingga tidak dapat memasuki critical section. Hal ini menentang progress, yaitu proses diblok oleh proses yang tidak berada di critical section.
Algoritma 2
Masalah pada algoritma-1 tidak memberika cukup informasi mengenai status proses. Hanya mempertimbangkan yang masuk critical section. Untuk mengatasi masalah ini variabel “turn” diganti dengan :
var flag : array [0 ..1] of boolean;
Semua elemen array diinisialisasikan dengan false. Jika flag[0] bernilai true, maka nilai itu akan mengindikasikan bahwa P0 siap memasuki critical section. Struktur P0 terlihat pada gambar dibawah ini.
repeat
flag[0]:=true;
while flag[1] do
critical section
flag[0]
remainder section
until false
Pada algoritma ini, proses P0 pertama kali menetapkan flag[i] = true, nilai ini
mengindikasikan bahwa P0 siap memasuki critical section. Kemudian P0 mengecek untuk menyakinkan P1 tidak akan memasuki tidak kan memasuki critical section. Jika P1  juga telah memasuki critical section, maka P0 harus menunggu sampai P1 tidak membutuhkan critical section lagi (sampai flag[1] =false). Secepatnya P0 memasuki critical section. Pada exit section, P0 akan mengeset flag[0] menjadi false, hal ini mengijinkan proses la in (jika sedang menunggu) untuk memasuki critical section.Pada solusi ini, kondisi mutual exclusion telah dipenuhi. Namun progress belum juga dipenuhi. Untuk menggambarkan hal tersebut dapat dilihat :
T0           P0 menetapkan flag[0] = true;
T1           P1 menetapkan flag[1] = true;
Sekarang P0 dan P1 bersama-sama ada di statement while.
Algoritma –3 (Peterson)
Algoritma ketiga ini diperkenalkan oleh peterson. Pada dasarnya, algoritma ini merupakan kombinasi antara algoritma –1 dan algoritma-2. Proses ini membutuhkan 2 variabel, yaitu :
Var   Flag :array [0 .. 1] of boolean;
Turn : 0 .. 1;
Nilai awal flag[0] = flag = false, dan nilai turn (0 atau 1). Struktur proses P1 seperti terlihat pada gambar dibawah ini :
repeat
flag[0]:=true;
turn:=1;
while (flag[1] and turn=1) do
critical section
flag[0]
remainder section
until false
Untuk masuk ke critical section, proses P0 mengeset flag[0] = true, dan melihat apakah ada proses lain yang mencoba masuk critical section (turn=1).
Algoritma Bakery
Critical section untuk n proses:
Sebelum masuk ke critical section. Proses mendapatkan nomor. Yang memiliki nomor paling kecil lebih dahulu memasuki critical section. Jika proses Pi dan Pj menerima nomor, jika i<j, maka Pi lebih dahulu masuk  \critical section, sebaliknya Pj yang lebih dahulu masuk critical section. skema penomoran selalu membangkitkan angka yang meningkat, seperti 1,2,3,4,5,6, …
shared data
var choosing : array[0..n-1] of boolean;
number : array[0..n-1] of integer;
Struktur data diinisialisaikan dengan false dengan nilai 0. Struktur proses P1 seperti terlihat pada gambar dibawah ini :
repeat
choosing[i]:=true;
number[i]:=max(number[0], number[1], …, number[n-1])+1;
choosing[i]:=false;
for j:= 0 to n-1
do begin
while choosing[j] do no_op;
while number[j] ? 0
and (number[j],j) < (number[i],i) do no_op;
end;
critical section
number[i]:=0;
remainder section
until false
Algoritma Dekker
Algoritma ini diperkenalkan oleh Dekker, seorang matematikawan dari Belanda. Algoritma ini memiliki ciri-ciri khusus sebagai berikut:
Tidak memerlukan instruksi-instruksi perangkat keras khusus.
Proses yang beroperasi di remainder section tidak dapat mencegah proses lain yang ingin masuk critical section.
Proses yang ingin masuk critical section akan segera memasuki kawasan tersebut jika dimungkinkan.
bool Fail = false;
int share = 6;
int x = 0;
int y = 0;
bool z = true;
chan q_0_1 = [0] of {bit};
chan q_0_2 = [0] of {bit};
proctype A() {
bool dapat_dishare = true;
do
::atomic{
z ->
x = 10;
};
::atomic{
dapat_dishare ->
q_0_1?0;
share = share+1;
dapat_dishare = false;
q_0_1?1;
};
::atomic{
!dapat_dishare ->
q_0_2?0;
dapat_dishare = true;
q_0_2?1;
};
od;
}
proctype B() {
bool dapat_dishare = false;
do
::atomic{
z ->
y = 11;
};
::atomic{
dapat_dishare ->
q_0_2!0;
share = share-1;
dapat_dishare = false;
q_0_2!1;
};
::atomic{
!dapat_dishare ->
q_0_1!0;
dapat_dishare = true;
q_0_1!1;
};
od;
}
init {
atomic{
run A();
run B();
};
}

  1. b. Semaphore
Model semaphore secara umum untuk penyelesaian mutual exclusion adalah sebagai berikut :
mtype = { idle, masuk, critical, keluar };
#define state mtype
bool Fail = false;
bool semaphore = false;
proctype USER_0() {
state user_state = idle;
do
::atomic{
user_state==idle ->
if
::user_state = idle;
::user_state = masuk;
fi;
};
::atomic{
((user_state==masuk)&&(!semaphore)) ->
user_state = critical;
semaphore = true;
};
::atomic{
((user_state==masuk)&&(semaphore)) ->
user_state = masuk;
};
::atomic{
user_state==critical ->
if
::user_state = critical;
::user_state = keluar;
fi;
};
::atomic{
user_state==keluar ->
user_state = idle;
semaphore = false;
};
od;
}
proctype USER_1() {
state user_state = idle;
do
::atomic{
user_state==idle ->
if
::user_state = idle;
::user_state = masuk;
fi;
};
::atomic{
((user_state==masuk)&&(!semaphore)) ->
user_state = critical;
semaphore = true;
};
::atomic{
((user_state==masuk)&&(semaphore)) ->
user_state = masuk;
};
::atomic{
user_state==critical ->
if
::user_state = critical;
::user_state = keluar;
fi;
};
::atomic{
user_state==keluar ->
user_state = idle;
semaphore = false;
};
od;
}
init {
atomic{
run USER_0();
run USER_1();
};
}


1.3  Mencegah Mutual Exclusion
Mutual exclusion benar-benar tak dapat dihindari. Hal ini dikarenakan tidak ada
sumber daya yang dapat digunakan bersama-sama, jadi sistem harus membawa
sumber daya yang tidak dapat digunakan bersama-sama.


DAFTAR PUSTAKA

1. Hariyanto, Bambang. Sistem Operasi. Edisi 2. Bandung. Informatika. 1999.
2. Kusumadewi, Sri. Sistem Operasi. Yogyakarta, J & J Learning, 2000
3. Tenembaum, Andrew S., “Modern Operating System”, Englewood Cliffs, New Jersey :
    Prentice-Hall Inc., 1992.
4. stalling, William, “Operating System”, 2nd Englewood Cliffs, New Jersey : Prentice-Hall
    Inc., 1995.


Reade more >>

Dining Philosophers


Paper Dining Philosophers
Oleh : Yusuf Machsar
NRP : 100411100026





















ABSTRAK
Pada awalnya kebanyakan orang memakai konsep-konsep sinkronisasi yang sederhana yang didukung oleh hardware, seperti pemakaian interrupt atau pemakaian rutin-rutin yang mungkin telah diimplementasi oleh hardware. Pada tahun 1967, Djikstra mengajukan suatu konsep pememakai suatu variable integer untuk menghitung banyaknya proses yang sedang aktif atau yang sedang tidak aktif. Tipe dari variable ini dinamakan semaphore. kebanyakkan semaphore juga digunakan untuk sinkronisasi dalam komunikasi antar device perangkat.Pada jurnal ini semaphore digunakan untuk menyelesaikan masalah singkronisasi dining philosophers.Dining philosophers tu sendiri adalah situasi dimana 5 philosopher duduk di meja makan untuk makan spageti, setiap philosopher diberi satu piring spageti dan diberi satu sumpit, untuk memakan spageti tersebut dibutuhkan dua sumpit untuk menyelesaikan masalah ini maka variable semaphore ini diterapkan pada setiap sumpit agar sumpit bisa di share ke-philosopher yang lainya.















PENDAHULUAN

Sistem operasi merupakan suatu program yang bertindak sebagai interface antara user dan sistem komputer. Sistem operasi ini harus mampu melakukan pengontrolan penggunaan resource. Dalam proses perancangan sistem operasi, terdapat suatu landasan umum yang disebut dengan kongkurensi. Proses-proses disebut kongkuren jika proses-proses (lebih dari satu proses) berada pada saat yang sama. Keadaan ini disebut dengan multitasking dari sistem operasi. Proses-proses kongkuren dapat sepenuhnya tak bergantung dengan lainnya tapi dapat juga saling berinteraksi. Proses-proses yang berinteraksi memerlukan sinkronisasi agar terkendali dengan baik. Namun, pada proses-proses kongkuren yang berinteraksi, terdapat beberapa masalah yang harus diselesaikan seperti deadlock dan sinkronisasi. Salah satu masalah klasik yang dapat menggambarkan masalah tersebut adalah Dining Philosophers Problem.
Dining Philosophers Problem dapat diilustrasikan sebagai berikut, terdapat lima orang filsuf yang akan makan. Di meja disediakan lima buah sumpit. Jika filsuf lapar betul, maka ia akan mengambil dua buah sumpit, yaitu di tangan kanan dan kiri. Namun adakalanya hanya diambil sumpit satu saja. Jika ada filsuf yang mengambil dua buah sumpit, maka ada filsuf yang harus menunggu sampai sumpit tersebut ditaruh kembali. Di dalam problema ini ada kemungkinan terjadi deadlock, yaitu suatu kondisi dimana dua proses atau lebih tidak dapat meneruskan eksekusinya.
Penulis bermaksud untuk menyelesaikan masalah tersebut, dengan cara merancang suatu perangkat lunak yang dapat mensimulasikan proses kerja dari problem tersebut sekaligus mensimulasikan pencegahan masalah deadlock tersebut.







PEMBAHASAN

1.1  Dining Philosophers Problem
Dining Philosophers Problem merupakan salah satu masalah klasik dalam sinkronisasi. Dining Philosohers Problem dapat diilustrasikan sebagai berikut, terdapat lima orang filsuf yang sedang duduk mengelilingi sebuah meja. Terdapat lima mangkuk mie di depan masing-masing filsuf dan satu sumpit di antara masing-masing filsuf. Para filsuf menghabiskan waktu dengan berpikir (ketika kenyang) dan makan (ketika lapar). Ketika lapar, filsuf akan mengambil dua buah sumpit (di tangan kiri dan tangan kanan) dan makan. Namun adakalanya, hanya diambil satu sumpit saja. Jika ada filsuf yang mengambil dua buah sumpit, maka dua filsuf di samping filsuf yang sedang makan harus menunggu sampai sumpit ditaruh kembali. Hal ini dapat diimplementasikan dengan wait dan signal.

            Meskipun solusi ini menjamin bahwa tidak ada 2 tetangga yang makan bersama-sama, namun masih mungkin terjadi deadlock, yaitu jika tiap-tiap filsuf lapar dan mengambil sumpit kiri, maka semua nilai sumpit=0, dan kemudian tiap-tiap filsuf akan mengambil sumpit kanan, maka akan terjadi deadlock. Ada beberapa cara untuk menghindari deadlock, antara lain:
a.      Mengijinkan paling banyak 4 orang filsuf yang duduk bersama-sama pada satu meja.
b.      Mengijinkan seorang filsuf mengambil sumpit hanya jika kedua sumpit itu ada.
c.      Menggunakan suatu solusi asimetrik, yaitu filsuf pada nomor ganjil mengambil sumpit kiri dulu baru sumpit kanan. Sedangkan filsuf yang duduk di kursi genap mengambil sumpit kanan dulu baru sumpit kiri.

Dining Philosohers Problem dapat diilustrasikan sebagai berikut, terdapat lima orang filsuf yang sedang duduk mengelilingi sebuah meja. Terdapat lima mangkuk mie di depan masing-masing filsuf dan satu sumpit di antara masing-masing filsuf. Para filsuf menghabiskan waktu dengan berpikir (ketika kenyang) dan makan (ketika lapar). Ketika lapar, filsuf akan mengambil dua buah sumpit (di tangan kiri dan tangan kanan) dan makan. Namun adakalanya, hanya diambil satu sumpit saja. Jika ada filsuf yang mengambil dua buah sumpit, maka dua filsuf di samping filsuf yang sedang makan harus menunggu sampai sumpit ditaruh kembali.
            Dalam proses perancangan perangkat lunak simulasi ini, penulis mengambil beberapa asumsi, yaitu:
  1. Hanya terdapat 5 (lima) orang filsuf dalam proses simulasi.
  2. Masing-masing filsuf memiliki kondisi sebagai berikut:
    1. Kenyang.
Filsuf akan berada dalam kondisi kenyang sesaat setelah makan.
    1. Lapar.
Beberapa saat setelah makan, filsuf akan merasa lapar.
    1. Mati.
Beberapa saat setelah merasa lapar dan apabila filsuf belum juga mendapatkan sumpit, maka filsuf akan mati.
  1. Aksi yang dapat dilakukan oleh masing-masing filsuf, yaitu:
    1. Berpikir.
Filsuf akan berpikir apabila filsuf berada dalam kondisi kenyang.
    1. Cari Sumpit.
Filsuf akan mencari dan mengambil sumpit di kedua tangannya apabila filsuf berada dalam kondisi lapar.
    1. Makan
Apabila filsuf mendapatkan dua sumpit di kedua tangannya, maka filsuf akan makan hingga kenyang. Setelah kenyang, filsuf kembali berpikir.
  1. Di dalam perangkat lunak, kondisi filsuf di atas dirancang penulis secara matematis menjadi waktu-A dan waktu-B.
    1. Waktu-A, yaitu waktu yang diperlukan untuk mengubah kondisi filsuf dari kenyang menjadi lapar (dalam sekon).
    2. Waktu-B, yaitu waktu yang diperlukan untuk mengubah kondisi filsuf dari lapar menjadi mati (dalam sekon).
    3. Masa Hidup, yaitu masa hidup filsuf pada saat itu (dalam sekon). Maksimum masa hidup adalah sebesar nilai waktu-A + waktu-B. Masa hidup filsuf akan bertambah ketika filsuf sedang makan dan akan senantiasa berkurang di luar aksi itu.
Ketiga komponen ini menjadi ukuran matematis kondisi filsuf di dalam perangkat lunak. Misalnya, seorang filsuf memiliki waktu-A = 10 sekon, waktu-B = 8 sekon dan masa hidup = 12 sekon. Karena masa hidup filsuf adalah 12 sekon atau lebih besar 4 sekon daripada waktu-B, maka dapat dihitung bahwa 4 sekon kemudian, filsuf akan mulai merasa lapar dan mulai mencari sumpit. Bila filsuf mendapatkan dua sumpit di kedua tangannya, maka filsuf akan mulai memakan mie yang ada di depannya. Ketika sedang makan, masa hidup filsuf akan bertambah kembali. Filsuf tidak akan berhenti makan hingga filsuf berada dalam kondisi kenyang atau masa hidupnya mencapai nilai maksimum yaitu 18 sekon (waktu-A + waktu-B). Setelah itu, filsuf akan berpikir dalam 10 sekon berikutnya, sebelum merasa lapar dan mencari sumpit lagi. Apabila filsuf merasa lapar dan tidak mendapatkan sumpit dalam waktu 8 sekon (waktu-B), maka masa hidup filsuf akan menjadi nol dan filsuf akan mati. Untuk mendapatkan sumpit, filsuf harus menunggu apabila sumpit sedang dipakai oleh filsuf di sampingnya. Dalam kondisi itu, masa hidup filsuf akan terus berkurang.
  1. Untuk menghindari kondisi deadlock, penulis menyediakan 3 cara yang dapat dipilih, yaitu:
    1. Solusi-A, yaitu mengizinkan paling banyak 4 orang filsuf yang duduk bersama-sama pada satu meja.
    2. Solusi-B, yaitu mengizinkan seorang filsuf mengambil sumpit hanya jika kedua sumpit itu ada.
    3. Solusi-C, yaitu filsuf pada nomor ganjil mengambil sumpit kiri dulu baru sumpit kanan, sedangkan filsuf pada nomor genap mengambil sumpit kanan dulu baru sumpit kiri. Solusi ini disebut solusi asimetrik.
Untuk dapat lebih memahami proses yang terjadi, perhatikan contoh illustrasi berikut ini. Misalkan properti 5 orang filsuf dalam simulasi adalah sebagai berikut:
Tabel 3.1 Tabel Properti Filsuf

Waktu-A (sekon)
Waktu-B (sekon)
Kondisi Awal (sekon)
Filsuf-1
7
10
15
Filsuf-2
5
4
4
Filsuf-3
6
11
14
Filsuf-4
5
13
11
Filsuf-5
6
12
18

Dari tabel dapat diketahui kondisi masing-masing filsuf, yaitu filsuf-1 berada dalam kondisi kenyang karena kondisi awal 15 sekon berada di atas waktu-B yang hanya 10 sekon (filsuf-1 akan merasa lapar dan mencari sumpit 5 sekon kemudian). Filsuf-2 berada dalam kondisi lapar karena kondisi awal 4 sekon = waktu-B, filsuf-3 berada dalam kondisi kenyang, filsuf-4 berada dalam kondisi lapar dan filsuf-5 berada dalam kondisi kenyang. Kondisi awal problema dining philosophers dapat digambarkan dengan bagan illustrasi sebagai berikut:
Gambar 3.1 Bagan illustrasi kondisi awal simulasi
Proses simulasi adalah sebagai berikut:
Pada saat t = 1 sekon, filsuf-1, filsuf-3 dan filsuf-5 kenyang dan sedang berpikir, sedangkan filsuf-2 dan filsuf-4 lapar dan mendapatkan sumpit di tangan kiri. Pada saat t = 2 sekon, filsuf-2 dan filsuf-4 mendapatkan 2 sumpit dan mulai makan, sedangkan filsuf-1, filsuf-3 dan filsuf-5 masih kenyang dan sedang berpikir. Pada saat t = 3 sekon, filsuf-3 merasa lapar (karena masa hidup filsuf-3 saat ini = waktu-B yaitu 11 sekon) dan mulai mencari sumpit, tetapi tidak mendapatkan sumpit karena sumpit di sebelah kiri digunakan oleh filsuf-4 dan sumpit di sebelah kanan digunakan oleh filsuf-2. Bagan illustrasinya adalah sebagai berikut:
Gambar 3.2 Bagan illustrasi kondisi simulasi saat t=3 sekon
Pada saat t = 5 sekon, filsuf-1 merasa lapar (karena masa hidup filsuf-1 saat ini = waktu-B yaitu 10 sekon) dan mencari sumpit. Filsuf-1 mendapatkan sumpit di tangan kanan. Pada saat t = 6 sekon, filsuf-5 merasa lapar (karena masa hidup filsuf-5 saat ini = waktu-B yaitu 12 sekon) dan mencari sumpit. Filsuf-5 tidak mendapatkan sumpit. Pada saat t = 9 sekon, filsuf-2 kenyang (karena masa hidupnya sudah mencapai nilai maksimum, yaitu 9 sekon = waktu-A + waktu-B) dan mulai berpikir. Filsuf-3 mendapatkan sumpit di tangan kanan. Pada saat t = 10 sekon, filsuf-1 mendapatkan 2 sumpit dan mulai makan. Pada saat t = 11 sekon, filsuf-4 kenyang dan mulai berpikir. Filsuf-5 mendapatkan sumpit di tangan kanan. Pada saat t = 12 sekon, filsuf-3 mendapatkan 2 sumpit dan mulai makan. Bagan illustrasinya adalah sebagai berikut:
Gambar 3.3 Bagan illustrasi kondisi simulasi saat t=12 sekon
Proses simulasi akan berlanjut sesuai dengan prosedur. Simulasi hanya akan berhenti apabila terjadi kondisi deadlock. Kondisi deadlock dalam simulasi dining philosophers problem terjadi apabila pada satu saat, semua filsuf merasa lapar secara bersamaan dan semua filsuf mengambil sumpit di tangan kiri. Pada saat filsuf akan mengambil sumpit di tangan kanan, maka terjadilah kondisi deadlock, karena semua filsuf akan saling menunggu sumpit di sebelah kanannya (kondisi yang tidak akan pernah terjadi). Untuk kasus deadlock, perhatikan kondisi berikut:
Tabel 3.2 Tabel Properti Filsuf untuk Kasus Deadlock

Waktu-A (sekon)
Waktu-B (sekon)
Kondisi Awal (sekon)
Filsuf-1
17
12
27
Filsuf-2
5
3
2
Filsuf-3
15
10
25
Filsuf-4
6
5
5
Filsuf-5
20
5
20

Bagan illustrasi kondisi awal adalah sebagai berikut:
Gambar 3.4 Bagan illustrasi kondisi awal (kasus deadlock)
Pada saat t = 1 sekon, filsuf-2 dan filsuf-4 lapar dan mendapatkan sumpit di tangan kiri, sedangkan filsuf-1, filsuf-3 dan filsuf-5 kenyang dan sedang berpikir. Pada saat t = 2 sekon, filsuf-2 dan filsuf-4 mendapat 2 sumpit dan mulai makan. Pada saat t = 10 sekon, filsuf-2 dan filsuf-4 kenyang dan mulai berpikir. Pada saat t = 15 sekon, semua filsuf secara bersamaan lapar dan mengambil sumpit di tangan kiri. Pada saat ini, telah terjadi kondisi deadlock, karena semua filsuf yang sedang mengenggam sumpit di tangan kiri menunggu sumpit di sebelah kanan. Semua filsuf akan saling menunggu. Bagan illustrasi kondisi deadlock adalah sebagai berikut:
Gambar 3.5 Bagan illustrasi kondisi deadlock

Dengan input properti filsuf dan kondisi awal yang sama, kondisi deadlock yang terjadi dapat dihindari dengan memilih satu dari tiga solusi berikut:
  1. Solusi-A, yaitu mengizinkan paling banyak 4 orang filsuf yang duduk bersama-sama pada satu meja. Tidak akan terjadi kondisi deadlock apabila terdapat kurang dari 4 orang filsuf yang duduk bersama-sama mengelilingi meja dengan 5 tempat duduk (satu filsuf dianggap mati).
  2. Solusi-B, yaitu mengizinkan seorang filsuf mengambil sumpit hanya jika kedua sumpit itu ada. Apabila semua filsuf lapar secara bersamaan, maka hanya 2 orang filsuf yang dapat makan, karena filsuf mengambil 2 sumpit pada saat yang bersamaan.
  3. Solusi-C, yaitu solusi asimetrik. Filsuf pada nomor ganjil mengambil sumpit kiri dulu baru sumpit kanan, sedangkan filsuf pada nomor genap mengambil sumpit kanan dulu baru sumpit kiri. Apabila semua filsuf lapar secara bersamaan, cara pengambilan dengan solusi asimetrik akan mencegah semua filsuf mengambil sumpit kiri secara bersamaan, sehingga kondisi deadlock dapat dihindari.


DAFTAR PUSTAKA

1.         Bruce Schneier, Applied Crytography, Second Edition, 1996.
2.         Ir. Jusuf Kurniawan, M.T., Kriptografi, Keamanan Internet dan Jaringan Komunikasi, Penerbit Informatika Bandung, 2004.
3.         William Stallings, Cryptography and Network Security Third Edition, Prentice Hall.


Reade more >>

Kamis, 28 Juni 2012

Tag pada HTML

Kumpulan Tag HTML<!– –> Memberi komentar atau keterangan. Kalimat yang terletak pada tag kontiner ini tidak akan terlihat pada browser
<a href> Membuat link ke halaman lain atau ke bagian lain dari halaman tersebut
<a name> Membuat nama bagian yang didefinisikan pada link pada halaman yang sama
<applet> Sebagai awal dari Java applets
<area> Mendefinisikan daerah yang dapat diklik (link) pada image map
<b> Membuat teks tebal
<basefont> Membuat atribut teks default seperti jenis, ukuran dan warna font
<bgsound> Memberi (suara latar) background sound pada halaman web
<big> Memperbesar ukuran teks sebesar satu point dari defaultnya
<blink> Membuat teks berkedip
<body> Tag awal untuk melakukan berbagai pengaturan terhadap text, warna link & visited link
<br> Pindah baris
<caption> Membuat caption pada tabel
<center> Untuk perataan tengah terhadap teks atau gambar
<comment> Meletakkan komentar pada halaman web tidak tidak akan nampak pada browser
<dd> Indents teks

Reade more >>

About