Sinkronisasi Proses Sistem Operasi Kompu (1)

Nama

: ANDI ZUHAERINI

NIM

: 60900111011

Kelas

: B1 Sistem Informasi

1. Latar Belakang


Akses-akses yang dilakukan secara bersama-sama ke data yang sama,
dapat menyebabkan data menjadi tidak konsisten.



Untuk menjaga agar data tetap konsisten, dibutuhkan mekanismemekanisme untuk memastikan pemintaan ekseskusi dari proses yang

bekerja.



Race Condition: Situasi dimana beberapa proses mengakses dan
memanipulasi data secara bersamaan. Nilai terakhir dari data bergantung
dari proses mana yang selesai terakhir.



Untuk menghindari Race Condition, proses-proses secara bersamaan harus
disinkronisasikan.

2. Masalah Critical Section
Critical section adalah segmen kode yang mengakses data yang
digunakan proses secara bersama-sama yang dapat membawa proses itu
ke bahaya race condition. Biasanya sebuah proses sibuk melakukan
perhitungan internal dan hal-hal lainnya tanpa ada bahaya yang menuju ke
race condition pada sebagian besar waktu. Akan tetapi, biasanya setiap
proses memiliki segmen kode dimana proses itu dapat mengubah variabel,

meng-update suatu tabel, menulis ke suatu file, dan lain-lainnya, yang
dapat membawa proses itu ke bahaya race condition.

Solusi dari masalah critical section harus memenuhi tiga syarat berikut:


Mutual exclusion

Merupakan sebuah jalan yang menjamin jika sebuah proses sedang menggunakan
variabel atau berkas yang digunakan bersama-sama, proses lain akan dikeluarkan
dari pekerjaan yang sama. Misal proses Pi sedang menjalankan critical section
(dari proses Pi), maka tidak ada proses-proses lain yang dapat menjalankan
critical section dari proses-proses tersebut. Dengan kata lain, tidak ada dua proses
yang berada di critical section pada saat yang bersamaan.


Terjadi kemajuan (progress)

Jika tidak ada proses yang sedang menjalankan critical section-nya dan jika
terdapat lebih dari satu proses lain yang ingin masuk ke critical section, maka

hanya proses-proses yang tidak sedang menjalankan remainder section-nya yang
dapat berpartisipasi dalam memutuskan siapa yang berikutnya yang akan masuk
ke critical section, dan pemilihan siapa yang berhak masuk ke critical section ini
tidak dapat ditunda secara tak terbatas (sehingga tidak terjadi deadlock).


Ada batas waktu tunggu (bounded waiting)

Jika seandainya ada proses yang sedang menjalankan critical section, maka
terdapat batasan waktu berapa lama suatu proses lain harus menunggu giliran
untuk mengakses critical section. Dengan adanya batas waktu tunggu akan
menjamin proses dapat mengakses ke critical section (tidak mengalami
starvation: proses seolah-olah berhenti, menunggu request akses ke critical
section diperbolehkan).

3. Race Condition
Race Condition adalah situasi di mana beberapa proses mengakses dan
memanipulasi data bersama pada saat besamaan. Nilai akhir dari data bersama

tersebut tergantung pada proses yang terakhir selesai. Unutk mencegah race

condition, proses-proses yang berjalan besamaan haus di disinkronisasi.
Dalam beberapa sistem operasi, proses-proses yang berjalan bersamaan
mungkin untuk membagi beberapa penyimpanan umum, masing-masing dapat
melakukan proses baca (read) dan proses tulis (write). Penyimpanan bersama
(shared storage) mungkin berada di memori utama atau berupa sebuah berkas
bersama, lokasi dari memori bersama tidak merubah kealamian dari komunikasi
atau masalah yang muncul. Untuk mengetahui bagaimana komunikasi antar
proses bekerja, mari kita simak sebuah contoh sederhana, sebuah print spooler.
Ketika sebuah proses ingin mencetak sebuah berkas, proses tersebut memasukkan
nama berkas ke dalam sebuah spooler direktori yang khusus. Proses yang lain,
printer daemon, secara periodik memeriksa untuk mengetahui jika ada banyak
berkas yang akan dicetak, dan jika ada berkas yang sudah dicetak dihilangkan
nama berkasnya dari direktori.
Bayangkan bahwa spooler direktori memiliki slot dengan jumlah yang
sangat besar, diberi nomor 0, 1, 2, 3, 4,... masing-masing dapat memuat sebuah
nama berkas. Juga bayangkan bahwa ada dua variabel bersama, out, penunjuk
berkas berikutnya untuk dicetak, dan in, menunjuk slot kosong di direktori. Dua
vaiabel tersebut dapat menamgami sebuah two-word berkas untuk semua proses.
Dengan segera, slot 0, 1, 2, 3 kosong (berkas telah selesai dicetak), dan slot 4, 5, 6
sedang terisi (berisi nama dari berkas yang antre untuk dicetak). Lebih atau

kurang secara besamaan, proses A dan B, mereka memutuskan untuk antre untuk
sebuah berkas untuk dicetak. Situasi seperti ini diperlihatkan oleh Gambar 3-1.
Gambar 3-1. Race Condition

Dalam Murphy's Law kasus tesebut dapat terjadi. Proses A membaca in dan
menyimpan nilai "7" di sebuah variabel lokal yang disebut next_free_slot. Sebuah
clock interrupt terjadi dan CPU memutuskan bahwa proses A berjalan cukup lama,
sehingga digantika oleh proses B. Proses B juga membaca in, dan juga mengambil
nilai 7, sehingga menyimpan nama berkas di slot nomor 7 dan memperbaharui
nilai in menjadi 8. Maka proses mati dan melakukan hal lain.
Akhirnya proses A berjalan lagi, dimulai dari tempat di mana proses tersebut mati.
Hal ini terlihat dalam next_free_slot, ditemukan nilai 7 di sana, dan menulis nama
berkas di slot nomor 7, menghapus nama berkas yang bau saja diletakkan oleh
proses B. Kemudian proses A menghitung next_free_slot + 1, yang nilainya 8 dan
memperbaharui nilai in menjadi 8. Direktori spooler sekarang secara internal
konsisten, sehingga printer daemon tidak akan memberitahukan apa pun yang
terjadi, tetapi poses B tidak akan mengambil output apa pun. Situasi seperti ini,
dimana dua atau lebih proses melakukan proses reading atau writing beberapa
shared data dan hasilnya bergantung pada ketepatan berjalan disebut race
condition.


4. Penyelesaian Metode Peterson
Dua proses solusi
Asumsikan instruksi LOAD and STORE adalah atomic, itu tidak di interupsi
Dua proses variabel dishare
Int turn;
Boolean flag[2]
Variabel

turn masuk

ke

critical

section.

Dua

flag


digunakan

untuk

mengindikasikan jika suatu proses siap masuk ke critical section flag[i] =
dinyarakan proses Pi siap!!

5. Sinkronisasi Hardware
Seperti yang telah kita ketahui bahwa, sinkronisasi haruslah mutual
exclusive/harus ada satu atau sekelompok instruksi yang tidak dapat diberhentikan
pada waktu eksekusi (sifat mutual exclusive). Jadi, solusi untuk sinkronisasi
dengan cara pendekatan hardware lebih menekankan kepada usaha-usaha untuk
membuat suatu atau sekelompok instruksi menjadi mutual exclusive.
Pendekatan dari sisi hardware dapat dibagi menjadi dua:
1. Processor Synchronous
2. Memory Synchronous
Mutual exclusive = Jika proses Pi sedang mengeksekusi critical section maka
tidak ada proses lain yang dapat mengeksekusi dalam critical section mereka.


6. Semaphores
Semafor adalah sistem sinyal yang digunakan untuk berkomunikasi secara visual.
Dalam software, semafor adalah sebuah variabel bertipe integer yang selain saat
inisialisasi, hanya dapat diakses melalui dua operasi standar, yaitu increment dan
decrement. Semafor digunakan untuk menyelesaikan masalah sinkronisasi secara
umum. Berdasarkan jenisnya, semafor hanya bisa memiliki nilai 1 atau 0, atau
lebih dari sama dengan 0. Konsep semafor pertama kali diajukan idenya oleh
Edsger Dijkstra pada tahun 1967.
Operasi standar pada semafor (dalam bahasa pemrograman C). Nama asli dari
operasi tersebut sebenarnya adalah Proberen (test) dan Verhogen (increment).
Fungsi wait dipanggil ketika thread akan memasuki critical section-nya atau
ketika thread akan memakai resource yang tersedia. Jika sem_value kurang dari
sama dengan 0, thread tersebut harus menunggu sampai thread lain memanggil
fungsi buka. Fungsi buka dipanggil ketika thread meningggalkan critical sectionnya atau ketika melepaskan resource yang telah digunakannya. Tentu saja kedua
operasi tersebut harus bersifat atomik karena sem_value dapat diakses oleh
beberapa proses (shared resource).
Semafor memiliki dua jenis, yaitu:
1. Binary semaphore,
Semafor ini hanya memiliki nilai 1 atau 0. Sering juga disebut sebagai semafor
primitif

1. Counting semaphore
Semafor ini memiliki nilai 0, 1, serta integer lainnya. Banyak sistem operasi yang
tidak secara langsung mengimplementasikan semafor ini, tetapi dengan
memanfaatkan binary semaphore
Fungsi Semaphore



Mutual exclusion

Sesuai dengan prinsip mutual exclusion, jika suatu thread sedang berada dalam
critical section-nya, thread lain harus menunggu thread tersebut keluar dari
critical section-nya sebelum dapat memasuki critical section-nya sendiri. Di
sinilah semafor digunakan, thread yang akan memasuki critical section-nya akan
memanggil fungsi kunci terlebih dahulu. Jika tidak ada thread lain yang sedang
berada dalam critical section, thread ini akan memasuki critical section-nya. Jika
terdapat thread lain yang sedang berada dalam critical section-nya, thread ini
harus menunggu.Setelah thread keluar dari critical section-nya, thread tersebut
akan memanggil fungsi buka sehingga sem_value akan naik menjadi lebih dari 0,
dan satu (dari beberapa) thread yang sedang menunggu akan mendapatkan giliran

