SINKRONISASI PROSES YANG ADA PADA SISTEM OPERASI
Sistem operasi adalah seperangkat program yang
mengelola sumber daya perangkat
keras komputer atau hardware, dan menyediakan layanan umum untuk aplikasi perangkat lunak. Sistem operasi adalah jenis yang
paling penting dari perangkat
lunak sistem dalam sistem komputer. Tanpa sistem operasi, pengguna
tidak dapat menjalankan program aplikasi pada komputer mereka, kecuali program
aplikasi booting.
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).
Deadlock
Deadlock adalah keadaan dimana 2 atau lebih proses saling menunggu meminta resources untuk waktu yang tidak terbatas lamanya. Analoginya seperti pada kondisi jalan raya dimana terjadi kemacetan parah.
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.
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!!
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:
- Processor Synchronous
- Memory Synchronous
Mutual exclusive = Jika proses
Pi sedang mengeksekusi critical section maka tidak ada proses
lain yang dapat mengeksekusi dalam critical section mereka.
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 section-nya 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:
- Binary semaphore,
Semafor ini hanya memiliki nilai 1 atau 0. Sering juga disebut sebagai
semafor primitif
- 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
Masalah
Klasik Sinkronisasi
–
Bounded buffer problem
Bounded buffer
adalah tempat penampung data yang ukurannya terbatas, contohnya pada proses
produsen dan konsumen. Beberapa masalah produsen-konsumen : 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
Sumber : https://www.academia.edu/search?q=Sinkronisasi
http://www.mampirlah.com/teknik-informatika/makalah-sinkronisasi-data-dan-deadlock.html
- Alamat Blog Dosen : https://syaifulahdan.wordpress.com
- Alamat web Program studi, Fakultas, Universitas : http://ti.ftik.teknokrat.ac.id, http://ftik.teknokrat.ac.id, www.teknokrat.ac.id
- Nama Mahasiswa : BERLIANA
- PRODI : INFORMATIKA
- KELAS : IF 20 E
Komentar
Posting Komentar