Akses bebarengan untuk berbagi dua bersama dapat mengakibatkan
inkosistensi data. Pemeliharaan konsistensi data memerlukan mekanisme
untuk memastikan eksekusi dari proses kerjasama.
Adapun pengertian lainnya yaitu Sinkronisasiadalah
proses pengaturan jalannya beberapa proses pada saat yang bersamaan.
Akses berbarengan untuk berbagi dua atau bersamaan dapat mengakibatkan
inkosistensi data. Pemeliharaan konsistensi data memerlukan mekanisme
untuk memastikan eksekusi dari proses kerjasama.
Shared memory merupakan solusi ke masalah
bounded-butter yang mengijinkan paling banyak n-1 materi dalam buffer
pada waktu yang sama. Suatu solusi, jika semua N buffer digunakan
tidaklah sederhana. Dimisalkan kita memdifikasi producer-consumer code
dengan menambahkan suatu variable counter, dimulai dari 0 dan
masing-masing waktu tambahan dari suatu item baru diberikan kepada
buffer.
Tujuan utama sinkronisasi adalah untuk menghindari terjadinya
inkonsitensi data karena pengaksesan oleh beberapa proses yang berbeda
(mutual exclusion) serta untuk mengatur urutan jalannya proses-proses
sehingga dapat berjalan dengan lancar dan terhindar dari deadlock dan
starvation. Sinkronisasi umumnya dilakukan dengan bantuan perangkat
sinkronisasi. Penyelesaian terhadap masalah ini sangat penting karena
perkembangan teknologi sistem komputer menuju ke sistem multiprocessing, terdistribusi dan paralel yang mengharuskan adanya proses-proses kongkuren.
Sinkronisasi sederhananya : Saling bertukar data agar memiliki jumlah data yang sama.
tujuan utama mungkin lebih condong ke arah back-up (membuat cadangan)
tapi ada pula sinkronisasi jadwal kerja (kalender) untuk menciptakan suatu event yang tepat secara bersamaan diantara pelaku sinkronisasi. Sinkronisasi umumnya dilakukan dengan bantuan perangkat sinkronisasi.
tujuan utama mungkin lebih condong ke arah back-up (membuat cadangan)
tapi ada pula sinkronisasi jadwal kerja (kalender) untuk menciptakan suatu event yang tepat secara bersamaan diantara pelaku sinkronisasi. Sinkronisasi umumnya dilakukan dengan bantuan perangkat sinkronisasi.
1. 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.
Untuk mencegah race condition, proses-proses yang berjalan besamaan harus 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.
Contoh Race Condition
int counter = 0; //Proses yang dilakukan oleh produsen item nextProduced; while (1) { while (counter == BUFFER_SIZE) { ... do nothing ... } buffer[in] = nextProduced; in = (in + 1) % BUFFER_SIZE; counter++; } //Proses yang dilakukan oleh konsumen item nextConsumed; while (1) { while (counter == 0) { ... do nothing ... } nextConsumed = buffer[out] ; out = (out + 1) % BUFFER_SIZE; counter--; }
Pada program di atas, terlihat bahwa terdapat variabel counter yang
diinisialisasi dengan nilai 0, dan ditambah 1 setiap kali terjadi
produksi serta dikurangi 1 setiap kali terjadi konsumsi. Pada bahasa
mesin, baris kode
counter++
dan counter--
diimplementasikan seperti di bawah ini://counter++ register1 = counter register1 = register1 + 1 counter = register1 //counter-- register2 = counter register2 = register2 - 1 counter = register2
Jika perintah
counter++
dan counter--
berusaha mengakses nilai counter secara konkuren, maka nilai akhir dari
counter bisa salah. Hal ini tidak berarti nilainya pasti salah, tapi ada
kemungkinan untuk terjadi kesalahan. Contoh urutan eksekusi baris kode
tersebut yang mengakibatkan kesalahan pada nilai akhir counter:2//misalkan nilai awal counter adalah 2
.produsen: register1 = counter (register1 = 2) .produsen: register1 = register1 + 1 (register1 = 3) .konsumen: register2 = counter (register2 = 2) .konsumen: register2 = register2 - 1 (register2 = 1) .konsumen: counter = register2 (counter = 1).produsen: counter = register1 (counter = 3)
Status akhir dari counter seharusnya adalah 0, tapi kalau urutan
pengeksekusian program berjalan seperti di atas, maka hasil akhirnya
menjadi 3. Perhatikan bahwa nilai akhir counter akan mengikuti eksekusi
terakhir yang dilakukan oleh komputer. Pada program di atas, pilihannya
bisa 1 atau 3. Perhatikan bahwa nilai dari counter akan bergantung dari
perintah terakhir yang dieksekusi. Oleh karena itu maka kita membutuhkan
sinkronisasi yang merupakan suatu upaya yang dilakukan agar
proses-proses yang saling bekerjasama dieksekusi secara beraturan demi
mencegah timbulnya suatu keadaan race condition.
Ilustrasi program produsen dan konsumen
2. Masalah Critical Section
Kunci untuk mencegah masalah ini dan di situasi yang lain yang
melibatkan shared memori, shared berkas, and shared sumber daya yang
lain adalah 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 memutuhkan mutual exclusion,
sebuah jalan yang menjamin jika sebuah proses sedang menggunakan shared
berkas, proses lain dikeluarkan dari pekerjaan yang sama. Kesulitan
yang terjadi karena proses 2 mulai menggunakan variabel bersama sebelum
proses 1 menyelesaikan tugasnya.
Masalah menghindari race conditions dapat juga diformulasikan
secara abstrak. Bagian dari waktu, sebuah proses sedang sibuk melakukan
perhitungan internal dan hal lain yang tidak menggiring ke kondisi race conditions.
Bagaimana pun setiap kali sebuah proses mengakses shared memory atau
shared berkas atau melakukan sesuatu yang kitis akan menggiring kepada race conditions. Bagian dari program dimana shaed memory diakses disebut Critical Section atau Critical Region.
Walau pun dapat mencegah race conditions, tapi tidak cukup
untuk melakukan kerjasama antar proses secara pararel dengan baik dan
efisien dalam menggunakan shared data. Kita butuh 4 kondisi agar
menghasilkan solusi yang baik:
- Tidak ada dua proses secara bersamaan masuk ke dalam citical section.
- Tidak ada asumsi mengenai kecepatan atau jumlah cpu.
- Tidak ada proses yang berjalan di luar critical secion yang dapat mengeblok proses lain.
- Tidak ada proses yang menunggu selamamya untuk masuk critical section.
Critical Section adalah sebuah segmen kode di mana sebuah proses yang mana sumber daya bersama diakses. Terdiri dari:
Entry Section: kode yang digunakan untuk masuk ke dalam critical section
Critical Section: Kode di mana hanya ada satu proses yang dapat dieksekusi pada satu waktu
Exit Section: akhir dari critical section, mengizinkan proses lain
Remainder Section: kode istirahat setelah masuk ke critical section.
Ada bebrapa Solusi untuk mengatasi masalah Critical Section, yaitu:
- Mutual exclution
Jika proses pi sedang mengeksekusi critical section-nya maka tidak
ada proses lain yang dapat mengeksekusi dalam critical section mereka.
- Progress
Jika tidak ada proses yang sedang dieksekusi dalam critical
section dan ada beberapa proses yang ingin masuk ke critical section
mereka, maka pemilihan proses yang akan masuk ke critical section
berikutnya tidak bias ditunda.
- Bounded Waiting
Suatu keterikatan harus ada pada sejumlah proses yang diijinkan
masuk ke critical section mereka, setelah adanya proses yang meminta
masuk ke critical section dan sebelum permintaan itu diterima.
- a. Asumsikan bahwa tiap proses mengeksekusi pada nonzero speed.
- b. Tidak ada asumsi mengenai kecepatan relative dan n proses.
Cara-cara memecahkan masalah
- Hanya dua proses, Po dan P1
- Struktur umum dari proses adalah Pi (proses lain Pj)
3. Bakery Algorithm
Critical section untuk n proses:
- Sebelum memasuki critical Section-nya, proses menerima nomor pemilik nomor terkecil memasuki critical section.
- Jika proses Pi dan Pj menerima nomor yang sama, jika i < j, maka Pi dilayani duluan, lainnya Pj dilayani duluan (if i< j, then Pi is served first; else Pj is served first).
- Skema penomoran selalu menghasilkan angka –angka yang disebutkan satu per satu, yaitu 1,2,3,3,3,3,4,5….
PERANGKAT KERAS SINKRONISASI
Pada 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 mngunci bus sehingga pemroses-pemroses lain tak dapat menggunakan bus. Pemroses yang mengunci bus dengan leluasa membaca dan/atau memodifikasi suatu lokasi memori. Beragam instruksi mesin disediakan oleh perancang pemroses guna membantu implementasimutual exclusion. Diantara instruksi-instruksi itu adalah:
tsl (test and set locktas atau ts (test and set), digunakan IBM S/360, keluarga Motorola M68000, dan lain-laincs (compare and set), digunakan IBM 370 seriesexchange (xchg), digunakan intel X86dsb
4. 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
Sebagai alat sinkronisasi yang umum, semaphoredieksekusi 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.
Semaphore merupakan salah satu sumber daya sistem. Misalnya dua proses P1 dan P2, dua sumber daya kritisR1 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 kondisideadlock, 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.
Terdapat dua bentuk semaphore yaitu counting semaphore dan binary semaphore. Counting semaphoremenggunakan 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.
Untuk mengimplementasikan permasalahan sinkronisasi dapat menggunakan model yang digunakan untuk permasalahan Bounded Buffer, Reader Writer dan Dining Philosopher yang akan dijelaskan di bawah ini.
1 Bounded-Buffer (Producer-Consumer) Problem
- Produsen menghasilkan barang dan konsumen yang akan menggunakannya. Ada beberapa batasan yang harus dipenuhi, antara lain :
- Barang yang dihasilkan oleh produsen terbatas
- Barang yang dipakai konsumen terbatas
- Konsumen hanya boleh menggunakan barang yang dimaksud setelah produsen menghasilkan barang dalam jumlah tertentu
- Produsen hanya boleh memproduksi barang jika konsumen sudah kehabisan barang
Untuk penyelesaian permasalahan bounded buffer menggunakan semaphore
2. Reader and Writer Problem
Terdapat dua variasi pada masalah ini, yaitu :
- Seorang reader tidak perlu menuggu reader lain untuk selesai hanya karena ada writer menunggu (reader memiliki prioritas lebih tinggi disbanding dengan writer)
- Jika ada writer yang sedang menunggu, maka tidak boleh ada reader lain yang bekerja (writer memiliki prioritas yang lebih tinggi)
3. Dining-Philosophers Problem
Permasalahan dining-philosophers digambarkan pada Gambar 5-2
dimana terdapat 5 filosof yang akan makan. Di sana disediakan 5 supit.
Jika filosof lapar, ia akan mengambil 2 supit yaitu di tangan kanan dan
kiri. Namun adakalanya hanya diambil supit satu saja. Jika ada filosof
yang mengambil 2 supit, maka ada filosof yang harus menunggu sampai
supit tersebut diletakkan. Hal ini dapat diimplementasikan dengan wait dan signal.
5. Monitors
Solusi sinkronisasi ini dikemukakan oleh Hoare pada tahun 1974.
Monitor adalah kumpulan prosedur, variabel dan struktur data di satu
modul atau paket khusus. Proses dapat memanggil prosedur-prosedur kapan
pun diinginkan. Tapi proses tak dapat mengakses struktur data internal
dalam monitor secara langsung. Hanya lewat prosedur-prosedur yang
dideklarasikan minitor untuk mengakses struktur internal.
Properti-properti monitor adalah sebagai berikut:
- Variabel-variabel data lokal, hanya dapat diakses oleh prosedur-prosedur dala monitor dan tidak oleh prosedur di luar monitor.
- Hanya satu proses yang dapat aktif di monitor pada satu saat. Kompilator harus mengimplementasi ini(mutual exclusion).
- Terdapat cara agar proses yang tidak dapat berlangsung di-blocked. Menambahkan variabel-variabel kondisi, dengan dua operasi, yaitu Wait dan Signal.
- Wait: Ketika prosedur monitor tidak dapat berkanjut (misal producer menemui buffer penuh) menyebabkan proses pemanggil diblocked dan mengizinkan proses lain masuk monitor.
- Signal: Proses membangunkan partner-nya yang sedang diblocked dengan signal pada variabel kondisi yang sedang ditunggu partnernya.
- Versi Hoare: Setelah signal, membangunkan proses baru agar berjalan dan menunda proses lain.
- Versi Brinch Hansen: Setelah melakukan signal, proses segera keluar dari monitor.
Dengan memaksakan disiplin hanya satu proses pada satu saat yang
berjalan pada monitor, monitor menyediakan fasilitas mutual exclusion.
Variabel-variabel data dalam monitor hanya dapat diakses oleh satu
proses pada satu saat. Struktur data bersama dapat dilindungi dengan
menempatkannya dalam monitor. Jika data pada monitor merepresentasikan
sumber daya, maka monitor menyediakan fasilitas mutual exclusion dalam
mengakses sumber daya itu.
Sumber:
https://ayuewiejayantie.wordpress.com/sinkronisasi-proses/
https://aanazar.wordpress.com/2012/12/26/makalah-sinkronisasi-dan-deadlock/
Tidak ada komentar:
Posting Komentar