Concurrency adalah :
- Komunikasi diantara proses
- Pembagian resource (sumber daya)
- Sinkronisasi dari beberapa proses
- Alokasi dari waktu proses
Masalah dalam Concurrency :
- Sumber daya disebar secara global
- Managemen dari alokasi sumber daya
- Programming yang error sulit untuk dicari
O/S Concern :
- Menjaga jalur dari proses yang aktif
- Mengalokasikan dan mengdelokasikan sumber daya, berupa :
- Waktu processor
- Memory
- File
- I/O Device
- Menjaga data dan sumber daya (resource)
- Hasil dari proses harus independen dari kecepatan eksekusi dari proses concurrent yang lain.
Kompetisi dalam proses untuk sumber daya :
- Mutual Exclusion
- Deadlock
- Starvation
Kerja sama dalam proses :
- Dalam hal Sharing (pembagian)
- Penulisan harus eksklusif satu sama yang lain
- Section yang critical digunakan untuk menyediakan integritas data
- Dalam hal Komunikasi
- Pesan dikirimkan
- Dapat memiliki deadlock
- Dapat memiliki starvation
Mutual Exclusion
- Hanya 1(satu) proses yang dapat berada di section critical dalam sebuah resource
- Sebuah proses yang menghentikan section non-critical harus melakukan hal tersebut tanpa menganggu proses lain
- Tidak ada deadlock ataupun starvation
- Sebuah proses harus tidak meng-delay akses ke section critical ketika tidak ada proses lain yang menggunakannya.
- Tidak ada asumsi yang dibuat tentang kecepatan relatif proses atau banyaknya proses
- Sebuah proses tetap berada di dalam critical section untuk waktu yang terbatas
Proposal untuk dapat mencapai Mutual Exclusion :
- Menonaktifkan interupsi
- Mengunci variable
- Alternasi yang ketat
- Solusi Peterson
- Intruksi TSL
Penjelasan untuk poin-poin di atas :
1. Interrupt Disabling (pengnonaktifan interupsi)
- Proses berjalan sampai meminta servis dari operating system (OS) atau sampai proses tersebut di interupsi
- Pengnonaktifan interupsi di jamin akan mutual exclusion (pengecualian secara mutual)
- Processor dilimitkan dalam kemampuan untuk interleave program
- Multiprocessing (pengnonaktifan interupsi pada satu processor tidak akan menjamin mutual exclusion
2. Lock Variables
- Apabila lock = 0, lock akan diset ke = 1, kemudian akan masuk ke wilayah yang critical
- Apabila lock = 1, tunggu sampai lock = 0
3. Strict Alternation
(a) Proses 0
(b) Proses 1
4. Solusi Peterson
Solusi Peterson untuk mendapatkan mutual exclusion
5. Intruksi TSL
masuk dan meninggalkan critical region menggunakan intruksi TSL
masuk dan meninggalkan critical region menggunakan intruksi XCHG
Semaphore
- Variable yang spesial disebut semaphore digunakan untuk signaling
- Apabila proses sedang menunggu untuk sinyal, proses akan menunggu sampai sinyal tersebut sudah dikirim
- Menunggu dan operasi sinyal tidak dapat di-interupsi
- Queue (antrian) digunakan untuk menahan proses yang menunggu di dalam semaphore
- Semaphore merupakan variable yang memiliki nilai integer
- Dapat di-inisialisasi ke angka non-negatif
- Operasi untuk menunggu mengurangi nilai dari semaphore
- Operasi untuk pensinyalan menambah nilai dari semaphore
Masalah dalam Producer dan Consumer :
- Satu atau lebih producer akan menghasilkan data dan meletakkan nya ke dalam sebuah buffer
- Consumer (single = satu) akan mengambil item keluar dari buffer sekaligus
- Hanya satu producer atau consumer yang dapat mengakses buffer dalam sekali waktu
(1)
(2)
Classic IPC Problem
1. Sleeping Barber's Problem
2. Dining Philosopher's Problem
- Philosopher eat / think (philosopher makan / mikir)
- Eating needs 2 forks (makan membutuhkan 2 garpu)
- Memilih 1(satu) garpu sekaligus
- Bagaimana cara mencegah deadlock
Solusi untuk masalah Dining Philosopher :
(1)
(2)
Read Writer's Problem :
- Berapa banyak pembaca pun masih dapat membaca file tersebut
- Hanya 1(satu) penulis saja dalam satu waktu yang dapat menulis file
- Ketika penulis sedang menulis pada file, tidak ada pembaca yang dapat mengakses nya (membaca)
Solusi untuk masalah Reader Writer :
(1)
(2)
Mutex
Mutex di pthread :
beberapa dari panggilan pthread berhubungan dengan kondisi variable
Contoh untk menyelesaikan masalah pada Produser - Konsumer :
(1)
(2)
(3)
- Pembangun bahasa pemograman yang mengsupport akses terkontrol ke data yang dibagi
- Kompiler menambahkan sinkronisasi secara otomatis
- Dilaksanakan pada saat runtime
- Enkapsulasi
- Membagi struktur data
- Prosedur / fungsi yang mengoperasikan data
- Sinkronisasi antara proses memanggil prosedur tersebut
- Hanya 1 proses aktif di dalam monitor dalam waktu kapan pun
- Semua prosedur adalah bagian dari sektor critical
- Sinkronisasi tingkat tinggi mengijinkan sharing (pembagian) yang aman dari tipe data abstrak di antara proses concurrent
Cth :
monitor monitor-name
{
shared variable declarations
procedure body P1()
{
.....
}
procedure body P2()
{
......
}
procedure body Pn()
{
......
}
{
initialization code
}
}
- Mutual Exclusion
- Hanya 1(satu) proses yang dapat dieksekusi di dalam
- Apabila proses kedua mencoba untuk masuk ke prosedur monitor, maka monitor akan mem-block sampai proses pertama selesai menggunakan monitor
- Setelah masuk ke monitor, proses dapat menemukan bahwa beliau sudah tidak dapat melanjutkan lagi
- kondisi variable disediakan oleh monitor
- proses dapat menunggu / memberikan sinyal ke yang lain untuk melanjutkan
- kondisi variable (condition variable) dapat di akses hanya dari dalam monitor
- proses menunggu menyerahkan monitor untuk sementara
- Untuk mengijinkan proses untuk menunggu di dalam monitor, variable kondisi harus di deklarasi sebagai :
condition x;
- Kondisi variable dapat digunakan dengan sistem menunggu (wait) dan signal
- Pengoperasian
wait (x);
signal (x);
- Operasi signal melanjutkan 1 proses yang ditunda. Apabila tidak ada proses yang ditunda, maka operasi signal tidak memiliki efek
Message Passing :
- Informasi berkomunikasi dari satu proses dengan proses lain melalui :
send (dest, &message)
receive (source, &message)
- Penerima dapat menentukan apapun
- Penerima dapat memutuskan untuk memblock atau tidak
- Tidak memerlukan ruang address yang dibagi (shared address spaces)
- pre-dates semaphore
- Dapat diaplikasikan ke single dan multi processor dan sistem terdistribusi
Operasi pada Message Passing :
- send ( )
- Synchronous
- Mengembalikan (return) setelah data dikirim
- Memblock apabila buffer telah penuh
- Asynchronous
- Mengembalikan (return) setelah I/O telah dimulai
- Selesai ?
- Pengecekan secara eksplisit
- Signal atau pengakuan (acknowledgement)
- receive ( )
- Synchronous
- Mengembalikan (return) setelah ada nya pesan (message)
- Akan memblock apabila belum ada
- Asynchronous
- Mengembalikan (return) pesan pertama apabila terdapat pesan
- Akan mengembalikan (return) indikasi apabila tidak ada pesan
- Komunikasi indirect (tidak langsung) - mailbox
- Pesan dikirim ke area yang sudah ditentukan -- mailbox
- Proses membaca pesan dari mailbox
- Mailbox harus dibuat dan diurus
- Pengirim akan di block apabila mailbox telah penuh
- Memungkinkan komunikasi many-to-many
- Di dalam 1 mesin dan di antara mesin
- MACH (CMU)
- GEC 4080
- Pesan yang diberikan kepada pengirim menandakan bahwa pesan yang asli telah diterima
- Dapat saja synchronous atau asynchronous
- Bisa saja positif atau negatif
- Bisa saja dikirim satu sama lain di dalam pesan (implisit atau eksplisit)
Tidak ada komentar:
Posting Komentar