so_kelompok_iv_ sinkronisasi

Download SO_Kelompok_IV_ SINKRONISASI

Post on 29-Jun-2015

264 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

SINKRONISASI PROSES-PROSESDipresentasikan Oleh Kelompok IV1. 2. 3. 4. DANANG NURDIANSYAH (10/309040/PPA/03399) MURYANTO (10/309060/PPA/03410) KANDI HARIANTO (10/309044/PPA/03401) I MADE PARTHA WIGUNA (10/309392/PPA/03421)

LATAR BELAKANG Adanya Proses-proses konkuren ( concurrent process ) Proses yang bersifat independen/ independence process Proses yang bersifat kooperatif / cooperating process

Proses konkuren yang kooperatif saling berkomunikasi 1 dengan yang lain Memungkinkan sharing data

Race Condition Adanya akses data secara bersama, oleh bebera proses, memungkinkan data tidak konsisten / data inconsistence Perlunya mekanisme untuk menjamin eksekusi yang berurutan pada prosesproses yang bekerjasama

Pemakaian Bounded Buffer Producer akan menambah/memberi data Consumer akan menerima/menggunakan data Buffer, sebagai penampungan data

Shared data#define BUFFER_SIZE 10 Typedef struct { } item; Item buffer {BUFFER_SIZE}; Int in=0; Int out=0; Int counter=0;

ProducerProducer:while (true) { /* produce an item and put in nextProduced*/ while (counter == BUFFER_SIZE); // do nothing buffer [in] = nextProduced; in = (in + 1) % BUFFER_SIZE; counter++; }

ConsumerConsumer:while (1) {while (counter == 0); // do nothing nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; counter--; /* consume the item in nextConsumed */

}

Peryataan counter++ dan counter-- , harus dilakukan secara atomik ( seluruh peryataan sampai selesai tanpa interupsi)

Pernyataan counter++ dapat diimplementasikan dalam bahasa mesin sebagai berikut register1 = counter register1 = register1 + 1 counter = register1

Pernyataan counter-- dapat diimplementasikan dalam bahasa mesin sebagai berikut register2 = counter register2 = register2 -1 counter = register2

Misal counter=5 producer :register1 = counter {register1 = 5} producer :register1 = register1 + 1 {register1 = 6} consumer :register2 = counter {register2 = 5} consumer : register2 = register2 -1 {register2 = 4} producer :counter = register1 {counter = 6 } consumer :counter = register2 {counter = 4} Nilai counter menjadi tidak konsisten !!! Untuk mencegah race condition, maka proses yang konkuren harus di sinkronisasi

Masalah Critical Section Banyak proses kemungkinan akses data yang sama Proses kemungkinan memiliki kode segmen, dimana jika kode segmen tersebut dieksekusi, maka proses-proses tersebut dapat saling mengubah variabel, mengupdate tabel, menulis ke dalam file dll

Solusi Critical Section Setiap proses harus meminta ijin jika akan mengakses critical section-nya Akhir dari critical section diikuti oleh exit section Kode pengingat terletak pada remainder section Skema struktur proses : do{

entry sectioncritical section

exit sectionremainder section } while(1);

Syarat Solusi Critical Section Mutual Exclusion Jika sebuah proses sedang berada di critical section, tidak boleh ada proses lain yang berada di critical section nya

Progress Jika tidak ada proses di critical section, dan ada beberapa proses yang ingin masuk ke critical section, maka hanya proses yang berada di entry critical section yang boleh berpartisipasi untuk memasuki critical section

Bounded Waiting batasan waktu tunggu sebuah proses untuk masuk ke critical section, setelah mereka meminta ijin untuk masuk dan sebelum permintaan tersebut terpenuhiAsumsi ; setiap proses dieksekusi dengan kecepatan bukan nol

Gambaran Proses Pada Kernel ModeKernel code memanggil fungsi penjadwalan sendiri. setiap waktu banyak proses yang berjalan dalam kernel mode,akibatnya sangat mungkin untuk terjadi race condition,contoh, dalam kernel mode terdapat struktur data yang menyimpan list file yang terbuka, list tersebut termodofikasi bila ada data file yang baru dibuka atau ditutup,dengan menambah atau menghapus dari list, race condition timbul ketika ada dua file yang dibuka dan ditutup bersamaan, untuk mengatasi hal tersebut kernel mempunyai metode

Pendekatan Umum Menyikapi Critical Section Sistem Operasia. Preemptive kernel. pada mode ini proses yang sedang dieksekusi dalam kernel diizinkan untuk diinterupsi oleh proses lain yang memenuhi syarat, akibatnya mode ini juga rentan terkena race condition. Keuntungannya adalah mode ini amat efektif untuk digunakan dalam real time programming, namun mode ini lebih sulit diimplementasikan dari pada mode non preemptive kernel. Mode ini diimplementasikan oleh Linux versi 2.6 dan versi komersial linux lainnya b. non preemptive kernel. mode yang tidak memperbolehkan suatu proses yang berjalan dalam kernel mode diinterupsi oleh proses lain, proses lain hanya bisa dijalankan setelah proses yang ada dalam kernel selesai dieksekusi, implementasinya memang lebih mudah dibandingkan dengan preemptive kernel, mode ini diimplementasikan lewat Windows XP dan Windows 2000

NEXT ........

Solusi Critical SectionAda dua jenis solusi masalah critical section, yaitu: 1. Solusi perangkat lunak. Dengan menggunakan algoritma-alogoritma yang nilai kebenarannya tidak tergantung pada asumsi-asumsi lain, selain bahwa setiap proses berjalan pada kecepatan yang bukan nol. 2. Solusi perangkat keras. Tergantung pada beberapa instruksi mesin tertentu, misalnya dengan me-non-aktifkan interupsi atau dengan mengunci suatu variabel tertentu

Cara Pemecahan Masalah Hanya dua proses , P0 and P1 Struktur umum dari proses adalah Pi (proses lain Pj)do { entry section critical section exit section reminder section } while (1);

Proses-proses dapat share variabel untuk sinkronisasi

Algoritma 1 Shared variabel : int turn; initially turn = 0 turn = i Pi dapat masuk ke dalam critical section

Process Pido { while (turn != i) ; critical section turn = j; reminder section } while (1);

Memenuhi mutual exclusion, tapi tidak menuhi progres

Algoritma 2 (1) Menggunakan flag untuk setiap proses dan memeriksa flag proses yang lain dan tidak akan masuk critical section bila ada proses lain yang sedang masuk.

Shared variabel :

Algoritma 2 (2)

boolean flag[2]; initially flag [0] = flag [1] = false. flag [i] = true Pi siap untuk masuk ke dalam critical section

Process Pido { flag[i] := true; while (flag[j]) ; critical section flag [i] = false; remainder section } while (1); Memenuhi mutual exclusion, tapi tidak menuhi progres

Algoritma 3 (1) Flag untuk meminta ijin masuk Setiap proses menge-set sebuah flag untuk meminta ijin masuk. Lalu setiap proses mentoggle bit untuk mengijinkan proses yang lain untuk yang pertama

Kombinasi shared variabel algoritma 1 & 2

Algoritma 3 (2) Process Pido { flag [i]:= true; turn = j; while (flag [j] and turn = j) ; critical section flag [i] = false; remainder section } while (1);

Memenuhi ketiga persyaratan, memecahkan masalah critical-section untuk kedua proses.

Algoritma Bakery (1)Critical section untuk n proses : untuk Sebelum masuk ke dalam critical section, proses menerima sebuah nomor. Pemegang nomor yang terkecil masuk ke critical section. Jika ada dua proses atau lebih (Pi and Pj) menerima nomor sama, maka proses dengan indeks terkecil (i < j) yang dilayani lebih dulu untuk masuk ke critical section. Misal Pi dilayani lebih dulu, baru kemudian Pj. Skema penomoran selalu naik secara berurut, contoh : 1,2,3,3,3,3,4,5...

Algoritma Bakery (2) Shared databoolean choosing[n]; int number[n];

Struktur data masing-masing diinisialisai false dan 0.

Algoritma Bakery (3) Algoritmado { 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);

Synchronization Hardware / Perangkat Keras SinkronisasiPada sistem multiprosessor, proses-pmroses bertindak independen. Interupsi di satu pemroses tidak mempengaruhi pemroses-pemroses yang lain. Pemroses-pemroses yang memakai memori bersama maka pengaksesan terhadap suatu memori dijaga pada tingkat perangkat keras agar tidak boleh pemroses lain tidak dapat mengakses suatu lokasi yang sama di saat yang sama. Perancang perangkat keras menyediakan instruksi-instruksi atomik yang tak dapat diinterupsi. Instruksi dilaksanakan sampai selesai. Instruksi ini biasanya dilaksanakan dengan cara mengunci bus sehingga pemroses-pemroses lain tak dapat menggunakan bus. Pemroses yang mengunci bus dengan leluasa membaca dan/atau memodifikasi suatu lokasi memori.

Metode Processor SynchronousCentral Processing Unit (CPU) mempunyai suatu mekanisme yang dinamakan interrupt. Di dalam sistem operasi, mekanisme ini digunakan secara intensif, atau dengan kata lain, banyak Konsep sistem operasi yang menggunakan mekanisme ini. Sebagai contoh: system call, process scheduling, dsb.

Main Modul : Prosesor Atmel ARM tm00 CLI ' masuk ke Critical Section dengan cara men-disable interrupt 01 ADD r1,r2 ' Critical Section 02 .... Critical Section 03 SBI ' pergi dari Critical Section dengan cara men-enable interrupt 04 .. ' Remainder Section

Metode Memory Synchronous Hal tersebut benar adanya, mekanisme memory synchronous memakai suatu nilai yang disimpan di dalam memori, dan jika suatu proses berhasil mengubah nilai ini, maka proses tersebut akan meneruskan ke instruksi selanjutnya. Tetapi jika tidak, maka proses ini akan berusaha terus untuk mengubah nilai tersebut.

Metode Test and SetMetode ini melakukan testing dan memodifikasi isi memori secara atomik menggunakan fungsi Test and Set sebagai berikut : boolean TestAndSet (boolean &target) { boolean rv = target; tqrget = true; return rv; } variable umum yang digunakan pada metode ini adalah boolean Contonya lock = false; Sedangkan Process Pi mempun