Sinkronisasi - Repository UNIKOM

  Kongkurensi ( Concurrency

  )

  • Proses-proses disebut mengalami kongkurensi jika proses- proses (lebih dari satu proses) berada pada saat yang sama
  • Kongkurensi dapat terjadi pada single processor (melalui multiprogramming) maupun multiple processor (melalui multiprocessing atau distributed processing)

Kongkurensi dapat timbul pada tiga kasus berikut

  • Multiple application : Terjadi pergantian sejumlah job atau aplikasi secara dinamik
  • Structured application : sebagai penerapan disain modular, beberapa aplikasi dapat diterapkan sebagai kumpulan dari proses-proses kongkuren
  • Operating-system structure: sistem operasi diterapkan

  Proses Kongkurensi Time

  • Pada single processor P1 proses-proses dieksekusi P2 secara interleaved untuk P3 mewujudkan eksekusi yang simultan (a) Interleaving • Sedangkan pada multiple Time processor proses-proses P1 dapat dieksekusi selain P2 secara interleaved juga P3 dapat secara overlap (b) Interleaving and overlapping

  Prinsip-prinsip Kongkurensi

  Kongkurensi meliputi

  • Alokasi waktu prosesor untuk proses-proses
  • Pemakaian bersama (sharing) dan persaingan (competition) untuk mendapatkan sumber daya
  • Komunikasi antar proses
  • Sinkronisasi aktivitas banyak proses Masalah akibat kongkurensi : karena kecepatan eksekusi tidak dapat diprediksi

  Masalah kongkurensi pada single processor

  • Pemakaian bersama sumber daya global
  • Sistem operasi sulit mengoptimalkan alokasi sumber daya

  Contoh pemakaian bersama sumber daya global

  • Jika dua proses menggunakan variabel global yang sama, serta keduanya membaca dan menulis variabel itu maka urutan terjadinya pembacaan dan penulisan terhadap variabel itu menjadi kritis (race condition)

  Contoh sistem operasi sulit mengoptimalkan alokasi sumber daya

  • Jika proses A meminta suatu chanel I/O tertentu dan kemudian disuspend sebelum menggunakan channel tersebut. Jika sistem operasi mengunci channel tersebut dan mencegahnya digunakan oleh proses lain maka tindakan ini merupakan ketidakefisienan

Kepedulian Sistem Operasi

  Disain dan bentuk manajemen sistem operasi yang bagaimana yang timbul akibat kongkurensi?

  1. Sistem operasi harus mampu menyimpan jejak dari proses- proses yang aktif (menggunakan PCB)

  Sumber daya meliputi :

  • Processor time
  • Memory - Files - I/O devices

  

3. Sistem operasi harus mampu memproteksi data dan sumber daya

