Konsep Bahasa Pemograman-BAB 10 -Concurrency

BAB 10

Concurrency

1.Pengenalan Concurrency

Concrrency adalah sebuah tugas(task) atau proses yang dimana unit program dapat dieksekusi bersamaan dengan unit program yang lain.Sebuah tugas (task) berbeda dengan subprogram biasa bila :

-Sebuah tugas dapat mulai secara implisit

-Ketika sebuah unit program memulai eksekusi sebuah tugas,maka tidak perlu dilakukan penundaan

-Ketika sebuah eksekusi tugas telah selesai,control tidak kembali kepada pemanggil

-Sebuah tugas biasanya dijalankan secara bersamaan

 

Concurrency pada sebuah mesin dapat terjadi pada 4 buah level :

–         Instruksi level (eksekusi dua atau lebih instruksi mesin serentak)

–         Statement level (eksekusi dua atau lebih statement bahasa tingkat tinggi serentak)

–         Unit level (eksekusi dua atau lebih subprogram unit serentak)

–         Program level (eksekusi dua atau lebih program serentak)

 

Secara umum,sebuah tugas dapat dibagi menjadi 2 kategori :

  • Heavyweight task ,sebuah tugas yang mengeksekusi ruang alamatnya sendiri
  • Lightweight task ,sebuah tugas yang berjalan pada ruang alamat yang sama.

Lightweight task dapat lebih efisien dibandingkan Heavyweight task,karena hanya butuh usaha kecil untuk mengatur eksekusinya.Sebuah tugas (task) dapat berhubungan dengan lainnya melalui variabel non-lokal yang dibagi. Sebuah tugas (task) dikatan disjoint apabila tidak berhubungan atau tidak mempenaruhi task lainnya pada program tersebut.Karena,task pada umumnya bekerja bersama untuk menyelesaikan masalah untuk itu mereka tidak disebut disjoint,mereka harusnya menggunakan beberapa bentuk komunikasi atau mengsinkronisasikan eksekusi atau membagi data mereka.

 

Synchronization adalah mekanisme yang mengkontrol task yang akan dieksekusi.Ada 2 jenis synchronization yang diperlukan saat task lagi berbagi data :

Terdapat 2 tipe synchronization :

–    Cooperation synchronization

   Cooperation synchronization adalah synchronization  yang 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

Competititon synchronization adalah synchronization  yang dibutuhkan antara 2 task ketika keduanya membutuhkan resource yang tidak dapat digunakan secara serentak.

Komunikasi antara task sangat penting untuk synchronization disediakan oleh :

– Shared nonlocal variables

– Parameters

– Message passing

 

Scheduler berfungsi memberikan sinkronisasi ke mekanisme eksekusi task yang terlambat.Kontrol eksekusi task di atur oleh program bernama scheduler.

Macam-macam tahap eksekusi task:

–         New adalah tahap dimana sebuah tasks dibuat tapi belum dijalankan

–         Ready adalah tahap dimana sebuah tasks siap untuk dijalankan tapi belum berjalan

–         Running adalah tahap dimana sebuah tasks yang sedang berjalan / eksekusi

–         Blocked adalah tahap dimana sebuah tasks yang diblok ketika sedng berjalan / interrupted oleh sesuatu

–         Dead adalah tahap dimana sebuah tasks yang tidak lagi aktif

                                     Diagram dari tahap task

Satu hal yang penting dalam eksekusi task yaitu bagaimana task yang dipilih telah selesai untuk berpindah ke tahapp running ketika task yang saat itu sedang berjalan telah menjadi blocked atau time slice telah berakhir? Berbagai algoritma telah digunakan untuk pilihan ini ,beberapa berdasarkan level prioritas yang spesifik .Algoritma yang melakukan tindakan pemilihan ini diimplementasikan di scheduler. Asosiasi antara ekseksi concurrent dengan kegunaan dari sumber yang dapat dibagi menghasilkan konsep liveness.Liveness adalah karakteristik dari program unit yang mungkin / tidak mungkin memiliki sequential code (unit akan menyelesaikan eksekusinya).Sedangkan deadlock adalah  semua task pada concurrent environment kehilangan liveness nya.Deadlock merupakan ancaman yang serius terhadap reliability suatu program.

2.Masalah dalam mendesain Concurrency

  • Competition and cooperation synchronization (yang paling penting)
  • Controlling task scheduling
  • How can an application influence task scheduling
  • How and when tasks start and end execution
  • How and when are tasks created

Masalah dalam mendesain concurrency dapat diatasi dengan 3 hal berikut yaitu:semaphores,

monitors,dan message passing.

  • Semaphore

