Concurrency
Concurrency pada
sebuah mesin dapat terjadi pada 4 buah level :
-
Instruksi level (eksekusi 2 atau lebih
instruksi mesin serentak)
-
Statement level (eksekusi 2 atau lebih
statement bahasa tingkat tinggi serentak)
-
Unit level (eksekusi 2 atau lebih subprogram
unit serentak)
-
Program level (eksekusi 2 atau lebih program
serentak)
Ada 2 kategori
concurrent unit control yaitu :
-
Physical concurrency
Memiliki lebih dari 1 processor, beberapa program
unit dari program yang sama di eksekusi serentak.
-
Logical concurrency
Relaxation konsep dari concurrency yang membolehkan
programmer dan aplikasi software memberikan concurrency asli.
Subprogram
level concurrency
Task atau
process atau thread adalah sebuah program unit yang dapat di eksekusi bersamaan
dengan program unit yang lain.
Task berbeda
dari subprogram biasa, terletak pada :
-
Sebuah task dapat implicit
-
Ketika program unit menjalan kan
eksekusi task, maka tidak perlu dilakukan penundaan
-
Ketika eksekusi task selesai, control
dapat tidak kembali kepada pemanggil nya
Task dapat di
bagi menjadi 2 kategori yaitu :
-
Heavyweight
Task eksekusi pada ruang alamat nya sendiri
-
Lightweight
Semua
task berjalan pada ruang address yang sama
Jika sebuah task
tidak berkomunikasi terhadap eksekusi pada sebuah program di sebut disjoint.
Synchronization
adalah meknisme yang mengontrol urutan dari sebuah eksekusi task.
Terdapat 2 tipe
synchronization :
-
Cooperation synchronization
Dibutuhkan antara task A dan task B ketika task A
harus menunggu task B untuk menyelesaikan aktivitas spesifik sebelum task A
dapat melanjutkan eksekusi.
-
Competition synchronization
Dibutuhkan
antara 2 task ketika keduanya membutuhkan resource yang tidak dapat digunakan
secara serentak.
Scheduler
berfungsi memberikan synchronisasi ke mekanisme eksekusi task yang terlambat.
Task eksekusi
control di atur oleh program bernama scheduler.
Macam-macam task
eksekusi states :
-
New (dibuat tapi belum dijalankan)
-
Ready (siap untuk dijalankan tapi belum
berjalan)
-
Running (task yang sedang berjalan /
eksekusi)
-
Blocked (task yang diblok ketika sedng
berjalan / interrupted oleh sesuatu)
-
Dead (task yang tidak lagi aktif)
Liveness = karakteristik
dari program unit yang mungkin / tidak mungkin memiliki sequential code (unit
akan menyelesaikan eksekusinya)
Deadlock = semua
task pada concurrent environment kehilangan liveness nya
Semaphore
Semaphore adalah
data struktur mengandung counter dan queue untuk menyimpan task descriptor
(data struktur yang menyimpan semua informasi relevan tentang state eksekusi dari
sebuah task) / mekanisme simple yang dapat digunakan untuk memberikan
syncronisasi task.
Contoh semaphore
:
wait(aSemaphore)
if aSemaphore’s counter > 0 then
decrement aSemaphore’s counter
else
put the
caller in aSemaphore’s queue
attempt to
transfer control to some ready task
(if the
task ready queue is empty, deadlock occurs)
end if
release(aSemaphore)
if aSemaphore’s queue is empty (no task is waiting) then
increment aSemaphore’s counter
else
put the
calling task in the task-ready queue
transfer
control to a task from aSemaphore’s queue
end
Gambar Semaphore Monitor
Monitor
Mengenkapsulasi
shared data dan operasi nya pada akses terbatas. Monitor adalah abstract data
type (ADT) untuk shared data.
No comments:
Post a Comment