fisik dari suatu proses agar tidak diganggu oleh proses yang lain

  4. Hasil dari proses harus independen terhadap kecepatan, kecepatan eksekusi tergantung dari proses kongkuren yang lain

  Beberapa istilah pada kongkurensi

  • Mutual Exclusion • Deadlock • Starvation Mutual Exclusion • Terdapat sumber daya yang tidak dapat dipakai bersama pada saat bersamaan, misalnya printer.
  • Sumber daya yang tidak dapat dipakai bersama ini disebut sumber daya kritis. Bagian program yang menggunakan sumber kritis ini disebut memasuki critical section.
  • Hanya satu program yang diijinkan masuk critical region. Sistem operasi menyediakan system call untuk

  Misalnya

  Deadlock Ilustrasi Deadlock

  • – Dua proses, P
  • 1 dan P 2<
  • – Dua sumber daya kritis, R
  • 1 dan R 2<
  • – Proses P
  • 1 dan P 2 harus mengakses kedua sumber
  • – Kondisi yang terjadi R
  • 1 diberikan ke P 1 , sedang R 2 diberikan ke P 2 .

      Karena untuk melanjutkan eksekusi memerlukan 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 keadaan deadlock, tidak dapat Starvation Misalnya

    • Terdapat tiga proses P1, P2 dan P3
    • P1, P2, P3 memerlukan pengaksesan sumber daya R secara periodik Skenario berikut terjadi :
    • P1 sedang diberi sumber daya R, P2 dan P3 blocked menunggu sumber daya R • Ketika P1 keluar dari critical section, P2 dan P3 diijinkan mengkakses R

      • Asumsi P3 diberi hak akses. Kemudian setelah selesai, hak akses

      kembali diberikan ke P1 yang saat itu kembali membutuhkan sumber daya R Jika pemberian hak akses pergantian terus menerus antara P1 dan P3, maka P2 tidak pernah memperoleh pengaksesan sumber

    Masalah critical section

    • Critical section adalah suatu bagian yang berisi sejumlah variabel yang akan dipakai bersama (sharing)
    • Secara umum, penyelesaian critical section harus memenuhi 3 syarat

      1. Mutual exclusion. Jika suatu proses sedang mengerjakan critical section, maka tidak boleh ada proses lain yang masuk critical section tersebut

      

    2. Progress. Jika tidak ada suatu proses yang mengerjakan critical

    section dan ada beberapa proses yang akan masuk ke critical

    section, maka hanya proses yang sedang berada pada entry-

    section saja yang boleh berkompetisi untuk mengerjakan critical section

      3. Busy waiting. Besarnya waktu tunggu dari suatu proses yang akan memasuki critical section sejak proses itu meminta ijin

      Interaksi proses

    • Telah ditunjukkan bahwa kongkurensi terjadi karena hasil aplikasi independen dari multiprogramming, dari aplikasi multiple-process dan dari penggunaan stuktur multiple- process pada sistem operasinya. Maka interaksi antar proses akan dikelompokkan berdasarkan derajat kepedulian (degree of awareness) suatu proses terhadap proses lain. Terdapat 3 derajat kepedulian yaitu

      Proses-proses independen yang tidak berniat untuk bekerja sama. Contohnya multiprogramming dari beberapa proses independen bisa berupa batch job atau bagian interaktif atau campurannya.

      Meski proses-proses ini tidak bekerja sama tapi sistem operasi tetap memperhatikan kompetisi sumber daya.

      Degree of Relationship Influence that one Potential control Awareness process has on the problems

    other

      

    Process unaware of Competition  Result of one  Mutual exclusion

    each other process

       Deadlock independent of the (renewable action of others resource)  Timing of process

       Starvation may be affected Processes indirectly Cooperation by  Result on one  Mutual exclusion aware of each other sharing process may  Deadlock (e.g. shared object) depend on (renewable information resource) obtained form

       Starvation others  Data coherence

       Timing of process may be affected Processes directly Cooperation by  Result of one  Deadlock aware of each other communication process may (consumable (have depend on resource) communication information

       Starvation primitives available obtained from ot them) others

      2. Processes indirectly aware of each other : Proses-proses yang sebenarnya tidak perlu peduli dengan proses lain tapi berbagi (sharing) akses untuk beberap obyek tertentu seperti I/O buffer

      3. Processes directly aware of each other Proses-proses yang dapat berkomunikasi dengan proses yang lain. Proses ini menampilkan kerja sama bukan kompetisi

      Kompetisi dan kerjasama dapat berupa :

    • Kompetisi antar proses untuk sumber daya
    • Kerja sama antar proses dengan sharing
    • Kerja sama antar proses dengan komunikasi

    Kompetisi antar proses untuk sumber daya

    • Dua atau lebih proses perlu untuk mengakses sebuah sumber daya yang sama.
    • Masing-masing proses tidak peduli dengan keberadaan proses yang lain dan masing-masing proses tidak saling mempengaruhi
    • Jika dua proses ingin mengakses satu sumber daya tunggal maka sistem operasi mengalokasikan untuk salah satu proses dan mengharuskan proses lain menunggu. Proses yang ditolak pengaksesannya jadi melambat.
    • Pada kasus yang ekstrim proses yang terblock tidak

    Kerja sama antar proses dengan sharing

    • Banyak proses mengakses variabel atau berkas yang dipakai bersama. Proses-proses dapat menggunakan dan memperbarui data yang dipakai bersama tanpa peduli proses yang lain
    • Proses mengetahui bahwa proses-proses lain dapat juga mengakses data yang sama. Proses-proses harus bekerja sama untuk menjamin integritas data yang dipakai bersama tersebut
    • Karena data disimpan pada sumber daya (devices, memory), maka timbul masalah pengendalian mutual exclusion, deadlock dan starvation.
    • Data diakses dengan dua mode yaitu :Proses pembacaan dan

    Kerja sama antar proses dengan komunikasi

    • Pada saat proses bekerja sama, masing-masing proses peduli dengan proses yang lain
    • Komunikasi menyediakan sinkronisasi atau koordinasi beragam aktivitas
    • Komunikasi dapat dicirikan sebagai keberadaan pesan- pesan dalam suatu urutan. Cara sederhana (primitive) untuk mengirim dan menerima pesan disediakan oleh bahasa pemrograman atau oleh kernel sistem operasi
    • Karena tidak ada yang disharing maka tidak diperlukan pengendalian mutual exclusion tapi masalah deadlock dan starvation tetap ada.

      Perlunya Mutual Exclusion

    • Kesuksesan pemanfaatan kongkurensi antar proses terjadi karena

      kemampuan mendefinisikan critical section dan menjamin mutual

      exclusion. Setiap fasilitas yang mendukung kedua hal ini harus memenuhi persyaratan
      • – Penjaminan mutual exclusion : hanya satu proses pada suatu saat yang diperbolehkan masuk ke critical section
      • – Proses yang halt di noncritical section harus tetap halt tanpa menganggu proses yang lain
      • – Tidak boleh ada proses yang berniat mengakses critical section

        menunggu dalam waktu yang tidak tentu. Tidak boleh ada

        deadlock atau starvation
      • – Saat tidak ada proses di critical section, proses yang ingin masuk ke critical section tidak boleh menunggu
      • – Tidak ada asumsi mengenai kecepatan relatif proses dan jumlah proses
      • – Proses berada di critical section hanya untuk waktu yang

      Penjaminan Mutual Exclusion – Software approaches

    • Pendekatan perangkat lunak dapat digunakan untuk proses kongkuren yang dilakukan pada single-processor maupun multi-processor dengan main memory sharing
    • Pada pendekatan ini diasumsikan mutual exclusion berupa pengaksesan memory secara bersamaan (reading/writing) pada alamat memory yang sama tanpa dukungan perangkat keras lain
    • Algoritma dengan pendekatan ini :
      • Algoritma Dekker (Dekker’s Algorithm)
      • Algoritma Peterson (Peterson’s Algorithm)

    Algoritma Dekker

    • • Dekker (Ahli matematik dari Belanda) membuat algoritma untuk

      mutual exclusion pada dua proses. Algoritma ini akan memperlihatkan bug yang sering terjadi pada program kongkuren Cara pertama
    • Setiap cara pada mutual exclusion didasari pada keeksklusifan

      penggunaan hardware yaitu hanya satu akses terhadap alamat

      memory yang dapat terjadi pada saat tertentu
    • Terdapat dua proses P0 dan P1 yang akan mengakses critical section.
    • • Protokolnya adalah : setiap proses akan mengecek apakah sudah

      waktunya masuk atau belum yaitu dengan melihat variabel turn apakah sudah sama dengan nomor dirinya atau belum. Jika sudah berarti boleh ke critical region jika belum tetap menunggu

    • Proses yang telah selesai di critical section akan mengubah variabel turn ini untuk proses yang lain. Variabel turn sebagai shared global variable
    • Shared global variable : var turn:0..1

      Program dari kedua proses ini :

      PROCESS 0 (P0) PROCESS 1 (P1) .

      . .

      . while turn 0 do {nothing}; while turn 0 do {nothing}; &lt;critical section&gt;; &lt;critical section&gt;; turn:=1 turn:=0 . .

    • Proses yang satu tergantung proses yang lain bila salah satu proses gagalmaka proses yang lain tidak dapat

      Cara Kedua

    • Masing-masing proses mempunyai variabel sendiri

      (flag). Suatu proses akan mengecek variabel global (flag) milik proses yang lain. Bila tertulis false berarti critical section tidak ada yang gunakan. Maka proses ini akan menulis variabel globalnya menjadi true dan pergi ke critical section. Setelah selesai proses ini kembali dan mengubah variabel globalnya menjadi false

    • Shared global variable : var flag:array [0 .. 1] of boolean yang diinisialisasi false
    • Program dari kedua proses

      Process 0 (P0) Process 1 (P1) .

      . .

      . while flag[1] do {nothing}; while flag[0] do {nothing}; flag[0] := true; flag[1] := true; &lt;critical section&gt;; &lt;critical section&gt;; flag[0] := false; flag[1] := false; .

      .

    • Jika suatu proses diluar critical section gagal makan proses lain tidak akan blocked bahkan proses ini dapat terus mengakses critical section karena flag dari proses yang lain selalu false
    • Tetapi jika suatu proses gagal di dalam critical section atau setelah mengeset flagnya true dan gagal sebelum masuk critical section maka proses yang lain akan

    • Jika suatu proses belum sempat mengubah flagnya menjadi

      true dan proses yang lain terlanjur melihat bahwa flagnya adalah false maka akan ada dua program di critical section.

      P0 executes the while statement and finds flag[1] set to false P1 executes the while statement and finds flag[0] set to false P0 sets flag[0] to true and enters its critical section P1 sets flag[1] to true and enters its critical section

      Cara ketiga Untuk memperbaiki cara kedua dilakukan pertukaran 2 baris

      Process 0 (P0) Process 1 (P1) flag[0] := true; flag[1] := true; while flag[1] do {nothing}; while flag[0] do {nothing}; &lt;critical section&gt;; &lt;critical section&gt;; flag[0] := false; flag[1] :=false

    • • Jika kedua proses mengubah flagnya menjadi true sebelum salah satu

      proses mengeksekusi pernyataan while maka setiap proses akan mengira ada proses yang telah masuk critical section sehingga terjadi deadlock Solusi yang tepat (Dekker’s Algorithm)

    • Pada cara ini ditambahkan kembali variabel turn yang menentukan proses mana yang berhak masuk ke critical section.
    • Saat proses P0 ingin masuk ke critical sectionnya, P0 mengubah

      flagnya menjadi true dan kemudian mengecek flag di P1. Jika false

      maka P0 segera ke critical section. Jika tidak P0 akan konsultasi ke

      juri. Jika P0 menemukan turn=0 maka ia tahu bahwa sudah waktunya untuk bersikeras dan mengecek secara periodik ke P1.
    • • P1 mencatat bahwa sudah waktunya untuk menulis false pada flagnya

      dan membiarkan P0 masuk ke critical section. Setelah P0 masuk critical section dia akan kembali dan mengubah flagnya menjadi false dan mengubah turn menjadi 1 untuk memberikan hak ke P1

      Dekker’s Algorithm

      Var flag: array [0..1] of boolean; turn: 0..1; Procedure P0; begin repeat flag[0] := true; while flag[1] do if turn = 1 then begin flag[0] :=false; while turn=1 do {nothing} flag[0] :=true end;

      &lt;critical section&gt;; turn := 1; flag[0] := false; &lt;remainder&gt; forever

      Procedure P1; Begin repeat flag[1] := true; while flag[0] do if turn = 0 then begin flag[1] := false; while turn =0 do {nothing} flag[1] := true end; &lt;critical section&gt;; turn := 0; flag[1] := false; &lt;remainder&gt; forever end; begin flag[0]:=false; flag[1]:=false; turn := 1; parbegin

    Algoritma Peterson

    • Algoritma ini dapat digunakan untuk 2 atau lebih proses kongkuren
    • Misal proses P0 mengubah flag[0] menjadi true, P1 tidak dapat masuk ke critical section. Jika P1 telah berada di dalam critical section maka flag[1] = true dan P0 terblock dan tidak masuk ke critical section.
    • Deadlock dicegah. Jika P0 terblock pada looping whilenya. Yaitu saat flag[1]=true dan turn=1. P0 dapat masuk critical section saat flag[1] = false atau turn = 0.

      Hal yang tidak mungkin terjadi pada Algoritma Peterson • P1 tidak berminat pada critical section.

    • P1 menunggu terus untuk masuk critical section.

      Karena jika turn=1 P1 dapat masuk critical section

    • P1 memonopoli critical section. Jika P1 diwajibkan memberi P0 kesempatan dengan mengubah turn = 0 sebelum masuk critical section.

      procedure P1; Algoritma Peterson untuk 2 proses begin var flag : array [0..1] of boolean; repeat turn: 0..1; flag[1]:= true; procedure P0; turn := 0; begin while flag[0] and turn = 0 do {nothing}; repeat &lt;critical section&gt;; flag[0] := true; flag[1] := false; turn := 1; &lt;remainder&gt; while flag[1] and turn = 1 do {nothing} forever

      &lt;critical section&gt;; end; flag[0] := false; begin flag[0] := false; &lt;remainder&gt; flage[1] := false; forever turn :=1; end; parbegin P0; P1 parend

      Penjaminan Mutual Exclusion –

    Hardware approaches

    • Pada single processor, proses-proses yang kongkuren tidak dapat overlap hanya terjadi interleave. Sebuah proses akan terus berjalan sampai diinterrupt. Sehingga dengan mengatur interrupt mutual exclusion dapat terjadi. Sedangkan pada multiprosesor interrupt tidak menjamin mutual exclusion karena beberapa proses dapat dieksekusi bersamaan waktunya
    • Pada sistem multiprocessor yang memakai memori bersama, pengaksesan suatu memori yang sama pada saat yang sama dijaga pada tingkat perangkat keras.
    • Perangkat keras menyediakan instruksi mesin khusus yang tidak dapat diinterrupt (atomic instruction). Karena hanya berada pada satu siklus instruksi saat di fetch

      Instruksi mesin khusus Akan dibahas dua instruksi khusus • Instruksi akan menguji yaitu :

      (test) nilai dari argumen I.

    • Test and Set Instruction

      Jika nilainya 0 maka akan

    • Exchange Instruction

      diganti dengan 1 dan

      Test and Set Instruction menghasilkan true.

      Didefinisikan sebagai : Sedangkan jika tidak

    function testset (var i: integer): nilainya tidak akan diubah

    boolean; dan menghasilkan false. begin

    • Fungsi testset berjalan

      if i = 0 then

      otomatis dan tidak dapat

      begin

      diinterrupt

      i := 1; testset := true; end else testset :=false

      Exchange Instruction

    • Instruksi menukar isi dari sebuah register dengan yang terdapat pada suatu memori.
    • Selama eksekusi instruksi, akses ke lokasi memori diblocked terhadap segala instruksi lain yang mengarah ke lokasi tersebut.<
    • Didefinisikan sebagai:

      procedure exchange (var

      r:register; var m:memory)

      var temp; begin

      temp:=m; m:= r; r:= temp; End.

      (A) TEST AND SET INSTRUCTION Procedure mutual exclusion const n = …; (*number of processees*) var bolt: integer; procedure P (i: integer); begin repeat repeat {nothing} until testset (bolt) &lt;critical section&gt; bolt:= 0; &lt;remainder&gt; forever end; begin (* main program *) bolt := 0; parbegin P(1); P(2);

      … P(n) (B) EXCHANGE INSTRUCTION Procedure mutual exclusion const n = …; (*number of processees*) var bolt: integer; procedure P (i: integer); var key i : integer; begin repeat key i := 1; repeat exchange (key i , bolt) until key i =0; &lt;critical section&gt; exchange (key i , bolt) &lt;remainder&gt; forever end; begin (* main program *) bolt := 0; parbegin P(1); P(2); … Keuntungan Pendekatan Instruksi Mesin

    • • Dapat diterapkan pada beberapa proses baik pada

      single processor maupun multiple processor dengan pemakaian bersama (sharing) main memory)
    • Mudah diverifikasi
    • Mendukung multiple critical section, setiap critical section dapat mendefinisikan variabelnya sendiri

    Kelemahan Pendekatan Instruksi Mesin

    • Terjadi Busy waiting, saat proses menunggu critical section proses terus mengkonsumsi waktu prosesor
    • Mungkin terjadi starvation
    • Mungkin terjadi deadlock
    Semaphore

    • Semaphore adalah pendekatan yang dikemukakan Dijkstra.

      Semaphore merupakan pendekatan dari Sistem Operasi dan

    mekanisme bahasa pemrograman. Prinsip semaphore sebagai

    berikut : Dua proses atau lebih dapat bekerja sama dengan menggunakan sinyal sederhana. Proses dapat dipaksa berhenti pada suatu

    tempat tertentu sampai menerima sinyal khusus ini. Variabel

    khusus untuk pensinyalan ini disebut semaphore

    • Untuk mengirim sinyal dengan semaphore, sebuah proses mengeksekusi primitive signal Untuk menerima sinyal dengan semaphore, sebuah proses mengeksekusi primitive wait Jika sinyal yang bersangkutan belum ditransmisikan, proses ter- suspend sampai transmisi terjadi

      Untuk memperoleh efek yang diinginkan, kita dapat memandang sempahore sebagai variabel yang memiliki nilai integer (S) dengan tiga kondisi berikut :

      1. Sebuah semaphore diinisialisasi dengan nilai tidak negatif

      2. Wait operation menurunkan nilai semaphore. Jika nilainya negatif maka proses yang mengeksekusi wait akan terblock.

    While S 0 do nothing;

      S:= S-1; if S &lt; 0 then block(P)

      3. Signal operation menaikkan nilai semaphore. Jika nilainya tidak positif maka proses yang terblock karena wait operation akan ter-unblock S:= S+1