Semaphore adalah data struktur mengandung counter dan queue untuk menyimpan task descriptor (task descriptor adalah data struktur yang menyimpan semua informasi relevan tentang tahap eksekusi dari sebuah task) / mekanisme simple yang dapat digunakan untuk memberikan sinkronisasi task.Semaphore dapat digunakan untuk implementasi guard  yaitu sebuah alat linguistic yang dimana kode yang dijaganya dapat dieksekusi dalam sebuah kondisi spesifik yang benar.Jadi,sebuah guard  hanya dapat dipakai sekali untuk sebuah task untuk mengakses data yang dibagi struktur data pada waktu tertentu.
Semaphore hanya memiliki dua operasi, wait  dan release (awalnya disebut Passeren  dan Vrygerem oleh Dijkstra). Semaphore dapat digunakan untuk menyediakan competition dan cooperation synchronization.

  • Cooperation Synchronization dengan Semaphores

Contohnya adalah shared buffer.

  • Buffer diimplementasikan sebagai tipe data abstrak dengan operasi DEPOSIT dan FETCH yang menjadi acara untuk mengakses
  • Menggunakan 2 semaphore untuk cooperation yaitu : emptyspots dan
  • Balasan dari semaphore biasanya digunakan unyuk menyimpan angka dari emptyspots dan fullspots pada
  • DEPOSIT pertama kali harus memeriksa adanya ruang pada buffer.Bila ada,maka counter dari emptyspots akan dikurangi dan nilai akan dimasukkan. Bila tidak ada ,pemanggil akan disimpan pada barisan dari
  • Setelah DEPOSIT selesai,maka counter of fullspots akan dinaikkan
  • FETCH pertama kali wajib memeriksa fullspots untuk melihat apaka adanya nilai.Jika ada fullspot,counter dari fullspots akan berkurang dan nilai akan dihilangkan .Jika tidak ada nilai,maka pemanggil harus memindahkan pada antrian Ketika FETCH telah selesai , maka counter of emptyspots akan naik

Operasi FETCH dan DEPOSIT pada semphorres dapat dipakai melalui 2 operasi semaphores yaitu Wait dan Release.

 

 

Berikut adalah contoh penggunaan operator wait dan release pada 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

 

  • Competition Synchronization dengan Semaphores

Competition Synchronization dengan Semaphores menggunakan semaphore ketiga yang dinamakan access yang digunakan untuk control akses.Counter dari akses hanya memiliki nilai 0 dan 1 .Inilah yang disebut sebagai binary semaphore.Perhatikan juga wait dan release harus atomic.

  • Monitors

Monitors bertugas mengenkapsulasi shared data dan operasi nya untuk membatasi akses. Monitor adalah abstract data type (ADT) untuk shared data.Monitors terdapat pada bahasa pemograman Ada,Java dan C#.Monitors dapat digunakan untuk menyediakan competition tanpa semaphores dengan bertanggung jawab dalam mentransfer sinkronisasi ke system run-time.

  • Cooperation Synchronization dengan Semaphores

Cooperation diantara proses masih merupakan task programming.Programmer harus memastikan shared buffer tidak mengalami underflow atau overflow.

  • Competition Synchronization dengan Semaphores

 Shared data bertempat tinggal di monitor dari pada di unit klien.Implementasi monitor memastikan sinkronisasi akses dengan memperbolehkannya sekali akses pada suatu waktu.Prosedur pemanggilan monitor menunggu secara implisit jika monitor sibuk pada saat pemanggilan.

 

  • Message Passing

Message Passing adalah model general dari concurrency.Message passing dapat melakukan semaphores dan monitors. Message passing tidak hanya untuk competition synchronization.Komunikasi task dapat diibaratkan sebagai konsultasi dokter-kebanyakan waktu dihabiskan untuk menunggu anda atau dokter,namun ketika keduanya siap ,maka akan bertemu.

Linimasa waktu pertemuan

Server task adalah sebuah task  yang menerima clauses bukan kode lain .Sebuah task tanpa menerima clauses disebut sebagai actor task.Sebuah actor task dapat mengirimkan pesan kepada actor task lainnya.Sebuah pengirim harus mengetahui entry name dari penerima tapi tidak sebaliknya.

3.Multiple Entry Points

Sebuah task dapat memiliki lebih dari 1 titik masuk dengan cara spesifikasi task memiliki klausa masuk untuk setiapnya dan task body dapat menerima klausa dari setiap klausa masuk dan memindahkannya pada sebuah select clause yaitu dalam sebuah loop.Contoh penggunaan task dengan lebih dari 1 titik masuk :

 

 

task body Teller is

loop

        select

          accept Drive_Up(formal params) do

end Drive_Up;

or

          accept Walk_Up(formal params) do

end Walk_Up;

end select;

end loop;

end Teller;

 

Oleh Kelompok 12

Referensi :

Bab 10 :

  • Robert W. Sebesta – Concept of Programming Languages (Tenth Edition), Chapter 13
  • http://arcana70.blogspot.co.id/2014/06/kbp-pert-10.html
  • http://panduofunited.blogspot.co.id/2012/02/pengertian-concurrency.html
  • https://binusmaya.binus.ac.id/newStudent/#/class/resources.COMP6060/007420/1610/LEC/9239

 

 

 

 

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *