Minggu, 28 Oktober 2012

Algoritma Semaphore



Semaphore adalah pendekatan yang dikemukakan Dijkstra. Prinsip semaphore
adalah sebagai berikut : Dua proses atau lebih dapat bekerja sama dengan
menggunakan penanda-penanda sederhana. Proses dipaksa berhenti sampai proses
memperoleh penanda tertentu. Sembarang kebutuhan koordinasi kompleks dapat
dipenuhi dengan strukstur penanda yang sesuai kebutuhannya. Variabel khusus untuk
penandaan ini disebut semaphore.
Semaphore adalah alat untuk sinkronisasi yang tidak membutuhkan busy
waiting. Semaphore S berupa variable integer. Semaphore hanya dapat diakses melalui
operasi atomic yang tak dapat diinterupsi sampai kode selesai. Operasi dari semaphore
S adalah wait dan signal berikut :
wait (S):
while S0 do no-op;
S--;
signal (S):
S++;
Adanya semaphore mempermudah penyelesaian persoalan critical section pada
n proses. Penyelesaian critical section menggunakan semaphore menggunakan variabel
umum berikut :
semaphore mutex;
Variabel semaphore mutex diinisialisasi mutex = 1. Sedangkan struktur program
untuk proses Pi adalah :
do {
wait(mutex);
critical section
signal(mutex);
remainder section
} while (1);
Implementasi semaphore harus dapat menjamin mutual exclusion variabel
semaphore, yaitu hanya mengijinkan satu proses pada satu saat yang boleh
memanipulasi semaphore. Implementasi sebuah semaphore menggunakan struktur data
record sebagai berikut :
typedef struct {
int value;
struct process *L;
} semaphore;

Pada semaphore terdapat dua operasi sederhana yaitu block untuk menghentikan
sementara proses yang menggunakan semaphore dan wakeup(P) untuk melanjutkan
eksekusi proses P yang di-blok. Operasi wait dan signal dari semaphore didefinisikan
sebagai :
wait(S):
S.value--;
if (S.value < 0) {
tambahkan proses ke S.L;
block;
}
signal(S):
S.value++;
if (S.value <= 0) {
hapus proses P dari S.L;
wakeup(P);
}

Sebagai alat sinkronisasi yang umum, semaphore dieksekusi oleh suatu proses
setelah proses lain. Misalnya semaphore B pada proses Pj hanya dieksekusi setelah
semaphore A dieksekusi pada proses Pi. Pada saat menggunakan semaphore, flag
diinisialisasi 0. Kode yang diakses proses Pi dan Pj dapat dilihat berikut ini :
Pi                                            Pj
A                                  wait(flag)
signal(flag)                  B

Semaphore merupakan salah satu sumber daya sistem. Misalnya dua proses P1
dan P2, dua sumber daya kritis R1 dan R2, proses P1 dan P2 harus mengakses kedua
sumber daya. Kondisi berikut dapat terjadi : R1 diberikan ke P1, sedang R2 diberikan ke
P2. Apabila dua proses untuk melanjutkan eksekusi memerlukan kedua sumber daya
sekaligus maka kedua proses akan saling menunggu sumber daya lain selamanya. Tak
ada proses yang dapat melepaskan sumber daya yang telah dipegangnya karena
menunggu sumber daya lain yang tak pernah diperolehnya. Kedua proses dalam kondisi
deadlock, tidak dapat membuat kemajuan apapun.
Pada saat beberapa proses membawa semaphore dan masing-masing proses
menunggu semaphore yang sedang dibawa oleh proses lain maka kemungkinan akan
terjadi deadlock. Misalnya terdapat dua semaphore S dan Q yang diinisialisasi 1.
P0                                           P1
wait(S);                        wait(Q);
wait(Q);                       wait(S);
signal(S);                     signal(Q);
signal(Q);                    signal(S);

Proses P0 dan P1 masing-masing menjalankan operasi wait(S) dan wait(Q). Kemudian
proses P0 dan P1 menjalankan operasi wait(Q) dan wait(S) maka sistem akan deadlock
sampai salah satu proses menjalankan operasi signal.
Apabila suatu proses tidak pernah dihapus dari antrian semaphore setelah suatu
semaphore dihentikan sementara, maka terjadi bloking yang tak terbatas. Keadaan ini
disebut starvation.
Keadaan starvation digambarkan sebagai berikut. Misalnya terdapat tiga proses
P1, P2 dan P3 yang memerlukan pengaksesan sumber daya R secara periodik. Skenario
yang bisa terjadi :
·         P1 sedang diberi sumber daya R, P2 dan P3 blocked menunggu sumber daya R.
·         Ketika P1 keluar dari critical section, P2 dan P3 diijinkan mengakses R.
·         Asumsi P3 diberi hak akses. Kemudian setelah selesai, hak akses kembali diberikan
ke P1 yang saat itu kembali membutuhkan sumber daya R.
Jika pemberian hak akses bergantian terus-menerus antara P1 dan P3, maka P2
tidak pernah memperoleh pengaksesan sumber daya R, meski tidak ada deadlock. Pada
situasi ini, P2 mengalami yang disebut Starvation.
Terdapat dua bentuk semaphore yaitu counting semaphore dan binary
semaphore. Counting semaphore menggunakan nilai integer yang mempunyai
jangkauan tak terbatas seperti pada struktur yang telah dijelanskan diatas. Binary
semaphore menggunakan nilai integer dengan jangkauan antara 0 dan 1 sehingga
implementasinya lebih sederhana. Counting semaphore S diatas dapat
diimplementasikan dengan binary semaphore. Struktur data yang digunakan adalah :
binary-semaphore S1, S2;
int C:
Struktur data diatas diinisialisasi dengan
S1 = 1
S2 = 0
C = initial value of semaphore S
Implementasi operasi wait dan signal pada binary semaphore S adalah sebagai berikut :
Operasi wait :
wait(S1);
C--;
if (C < 0) {
signal(S1);
wait(S2);
}
signal(S1);

Operasi signal :
wait(S1);
C ++;
if (C <= 0)
signal(S2);
else
signal(S1);

Struktur Bumi



Bumi adalah anggota tata surya yang reliefnya tidak rata . Bumi terdiri dari beberapa lapisan , yaitu inti dalam , inti luar , mantel dan kerak bumi. Inti bumi terdiri dari inti luar dan inti dalam merupakan masa cair liat yang sangat kental dan sangat panas , terdiri dari nikel dan besi. Suhu di pusat bumi mencapai lebih dari 2.500 ° C. Pada bagian mantel berupa masa cair yang liat dan sangat panas dengan masa jenis 3 – 8 yang terdiri dari silisium dan magnesium. Sedangkan lapisan yang paling luar berupa massa padat yang dinamakan kulit bumi atau kerak bumi. Kerak bumi ini dingin dan padat terapung diatas lapisan mantel yang cair liat.
Secara terperinci struktur bumi mempunyai lapisan sebagai berikut :
1. Kerak bumi (crust)
Lapisan ini menempati bagian paling luar dengan tebal 6-50 km. Tebal lapisan ini tidak sama di setiap tempat, di benua tebalnya 20-50 km, samudra 0-5km atau bersamaan dengan air diatasnya sekitar 6-12 km. Tersusun dari materi-materi padat yang kaya silisium dan uluminium. Kerak bumi ini dapat dibagi 2 yaitu:
  • Lapisan granitis yaitu lapisan yang kaya akan batuan granit, lapisan ini tidak dijumpai di dasar samudra.
· Lapisan basaltis yaitu lapisan yang kaya akan material basalt.
Kerak bumi ini dingin dan padat terapung diatas lapisan mantel yang cair liat.
Kerak bumi (crust) , selagi dalam bentuk solidnya bersifat mobile dan mengapung diatas cairan magma. Menurut teori tektonik lempeng, terjadi arus konveksi dibawah lapisan crust ini memaksa magma (batuan panas/cair, yang bergerak plastis) untuk bergerak keatas. Pada titik-titik tertentu (biasanya pada mid-ocean) magma membentuk celah/palung dan menerobos ke permukaan. Hal ini akan menyebabkan lempeng saling bergerak menjauh atau saling bertabrakan secara gradual. Jika pergerakan ini terjadi dengan tiba-tiba, terjadilah gempa.
2. Selimut bumi (mantle)
Lapisan ini terletak di bawah kerak bumi yang mempunyai suhu kira-kira 2000° C dan pada umumnya dibagi menjadi 3 yaitu:
  • Lhitosfer
Letaknya paling atas dari selimut bumi, terdiri dari materi-materi yang berwujud padat dan kaya silisium dan aluminium, tebalnya sekitar 50-100 km. Bersamaan dengan kerak bumi sering disebut dengan lempeng lhitosfer yang mengapung diatas lapisan yang agak kental yaitu astheonosfer.
  • Astheonosfer
Lapisan dibawah lhitosfer yang wujudnya agak kental, kaya dengan silisium, aluminium dan magnesium. Tebal lapisan ini sekitar 130-160 km
  • Mesosfer
Lapisan yang lebih berat dan tebal, kaya dengan silisium dan magnesium. Tebalnya sekitar 2400-2750 km.
3. Inti bumi (core)
Inti bumi berukuran diameter 7000 km dan terdiri dari besi dan nikel. Lapisan paling luar (tebal 2200 km) merupakan liquid atau cairan. Lapisan terdalam bersifat solid atau padat, dengan density sekitar 10.5 SG dan suhunya lebih dari 2.500° Celcius. Menurut teori, perputaran bumi pada porosnya (rotasi) menyebabkan terjadinya arus sirkulasi pada bagian cair inti bumi. Sirkulasi ini merupakan sumber dari medan magnet yang menyelimuti bumi.
Lapisan ini menempati bagian paling dalam dan dapat dibagi menjadi 2 yaitu:
  • Inti bagian luar (outher core)
Tebal lapisan ini sekitar 2160 km, kemungkinan tersusun dari materi yang kaya silisium, besi dan magnesium.
  • Inti bagian dalam (inner core)
Tebal lapisan ini sekitar 1320 km, tersusun dari materi yang kaya nikel dan besi dengan densitas lebih besar.
2. Selimut bumi (mantle)
Lapisan ini terletak di bawah kerak bumi yang mempunyai suhu kira-kira 2000° C dan pada umumnya dibagi menjadi 3 yaitu:
  • Lhitosfer
Letaknya paling atas dari selimut bumi, terdiri dari materi-materi yang berwujud padat dan kaya silisium dan aluminium, tebalnya sekitar 50-100 km. Bersamaan dengan kerak bumi sering disebut dengan lempeng lhitosfer yang mengapung diatas lapisan yang agak kental yaitu astheonosfer.
  • Astheonosfer
Lapisan dibawah lhitosfer yang wujudnya agak kental, kaya dengan silisium, aluminium dan magnesium. Tebal lapisan ini sekitar 130-160 km

Bahasa Pemrograman Khusus


Hampir semua bahasa pemrograman komputer dapat digunakan untuk membuat program aplikasi kecerdasan buatan. Namun agar lebih mudah dalam implementasi pemrograman dan akuisisi pengetahuan, umumnya digunakan bahasa pemrograman khusus. Bahasa pemrograman khusus untuk aplikasi kecerdasan buatan diantaranya adalah Prolog, Lisp, SmallTalk, Planner, dan sebagainya.
Selain Bahasa Prolog dan Lisp, sebagian besarnya tidak diperoleh dalam bentuk komersial (karena tidak diperjualbelikan) hanya untuk kepentingan tertentu, misalnya hanya untuk kepentingan penelitian (research) dan pendidikan (education).
Bahasa pemrograman khusus untuk aplikasi kecerdasan buatan merupakan bahasa Pemrograman Logika. Pada bagian ini, bahasa pemrograman logika yang akan dipelajari adalah bahasa Prolog dengan compiler Turbo Prolog 2.0.
Bahasa Prolog
PROLOG singkatan dari PROgramming in LOGic. Bahasa Prolog merupakan bahasa generasi kelima, dibangun atas dasar pemrograman alamiah dan logika.
Dari segi teori, pembangunan gagasan pemrograman dengan logika (programming in logic) yang pertama adalah Kowalski di Edinburgh. Kemudian didemonstrasikan secara eksperimental oleh Maarten van Emden juga di Edinburgh, dan diwujudkan oleh Alain Colmerauer (seorang profesor di Universitas Aix, Marseilles, Perancis) dan Philippe Roussel dengan berhasil membuat interpreter Prolog yang pertama bersama kelompoknya the Groupe d’Intelligence Artificielle (GIA) tahun 1972.
Kelahiran Prolog sendiri diawali kelika Alain Colmerauer dengan sekelompok peneliti menghadapi masalah penerjemahan bahasa dengan komputer di Montreal. Hal ini akibat hasil karya Noam Chomsky dalam ilmu bahasa alami dengan bahasa komputer.