untuk memasuki critical section-nya.


Sebagai contoh, misalnya terdapat dua buah thread yang sedang berjalan

bersamaan:
Thread A: thread B: count = count + 1; count = count + 1; Thread A dan B
mengakses variabel yang sama, yaitu count sehingga thread A dan B harus
berjalan satu-satu. Untuk itu digunakan semafor mutex yang berupa binary
semaphore dengan nilai awal 1.


Resource controller

Contoh: bayangkan sebuah restoran yang setiap malamnya ramai dikunjungi
pelanggan. Kapasitas restoran terbatas, tetapi pemilik restoran memiliki kebijakan
bahwa semua pengunjung yang datang akan mendapatkan kesempatan untuk
makan, dengan konsekuensi yaitu pelanggan harus sabar menunggu gilirannya.
Oleh karena itu, dikerahkanlah pegawai restoran untuk menahan tamu di luar jika
restoran penuh lalu mempersilahkan tamu masuk jika tempat telah tersedia. Dari

analogi di atas, pelanggan adalah thread, kapasitas restoran adalah resource, dan
pegawai restoran adalah semafor. Semafor menyimpan banyaknya resource yang
tersedia. Saat thread ingin memakai resource ia akan memanggil fungsi kunci.

Jika resource masih tersedia, thread bisa langsung menggunakannya, sebaliknya
jika semua resource sedang dipakai, thread tersebut harus menunggu. Setelah
resource selesai dipakai thread akan memanggil fungsi buka sehingga resource
yang bebas bertambah.


Sinkronisasi antar-proses

Ada kalanya suatu thread memerlukan resource yang dihasilkan oleh thread
lainnya. Oleh karena itu dibutuhkan suatu mekanisme untuk mengatur urutan
eksekusi thread. Mekanisme ini dilakukan dengan memanfaatkan semafor.


Sebagai contoh, misalnya terdapat dua buah thread yang sedang berjalan

bersamaan:
Thread A: thread B: count = count + 1; count = count * 2; Nilai awal dari variabel
count adalah 5, nilai akhir yang diinginkan adalah 12, oleh karena itu thread A
harus dieksekusi sebelum thread B. Agar hal ini dapat terjadi dibutuhkan suatu
semafor mutex yang merupakan sebuah binary semaphore dengan nilai awal 0.
Thread A: thread B: count = count + 1; kunci(mutex); buka(mutex); count = count
* 2; Thread B akan menunggu sampai eksekusi thread A selesai sebelum
melanjutkan.
Implementasi Semaphore


Windows

Fungsi yg dipakai adalah CreateSemaphore biasanya digunakan untuk membatasi
jumlah thread yang memakai suatu resource secara bersamaan


Java

Semafor di Java bersifat transparan oleh


Programmer

Java™ menyembunyikan Semafor dibalik konsep


Monitor

Reserved Word yang dipakai Java™ adalah Synchronized
7. Masalah Klasik Sinkronisasi


Bounded buffer problem

Bounded buffer adalah tempat penampung data yang ukurannya terbatas,
contohnya pada proses produsen dan konsumen. Beberapa masalah produsenkonsumen : produsen menaruh data pada buffer. Jika buffer tersebut sudah terisi
penuh, maka produsen tidak melakukan apa-apa dan menunggu sampai konsumen
mengosongkan isi buffer dan konsumen mengambil data dari buffer. Jika buffer
tersebut kosong, maka konsumen tidak melakukan apa-apa dan menunggu sampai
buffer tersebut diisi oleh produsen.


Readers and writers problem

Kedua jenis proses ini berbagai sumber daya penyimpanan yang sama, misalnya
basis data. Tujuannya adalah agar data tidak korup dan inkonsisten. Kondisi
reader and writers:
1.

Proses-proses pembaca dapat membaca sumber daya secara simultan

2.

Hanya boleh ada satu penulis menulis pada setiap saat

3.

Bila ada yang menulis, tidak boleh ada yang membaca



Dining-philosophers problem

Gambar dibawah ini adalah meja makan, kita asumsikan untuk semaphore


Mie (data)



Sebuah meja bundar



N filsuf duduk melingkar di meja bundar



Antara dua filsuf terdapat sebuah sumpit



Didepan setiap filsuf terdapat semangkuk mie, setiap filsuf hanya dapat

berada pada salah satu kondisi berfikir, lapar, makan.

Kelemahan semaphore


Termasuk low level



Kesulitan dalam pemeliharannya karena tersebar dalam seluruh program



Menghapus wait à dapat terjadi non-mutual exclusion



Menghapus signal à dapat terjadi deadlock



Error yang terjadi sulit untuk dideteksi