CatatanKuliahRTP

30
 Catatan kuliah Real-Time Pr ogramming / Jurusan Tekn ik Elektro Unsoed/ Acep Taryan a/May-2015/ Halaman 1 I Sistem Real-Time(RT) I.1 Definisi[2] :  Urutan komputasi ditentukan oleh lintasan waktu atau event eksternal ke komputer.  dan Hasil komputasi tergantung pada nilai dari v ariable waktu atau waktu yang diperlukan untuk melakukan eksekusi komputasi. I.2 Kategori Sistem Real-Time :  Rata-rata waktu eksekusi lebih kecil dari waktu maksimum y ang telah ditentuk an. Ukuran waktu dinyatakan dalam interval( Soft ).  Komputasi harus selesai dalam waktu maksimum tertentu pada setiap kesempatan(  Hard ) . I.3 Contoh Aplikasi Contoh aplikasi kategori pertama[2] :Sebuah ATM bank. ATM merupakan aplikasi real-time apabila ciri-ciri di bawah ini terpenuhi :  Adanya triger  atau driven dari event -event  eksternal yaitu penempatan kartu ke dalam mesin yang  berfungsi untuk memulai transaksi.  Unjuk kerja komputasi tergantung variabel waktu yaitu pembatasan pengambilan maksimum per hari atau per minggu.  Konstraint sistem didasarkan pada rata-rata "response time" yang tidak kritis pada setiap transaksi. Contoh aplikasi kategori kedua[3]: Sebuah Sistem "Safe Home". Perangkat lunak SafeHome menyediakan fasilitas bagi pemilik rumah untuk mengkonfigurasikan keamanan sistem, ketika diinstall, monitor semua sensor terhubung ke dalam keamanan sistem dan berinteraksi dengan pemilik rumah melalui keypad atau function key yang terdapat dalam control panel SafeHome. Selama instalasi control panel SafeHome digunakan untuk "program" dan menkonfigurasikan sistem. Setiap sensor dinyatakan dalam sebuah bilangan dan punya tipe, password master diprogram, nomor telepon diinputkan untuk suatu keperluan ketika terjadi event tertentu. Misalnya SafeHome ini berfungsi untuk pengamanan rumah terhadap terjadinya kebakaran. Pada contoh yang kedua ini, konstraint waktu sangat  strict  (ketat). Misal response time antara adanya event suhu ruangan yang mencapai sekian derajat dengan action terhadap event tersebut harus terpenuhi dalam waktu maksimum yang telah ditentukan, dalam hitungan detik. Bandingkan dengan ATM, ketika anda memasukan kartu ATM ke dalam mesin dan mesin merespon dalam waktu kira-kira 2 jam. Apa yang terjadi ? Untuk kasus pertama, pe langgan paling kesal. Sedangkan untuk kasus yang kedua, akan mengakibatkan kerug ian material mungkin juga kerugian jiwa. I.4 Aplikasi RT Aplikasi yang tidak hanya menuntut kebenaran lojik namun juga menuntut konstraint  waktu. Harus dibedakan antara a plikasi RT dan aplikasi Bisnis non RT. Pada aplikasi RT waktu me rupakan kebutuhan ("  Requirement ") sedangkan pada a plikasi bisnis non RT konstraint waktu merupak an "  Performance". Ciri dari aplikasi yang membutuhkan kriteria waktu yang sangat ketat adalah aplikasi bersifat time critical  artinya jika tuntutan terhadap waktu tidak terpenuhi maka tujuan sistem atau fungsi tidak tercapai. Akibatnya, :  Perlu adanya batasan waktu  Waktu harus dinyatakan secara deterministik dan eksplisit  Waktu merupakan requirement   Adanya respon time (delta waktu yang diperlukan untuk melakukan action akibat adanya event ) I.5 Karakteristik : 1. Embedded Systems RT sistem sering merupakan embedded system. Sistem RT merupakan gabungan komponen Soft dan Hard. Contoh : Pengontrol ro bot, merupakan komponen dari sistem robot yang terdiri dari m ekanik lengan, kontrol kordinat pergerakan, dan sensor sebagai antarmuka dengan lingkungan eksternal. 2. Interaksi dengan lingkungan luar

description

real time sistem

Transcript of CatatanKuliahRTP

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 1

    I Sistem Real-Time(RT)

    I.1 Definisi[2] :

    Urutan komputasi ditentukan oleh lintasan waktu atau event eksternal ke komputer.

    dan Hasil komputasi tergantung pada nilai dari variable waktu atau waktu yang diperlukan untuk melakukan eksekusi komputasi.

    I.2 Kategori Sistem Real-Time :

    Rata-rata waktu eksekusi lebih kecil dari waktu maksimum yang telah ditentukan. Ukuran waktu dinyatakan dalam interval(Soft).

    Komputasi harus selesai dalam waktu maksimum tertentu pada setiap kesempatan(Hard) .

    I.3 Contoh Aplikasi

    Contoh aplikasi kategori pertama[2] :Sebuah ATM bank. ATM merupakan aplikasi real-time apabila

    ciri-ciri di bawah ini terpenuhi :

    Adanya triger atau driven dari event-event eksternal yaitu penempatan kartu ke dalam mesin yang berfungsi untuk memulai transaksi.

    Unjuk kerja komputasi tergantung variabel waktu yaitu pembatasan pengambilan maksimum per hari atau per minggu.

    Konstraint sistem didasarkan pada rata-rata "response time" yang tidak kritis pada setiap transaksi.

    Contoh aplikasi kategori kedua[3]: Sebuah Sistem "Safe Home". Perangkat lunak SafeHome

    menyediakan fasilitas bagi pemilik rumah untuk mengkonfigurasikan keamanan sistem, ketika diinstall,

    monitor semua sensor terhubung ke dalam keamanan sistem dan berinteraksi dengan pemilik rumah melalui

    keypad atau function key yang terdapat dalam control panel SafeHome. Selama instalasi control panel

    SafeHome digunakan untuk "program" dan menkonfigurasikan sistem. Setiap sensor dinyatakan dalam

    sebuah bilangan dan punya tipe, password master diprogram, nomor telepon diinputkan untuk suatu

    keperluan ketika terjadi event tertentu. Misalnya SafeHome ini berfungsi untuk pengamanan rumah terhadap

    terjadinya kebakaran. Pada contoh yang kedua ini, konstraint waktu sangat strict (ketat). Misal response time

    antara adanya event suhu ruangan yang mencapai sekian derajat dengan action terhadap event tersebut harus

    terpenuhi dalam waktu maksimum yang telah ditentukan, dalam hitungan detik. Bandingkan dengan ATM,

    ketika anda memasukan kartu ATM ke dalam mesin dan mesin merespon dalam waktu kira-kira 2 jam. Apa

    yang terjadi ? Untuk kasus pertama, pelanggan paling kesal. Sedangkan untuk kasus yang kedua, akan

    mengakibatkan kerugian material mungkin juga kerugian jiwa.

    I.4 Aplikasi RT

    Aplikasi yang tidak hanya menuntut kebenaran lojik namun juga menuntut konstraint waktu. Harus

    dibedakan antara aplikasi RT dan aplikasi Bisnis non RT. Pada aplikasi RT waktu merupakan kebutuhan

    ("Requirement") sedangkan pada aplikasi bisnis non RT konstraint waktu merupakan "Performance". Ciri

    dari aplikasi yang membutuhkan kriteria waktu yang sangat ketat adalah aplikasi bersifat time critical

    artinya jika tuntutan terhadap waktu tidak terpenuhi maka tujuan sistem atau fungsi tidak tercapai.

    Akibatnya, :

    Perlu adanya batasan waktu

    Waktu harus dinyatakan secara deterministik dan eksplisit

    Waktu merupakan requirement

    Adanya respon time (delta waktu yang diperlukan untuk melakukan action akibat adanya event)

    I.5 Karakteristik :

    1. Embedded Systems RT sistem sering merupakan embedded system. Sistem RT merupakan gabungan komponen Soft dan

    Hard. Contoh : Pengontrol robot, merupakan komponen dari sistem robot yang terdiri dari mekanik lengan,

    kontrol kordinat pergerakan, dan sensor sebagai antarmuka dengan lingkungan eksternal.

    2. Interaksi dengan lingkungan luar

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 2

    RT berinteraksi dengan lingkungan luar dengan sedikit campur tangan manusia pada saat sistem

    berjalan. Contoh : Pada RT sistem untuk mengontrol proses manufaktur atau pada proses kimia yang dapat

    melaporkan kondisi terjadinya alarm. Kondisi tersebut berasal dari data eksternal yang diterima melalui

    antarmuka sensor.

    3. Konstraint Real-Time RT system mempunyai konstraint waktu, sistem harus memproses event dalam frame waktu yang

    diberikan.

    4. Kontrol Real-Time RT sistem meliputi RT Control, sistem yang me-maintain kecepatan dari pergerakan pesawat luar

    angkasa.

    5. Sistem Reaktive Dengan adanya event driven maka sistem harus dengan cepat merespon stimuli eksternal.

    6. Proses Konkuren Proses konkuren adalah proses proses yang berada pada saat yang sama dan harus berbagi sumber

    daya global secara bergantian. Ketika proses berjalan, maka akan banyak event yang perlu diproses secara

    pseudo paralel. Urutan kedatangan event tidak dapat diprediksi

    I.6 Kekhususan RT terhadap masalah lain, melahirkan ide tentang :

    1. RT constraint 2. Notion tentang waktu. 3. RT Database.

    Metoda konvensional, dikenal dengan Locking

    LOCK()

    Proses Update/Delete/Append

    UNLOCK()

    Kemudian dikembangkan metoda yang lebih handal untuk menangani kecepatan akses dan untuk

    memecahkan masalah konkurensi yang dikenal dengan exclusive-writer protokol.

    4. RT Operating sistem. Sebuah OS harus menyediakan mekanisme penjadwalan priority. RT OS selain menyediakan

    mekanisme priority juga harus menyediakan mekanisme untuk menginterupsi sebuah high-priority,

    Interrupt Latency, Menyediakan multitasking.

    5. RT Programming Language Beberapa bahasa yang digunakan untuk tujuan umum banyak digunakan untuk keperluan

    pemgrograman RT (Contoh C, Fortran, Modula-2). Juga bahasa-bahasa yang mempunyai konsep Class

    seperti ADA, C++ sering dingunakan dalam aplikasi dalam bidang militer dan komunikasi. RT language

    mempunyai kemampuan multitasking, mengkonstruksi secara langsung untuk mengimplementasikan fungsi

    RT, dan feature-feature pemrogramam modern.

    I.7 Miskonsepsi :

    Tidak melibatkan science dalam design sistem RT.

    Komputasi RT ekuivalen dengan komputasi yang cepat.

    Programming RT adalah kode dalam assembly, programming interrupt priority dan penulisan peralatan driver.

    Sistem RT berfungsi dalam lingkungan yang statik.

    Problem dalam design sistem RT dapat dipecahkan semua dalam lingkup bidang computer science.

    I.8 Kehandalan :

    Kehandalan perlu dijaga atau ditingkatkan, dengan tujuan agar sistem tidak gagal, karena kegagalan

    menyebabkan kefatalan. Kehandalan berkaitan dengan back up dan kestabilan. Kehandalan terbagi 2 :

    Kehandalan Hardware, misal dengan menyiapkan cadangan peralatan.

    dan Kehandalan Software, harus dipenuhinya siklus hidup Perangkat Lunak dalam Software Engineering dari awal sampai akhir dengan benar yang meliputi : definisi requirement, design,

    implementasi dan testing. Engineering merupakan usaha untuk meningkatkan kehandalan agar

    mendekati 100% kesempurnaan. Selain itu, juga dapat dibuktikan secara matematis atau statistik.

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 3

    I.9 Performance sistem RT:

    Ditentukan oleh response time dan tingkat transfer data. Response time adalah waktu yang diperlukan

    oleh sistem untuk mendeteksi event dan melakukan aksi. Parameter kunci yang mempengaruhi respon time

    adalah context switching dan interrupt latency. Context switching meliputi waktu dan overhead untuk

    mengalihkan task-task dari suatu keadaan ke keadaan lain. Interrupt letency adalah toleransi waktu

    keterlambatan sebelum switch terjadi. Parameter lain adalah kecepatan komputasi dan kecepatan akses

    media penyimpanan.

    I.10 Interrupt Handling :

    Salah satu ciri sistem RT adalah adanya interaksi dengan lingkungan luar. Berarti adanya stimulus-

    interrupt dalam batasan waktu tertentu. Karena multiple stimulus sering terjadi maka perlu dipikirkan

    tentang Priority dan Interrupt priority, kaitannya dengan bagaimana pengaturan aksi-aksi setelah terjadi

    stimulus. Interrupt handling merupakan penanganan ketika terjadi aliran proses normal yang diinterupsi

    oleh event yang terdeteksi oleh hardware.

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 4

    II Konsep Pemrograman Real-Time

    Prasyarat : Sebaiknya telah memahami tentang pengertian Proses, keadaan proses

    (new, running, blocked, exit), perpindahan keadan proses, eksekusi proses,

    berjalannya instruksi dalam proses (atomik atau primitif), deadlock, starvation,

    multiprocessing.

    Salah satu karakteristik sistem real-time adalah adanya proses yang berjalan secara konkuren, dengan

    processor yang terbatas. Untuk berebut processor task-task tersebut diatur oleh scheduler. Konkurensi

    merupakan landasan bagi tiga tema pokok yaitu multiprogramming, multiprocessing dan distributed

    processing, salah satu ketiga tema pokok akan terjadi dalam sistem real-time. Sejumlah proses akan disebut

    konkuren jika proses-proses tersebut berada pada saat yang sama dan harus berbagi sumber daya global

    secara bergantian.

    Konkurensi dapat muncul pada tiga konteks yang berbeda, yaitu :

    Banyak aplikasi (multiple application).

    Waktu pemrosesan komputer dibagi (shared) secara dinamis diantara sejumlah job atau aplikasi yang aktif.

    Aplikasi terstruktur. Aplikasi diimplementasikan sebagai sekumpulan proses yang konkuren.

    Struktur sistem operasi. Sistem operasi diimplementasikan sebagai kumpulan proses.

    II.1 Prinsip Konkurensi :

    1. Mutex (Critical section). Mutual exclusion adalah suatu kondisi dimana ada sekumpulan proses yang konkuren, tetapi hanya satu dari proses-proses konkuren tersebut yang diperbolehkan untuk

    menggunakan sumber daya yang dibutuhkannya. Mutex terjadi karena adanya sumber daya yang tidak

    dapat digunakan secara bersamaan, seperti printer. Sumber daya ini disebut sumber daya kritis. Bagian

    proses yang menggunakan sumber daya kritis disebut memasuki seksi kritis (critical section).

    2. Sinkronisasi 3. Inter-Proses dan Komunikasi (IPC)

    Ketika terjadi konkurensi, maka proses proses akan saling bersaing atau berkompetisi untuk mendapatkan sumber daya

    II.2 Syarat Mutual Exclusion

    Algoritma harus menjamin bahwa hanya ada satu proses yang ada di seksi kritis.

    Proses yang ada di luar seksi kritis dilarang menghambat (blocked) proses lain yang akan masuk seksi kritis.

    Proses yang ingin masuk seksi kritis harus dijamin tidak menunggu selama waktu yang tidak terhingga (proses tidak mengalami deadlock atau starvation).

    Ketika tidak ada proses di seksi kritis, proses yang akan masuk seksi kritis harus diijinkan tanpa waktu tunda

    Tidak ada asumsi mengenai kecepatan relatif proses atau jumlah proses yang ada.

    Proses berada di seksi kritis hanya selama waktu yang berhingga.

    II.3 Konsep Pemrograman

    II.3.1 Pengertian :

    Pembuatan program yang disusun sedemikian rupa sehingga tercipta banyak proses yang berjalan secara

    bersama-sama pada suatu saat yang memungkinkan terjadinya shared variabel global, shared sumber daya

    global, komunikasi antar proses tersebut melalui pengiriman pesan (message passing) dan sinkronisasi antar

    proses.

    II.3.2 Ciri Program

    Adanya event-driven.

    Banyak proses yang berjalan secara bersama-sama.

    Ada mekanisme pengaturan blocking proses melalui pendekatan : seksi kritis (mutex) dan sinkronisasi.

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 5

    II.4 Syarat Program

    Hanya ada satu proses yang berada pada seksi kritis pada satu saat.

    Memenuhi kebenaran sekuensial dan logika temporal.

    Proses tidak mengalami starvation.

    Proses tidak mengalami deadlock.

    Tidak terjadi Bussy waiting.

    Solusi proses yang simetrik untuk menjamin serializibility. Dengan cara ini eksekusi instruksi seolah-olah berada pada pemrograman dengan logika sekuensial.

    II.5 Tahapan Pembuatan Program

    1. Cari titik observasi, yaitu titik pengamatan terhadap aksi dalam proses sebelum memasuki seksi kritis dan setelah keluar dari seksi kritis (Gambar II.1).

    2. Apakah ada syarat untuk melewati titik observasi tersebut? Jika ada maka jadikan titik observasi sebagai titik sinkronisasi.

    3. Tetapkan syarat formal untuk melewati titik tersebut. 4. Buatlah program konkuren yang memenuhi kebenaran logika sekuensial dan temporal.

    Gambar II.1. Titik observasi pada Critical Section.

    II.6 Hipotesa Pemrograman

    Tidak ada asumsi yang dapat digunakan pada saat pelaksanaan eksekusi suatu proses.

    Semua proses harus berakhir.

    II.7 Mekanisme Blocking Proses

    II.7.1 Low level:

    Lock gate

    Semaphore

    Mailbox Ada dua aksi yang harus dilakukan pada penggunaan mekanisme blocking proses low level:

    1. Deklarasi 2. Mendeklarasikan mekanisme block dengan pernyataan Create atau Declare 3. Manipulasi, menggunakan primitif dari mekanisme block, yaitu instruksi-instruksi yang berkaitan

    dengan mekanisme tersebut (harus instruksi yang simetris/berpasangan)

    II.7.1.1 Lock Gate

    II.7.1.1.1 Pengertian :

    Mekanisme blocking proses yang sudah tersedia baik di bahasa pemrograman maupun sistem operasi.

    Menawarkan penanganan block proses dengan fasilitas yang dipunyai.

    Menggunakan variabel kerja B dengan type Boolean yang diberi harga awal False pada saat mekanisme Lock gate di Create atau di declare.

    Ada antrian Q yang digunakan untuk penanganan status proses P. Sifat antrian adalah FIFO.

    Primitif yang digunakan adalah Lock(name) dan Unlock(name).

    Critical Section

    (CS)

    Titik Observasi 1 (TO1)

    Titik Observasi 2 (TO2)

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 6

    II.7.1.1.2 Notasi Algoritmik Primitif Lock dan Unlock

    Procedure Lock(name)

    Begin

    if B Then

    Blocked status proses P

    Tempatkan proses P dalam antrian Q

    B True End

    Procedure Unlock(name)

    Begin

    B False If antrian Q not empty Then

    Keluarkan proses P yang ada di Head(Q)

    Aktifkan status proses P

    End

    II.7.1.1.3 Contoh Penggunaan Lock Gate.

    II.7.1.1.3.1 Seksi Kritis

    Ketika proses hendak masuk seksi kritis, proses memeriksa nilai variabel lock lebih dahulu.

    Jika variabel lock bernilai False, proses mengubah variabel lock menjadi True dan masuk seksi kritis. Sebaliknya, proses diblok sampai dibebaskan (unlock) oleh proses lain yang sebelumnya berada di seksi

    kritis.

    Misal ada n proses konkuren yang akan masuk ke seksi kritis pada Gambar II.2. P1 P2 P3 . Pn

    Secara umum : Pi

    Gambar II.2. Titik observasi untuk n buah proses yang akan mengakses CS.

    Tahapan :

    1. Didapatkan Titik observasi 1 (TO1) dan TO2 2. Karena titik observasi sudah didapatkan, maka titik sinkronisasi didapatkan dan disebut dengan TS1,

    TS2.

    3. Syarat untuk melewati CS : TS1 terjadi sebelum TS2. Secara formal dapat ditulis sebagai berikut : TS1(CS) < TS2(CS)

    4. Buat program konkuren.

    CS CS CS CS

    CS

    TO1

    TO2

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 7

    Program SeksiKritis

    { Pada saat Create Lockgate(CS), secara otomatis akan menginisialisasi

    var B bernilai false. Pada program utama diciptakan proses-proses,

    setiap proses akan masuk ke seksi kritis dengan terlebih dahulu lakukan

    lock dan setelahnya unlock. Ketika proses berada dalam CS maka proses

    lain tidak boleh masuk ke CS dengan cara di blok(antri di antrian Q

    yang telah didefinisikan).}

    Procedure Proses(Var i : integer)

    Begin

    Lock(CS)

    Unlock(CS)

    End

    { Deklarasi Global baik primitif, variabel dan konstanta }

    Create Lockgate(CS)

    { program utama }

    Begin

    Loop

    Proses(1)

    Proses(2)

    Proses(n)

    Forever

    End

    II.7.1.1.3.2 Baca-Tulis

    Cerminan paling sederhana dari komunikasi antar proses.

    Ada dua proses yang konkuren, yaitu Baca dan Tulis. Proses Baca(P1) akan membaca data dari M (memory atau secondary storage) dan proses tersebut adalah benar nilai ditulis oleh Proses Tulis(P2) di

    M.

    Proses baca akan dilakukan setelah proses tulis selesai.

    Pencarian solusi :

    1. Cari titik observasi. P1 P2

    Gambar II.3. Pencarian titik observasi pada 2 proses (baca dan tulis).

    2. Adakah syarat untuk melewati TO.

    TO1 : bukan TO, hilangkan karena tidak penting.

    TO2 : merupakan tanda untuk melaksanakan TO3, oleh karena itu penting.

    TO3 : penting.

    TO4 : tidak penting.

    Sehingga titik observasinya adalah TO2 (sekarang sebut TS1) dan TO3 ( disebut TS2)

    3. Syarat formal untuk melewatinya. Akhir tulis(m) < awal baca (m)

    4. Buat program konkuren.

    Baca(m) Tulis(m)

    TO3 (Awal

    Baca)

    TO2

    (Akhir

    tulis)

    TO1

    TO4(Akhir

    Baca)

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 8

    Program BacaTulis

    {Pada saat Create Lockgate(M), secara otomatis akan menginisialisasi

    var B bernilai false. Pada program utama diciptakan proses Baca, proses

    Tulis. Setiap proses akan masuk ke seksi kritis (tulis(M) dan

    baca(M)).}

    Procedure Baca

    Begin

    Loop

    Lock(M)

    Lock(M)

    forever

    End

    Procedure Tulis

    Begin

    Loop

    Unlock(M)

    Forever

    End

    { Deklarasi Global baik primitif, variabel dan konstanta }

    Create Lockgate(M)

    { Program utama }

    Begin

    Baca

    Tulis

    End

    II.7.1.2 Semaphore

    II.7.1.2.1 Pengertian

    Diperkenalkan oleh Edgard Dijkstra, mempunyai prinsip yang hampir sama dengan mekanisme lock.

    Menggunakan variabel kerja eo dengan type integer (nilai dibebaskan kepada pengguna, dengan syarat

    eo 0 ).

    Ada antrian Q yang digunakan untuk penanganan status proses P.

    Primitif yang digunakan adalah P(name) (atau Down atau Wait) dan V(name) (atau Up atau Signal).

    Untuk mendeklarasikannya, digunakan pernyataan Create Semaphore(name, initvalue)

    II.7.1.2.2 Notasi Algoritmik Primitif P dan V

    Procedure P(name)

    Begin

    eo eo - 1 If eo < 0 Then

    Blocked status proses P

    Tempatkan proses P dalam antrian Q

    End

    Procedure V(name)

    Begin

    eo eo + 1 If eo

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 9

    II.7.1.2.3.1 Seksi Kritis

    Ilustrasi persoalan dapat dilihat pada Gambar II.2.

    Solusi:

    Program SeksiKritis

    { Pada saat Create Semaphore(CS,1), nilai eo dinisialisasi dengan 1. Pada

    program utama diciptakan proses-proses, setiap proses akan masuk ke seksi

    kritis dengan terlebih dahulu lakukan P(CS) dan setelahnya V(CS). Ketika

    proses berada dalam CS maka proses lain tidak boleh masuk ke CS dengan

    cara di blok(antri di antrian Q yang telah didefinisikan).}

    Procedure Proses(Var i : integer)

    Begin

    P(CS)

    V(CS)

    End

    { Deklarasi Global baik primitif, variabel dan konstanta }

    Create Semaphore(CS, 1)

    { program utama }

    Begin

    Loop

    Proses(1)

    Proses(2)

    Proses(n)

    Forever

    End

    Properti : Nilai awal dari semaphore sebuah proses menunjukan jumlah proses yang dapat melewati P(name) tanpa

    diblok. Nilai awal 0 menunjukan bahwa proses yang melewati P(name) langsung akan terblok sedangkan nilai awal 1

    menunjukan bahwa pada satu saat maksimal hanya ada satu proses yang dapat melewati P(name).

    II.7.1.2.3.2 Baca-Tulis

    Ilustrasi persoalan dapat dilihat pada Gambar II.3. Program BacaTulis

    {Pada saat Create Semaphore(M, 0), secara otomatis eo diinisialisasi

    dengan nilai 0. Pada program utama diciptakan proses Baca, proses Tulis.

    Setiap proses akan masuk ke seksi kritis (tulis(M) dan baca(M)).}

    Procedure Baca

    Begin

    Loop

    P(M)

    forever

    End

    Procedure Tulis

    Begin

    Loop

    V(M)

    Forever

    End

    { Deklarasi Global baik primitif, variabel dan konstanta }

    Create Semaphore(M, 0) {Merupakan private semaphore}

    { Program utama }

    Begin

    Baca

    Tulis

    End

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 10

    II.7.1.3 Mailbox

    II.7.1.3.1 Pengertian

    Mekanisme konkuren untuk memenuhi kebutuhan IPC (Interprocess Communication) melalui pengiriman pesan secara tidak langsung (indirect message passing).

    Merupakan suatu buffer of messages dari proses-proses yang saling berkomunikasi.

    Skema adaptif mailbox untuk pemrograman konkuren yang ideal adalah blocking read dan blocking

    write. Tetapi dalam banyak hal, implementasi yang paling sering digunakan adalah blocking read dan

    unblocking write.

    Secara umum message passing dengan mailbox mempunyai sepasang primitif, yaitu:

    Send(mbname, message) atau Write(mbname, message) . Digunakan untuk mengirimkan pesan (message) ke tujuan tertentu (destination).

    Receive(mbname, message) atau Read(mbname, message). Digunakan untuk mengambil pesan (message) dari tujuan tertentu atau dapat juga dari sumber tak ditentukan lebih dahulu (penerima

    tidak peduli dengan sumber pesan).

    Sebagai contoh, jika proses A akan mengirim pesan kepada proses B melalui mailbox1, maka penulisan pernyataannya:

    process A;

    ...

    send(mailbox1, message)

    ...

    process B;

    ...

    receive(mailbox1, message)

    ...

    Suatu mailbox dibuat dengan pernyataan Create Mailbox(mbname, mbcapacity).

    II.7.1.3.2 Contoh Penggunaan

    II.7.1.3.2.1 Seksi Kritis

    Program SeksiKritis

    { Awalnya mailbox dikirim pesan dengan Send. Berarti jika ada proses yang

    memanggil Receive maka proses tersebut akan masuk ke CS dan proses

    dibelakangnya akan terblok sampai proses tersebut mengirimkan pesan lagi ke

    mailbox}

    Procedure Proses(Var I : integer)

    Begin

    Receive(CS, message)

    Send(CS, message)

    End

    { Deklarasi global }

    . . .

    message-1

    message-2

    message-3

    . . .

    Mailbox

    antrian Readantrian Write

    . . .

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 11

    Create Mailbox(CS)

    { program utama }

    Begin

    Send(CS, message)

    Loop

    Proses(1)

    Proses(2)

    Proses(n)

    Forever

    End

    II.7.1.3.2.2 Baca-Tulis

    Program BacaTulis

    { Proses Baca akan terblok terus menerus sampai adanya pesan di mailbox

    yang dikirimkan oleh proses Tulis}

    Procedure Baca

    Begin

    Loop

    Receive(MB, message)

    forever

    End

    Procedure Tulis

    Begin

    Loop

    Send(MB, message)

    Forever

    End

    { Deklarasi global }

    Create Mailbox(MB)

    { Program utama }

    Begin

    Baca

    Tulis

    End

    II.7.2 High level:

    Monitor

    Rendezvous

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 12

    III Studi Kasus Konkurensi

    III.1 Seksi Kritis

    Seksi kritis merupakan masalah mendasar dalam lingkungan konkurensi. Ketika proses hendak masuk

    seksi kritis, proses memeriksa nilai variabel lock lebih dahulu. Jika variabel lock bernilai False, proses

    mengubah variabel lock menjadi True dan masuk seksi kritis. Sebaliknya, proses diblok sampai dibebaskan

    oleh proses lain yang sebelumnya berada di seksi kritis.

    III.2 Baca-Tulis

    Masalah baca-tulis data dari ke memory atau secondary storage merupakan cerminan paling sederhana

    dari komunikasi antar proses. Ada dua proses yang konkuren, yaitu proses Baca dan Tulis. Proses Baca akan

    membaca data, sementara proses Tulis akan menulis data. Jika proses Tulis sudah selesai menulis, maka

    proses tersebut akan memberi tanda bahwa proses sudah selesai. Proses baca akan dilakukan setelah proses

    tulis. Proses baca adalah benar jika nilai data yang dibaca oleh proses Baca adalah sama dengan nilai data

    yang baru ditulis oleh proses Tulis.

    III.3 Sleeping Barbershop Problem

    Salon pangkas rambut mempunyai satu kursi pemangkasan dan n kursi untuk pelanggan-pelanggan

    yang menunggu. Jika tidak ada pelanggan, pemangkas duduk di kursi pemangkasan dan tidur. Ketika

    pelanggan datang, dia membangunkan pemangkas. Jika pelanggan-pelanggan berikutnya datang, sementara

    pemangkas sedang memotong rambut pelanggan lain, pelanggan-pelanggan itu duduk di kursi tunggu (jika

    masih terdapat kursi tunggu yang kosong) atau meninggalkan salon jika semua kursi tunggu telah penuh.

    Gambar III.1. Sleeping Barbershop Program

    III.4 Producer-Consumer

    Producer (produsen) memproduksi barang kemudian diletakkan di sebuah conveyor (ban berjalan)

    dengan kapasistas terbatas n atau tidak terbatas. Consumer (konsumen) akan mengambil barang yang telah

    diproduksi oleh produsen melalui conveyor yang sama.

    Akan muncul masalah:

    Jika conveyor penuh sementara produsen masih ingin meletakkan produk pada conveyor tersebut (masalah bagi produsen). Hal ini terjadi jika asumsi kapasitas conveyor terbatas.

    Jika conveyor kosong sementara konsumen ingin mengambil produk (masalah bagi konsumen). Oleh karena itu kedua proses membutuhkan sinkronisasi agar sama-sama dapat terhindar dari

    permasalahan.

    Tempat

    Cukur

    Kursi

    tunggu

    Pintu

    in/out

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 13

    Gambar III.2. Producer- Consumer Problem

    III.5 Dining Philosophers Problem

    Lima filsuf bertemu untuk makan malam. Mereka duduk di sekeliling meja makan yang bentuknya

    bulat. Tetapi saat mereka akan makan, ada persoalan praktis yang muncul. Spaghetti yang dihidangkan

    sebagai menu makan malamnya begitu ruwet dan licin, sehingga untuk memakannya diperlukan dua garpu

    sekaligus. Sementara itu, meja sudah diatur sedemikian hingga hanya ada satu garpu untuk setiap filsuf.

    Gambar III.3. Susunan Dining Philosophers

    Aktivitas hidup setiap filsuf dianggap hanya ada dua, yaitu makan dan berpikir yang dilakukan secara

    bergantian. Ketika filsuf lapar, filsuf mencoba memperoleh garpu kiri dan kanan sekaligus dengan urutan

    manapun. Jika sukses memperoleh dua garpu sekaligus, filsuf makan. Kemudian bila telah selesai makan,

    filsuf meletakkan kembali garpunya dan melanjutkan berpikir.

    Supaya semua filsuf dapat makan secara adil, dalam arti tidak ada filsuf yang makan terus menerus atau

    terus menunggu karena garpu yang dibutuhkan tidak selalu tersedia, maka diputuskan pendekatan

    penyelesaian sebagai berikut:

    Pada keadaan awal, semua filsuf dianggap sedang berpikir.

    Jika seorang filsuf sedang makan, maka filsuf yang duduk di sebelah kiri dan kanannya tidak diperkenankan makan pada saat itu.

    Banyaknya filsuf yang dapat makan pada saat yang sama adalah dua orang.

    Setiap saat, setiap filsuf mempunyai salah satu dari keadaan berikut: sedang makan

    mau makan, tetapi jika garpu tidak tersedia maka ia menunggu (tidur) sampai garpu di kiri dan

    kanannya tersedia (dibangunkan oleh filsuf di sebelahnya yang sudah selesai makan).

    sedang berpikir

    Filsuf yang sedang makan berhenti makan setelah selang waktu tertentu.

    PRODUCER. .

    .

    . .

    .CONSUMER

    2 3 . . . . .1 N

    aliran produk

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 14

    III.6 Swimming Pool

    Sebuah kolam renang dianggap mempunyai kapasitas tidak terbatas, artinya berapapun banyaknya

    orang yang masuk dan berenang, selalu bisa ditampung (kolam renang sangat luas). Sedangkan tempat ganti

    pakaian terbatas. Setiap orang yang berenang wajib mengikuti prosedur sebagai berikut:

    ambil keranjang

    ganti baju

    titipkan keranjang

    berenang

    ambil keranjang

    ganti baju

    kembalikan keranjang

    keluar/pergi

    III.7 Pembaca/Penulis (Readers/Writers)

    Ada 2 (dua) kelompok proses yaitu kelompok Pembaca (Readers) dan Penulis (Writers). Keduanya

    dapat mengakses suatu file dengan ketentuan:

    file dapat dibaca oleh beberapa Pembaca sekaligus

    tetapi jika file sedang diakses oleh Penulis, maka hanya satu Penulis yang boleh menulis pada suatu saat. Perlu diperhatikan prioritas (prioritas di pembaca, prioritas di penulis, prioritas sama)

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 15

    IV Pendekatan dan Mekanisme Solusi

    Ada dua pendekatan untuk mendapatkan solusi, yaitu pendekatan seksi kritis (mutex) dan sinkronisasi.

    Masing-masing pendekatan bisa menggunakan mekanisme lockgate, semaphore, mailbox dan mekanisme

    high level.

    IV.1 Pendekatan Seksi Kritis

    Focus pendekatan seksi kritis adalah bagaimana menjaga sumber daya kritis terakses oleh hanya satu

    proses pada satu saat. Dining Philosophers problem merupakan suatu contoh permasalahan yang dapat

    dicarikan solusinya dengan pendekatan seksi kritis dan sinkronisasi. Permasalahan ini juga merupakan salah

    satu analogi yang dapat digunakan untuk menggambarkan permasalahan dasar tentang terjadinya deadlock

    dan starvation. Dalam permasalahan ini dimodelkan proses-proses yang saling bekompetisi untuk

    mendapatkan akses ekslusif terhadap suatu resource yang terbatas jumlahnya.

    P2

    G1 G2

    P1 P3

    G3

    G0

    P0 P4

    G4

    Gambar IV.1. Arsitektur Dining Philosophers.

    Filsuf, dimisalkan P0, P1, P2, P3, dan P4 duduk di sekeliling meja makan, dan Garpu G0, G1, G2, G3,

    G4. Permasalahan yang muncul sebagai berikut:

    Bagaimana membuat algoritma yang mengatur agar filsuf-filsuf tersebut dapat makan bersama dengan

    garpu yang terbatas; Syarat algoritma adalah: tidak boleh ada 2 filsuf yang memakai garpu yang sama pada

    waktu bersamaan ( mutual exclusion).

    Tahapan :

    1. Cari titik observasi.

    Pi

    Gambar IV.2. Titik observasi Dining Philosopher dalam pendekatan Seksi Kritis

    TO1 merupakan titik observasi sebelum filsuf makan. Untuk bisa makan, maka 2 garpu (garpu kiri dan

    garpu kanan) harus sudah dipegang.

    TO2 merupakan titik observasi setelah filsuf makan. Garpu kiri dan kanan diletakkan di atas meja.

    2. TO1 dan TO2 didapatkan. 3. Tentukan syarat formal untuk melewati .

    Akhir pegang Garpu kiri < Awal letakkan garpu kiri

    AND Akhir pegang Garpu kanan < Awal letakkan garpu kanan.

    < Makan >

    TO1

    TO2

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 16

    Bagaimana menyatakan Garpu kiri dan kanan, untuk sejumlah 5 garpu ?

    Akhir pegang (Gi) < Awal letakan (Gi)

    AND

    Akhir pegang(Gi +1 mod 5) < Awal letakkan(Gi + 1 mod 5)

    4. Buat program konkuren

    Solusi Dining Philosophers menggunakan pendekatan Seksi Kritis. Program DinSeksiKritis1

    { Solusi menggunakan pendekatan seksi kritis dengan semaphore}

    Procedure PHIL( var I : integer)

    Begin

    Loop

    P(GI)

    P(GI+1 mod 5)

    V(GI+1 mod 5)

    V(GI)

    Forever

    End

    { Deklarasi global}

    Create Semaphore(Gi,1) {Gi merupakan array dari index 0 s/d 4, masing-masing

    elemen diset nilai 1}

    { Program utama}

    Begin

    PHIL(0)

    PHIL(1)

    PHIL(2)

    PHIL(3)

    PHIL(4)

    End

    Program DinSeksiKritis2

    { Solusi menggunakan pendekatan seksi kritis dengan Lockgate}

    Procedure PHIL( var i : integer)

    Begin

    Loop

    Lock(Gi)

    Lock(Gi+1 mod 5)

    Unlock(Gi+1 mod 5)

    Unlock(Gi)

    Forever

    End

    { Deklarasi global}

    Create Lockgate(Gi) {Gi merupakan array dari index 0 s/d 4, masing-masing

    elemen diset nilai false}

    { Program utama}

    Begin

    PHIL(0)

    PHIL(1)

    PHIL(2)

    PHIL(3)

    PHIL(4)

    End

    4..0i

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 17

    Dari 2 solusi di atas, apabila semua filsuf berebut untuk makan pada saat yang hampir bersamaan maka

    akan timbul deadlock. Tunjukkan !

    Untuk mengatasinya harus dijaga :

    Pada satu saat hanya ada 4 orang yang berada diruang makan. Hadirkan satpam ! Program DinSeksiKritis3

    { Solusi menggunakan pendekatan seksi kritis dengan Semaphore dengan

    pembatasan jumlah filsuf di ruangan}

    Procedure PHIL( var i : integer)

    Begin

    Loop

    P(Guard)

    Lock(Gi)

    Lock(Gi+1 mod 5)

    Unlock(Gi+1 mod 5)

    Unlock(Gi)

    V(Guard)

    Forever

    End

    { Deklarasi global}

    Create Semaphore(Gi,1) {Gi merupakan array dari index 0 s/d 4, masing-masing

    elemen diset nilai 1}

    Create Semaphore(Guard,4)

    { Program utama}

    Begin

    PHIL(0)

    PHIL(1)

    PHIL(2)

    PHIL(3)

    PHIL(4)

    End

    IV.2 Pendekatan Sinkronisasi

    Dengan sinkronisasi maka jalannya proses akan diatur sehingga sesuai dengan apa yang diharapkan

    oleh requirement program. Proses yang sedang berinteraksi untuk sinkronisasi akan dapat ditentukan titik

    temunya. Titik temu atau titik observasi adalah satu titik yang hanya dapat dilewati kalau ke-n proses

    masing-masing sudah mencapai titik pengamatan masing-masing. Titik temu ke-n proses dapat dilihat pada

    Gambar IV.3

    P1 P2 P3 P4 Pn

    Titik temu

    Secara umum :

    Pi

    Titik temu

    Gambar IV.3. Titik temu Proses-Proses

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 18

    Titik temu atau titik observasi harus ditentukan. Tujuannya untuk memenuhi requirement program.

    Contoh : Ada n buah proses, dimana setiap proses dijalankan. Sebelum semua proses mencapai suatu

    titik tertentu untuk satu kali jalan, proses tidak boleh melanjutkan eksekusi berikutnya.

    Tahapan :

    1. Cari titik observasi (yaitu titik pengamatan suatu aksi dalam proses) 2. Apakah ada syarat untuk melewatinya (kalau ada jadikan sebagai titik sinkronisasi) 3. Tetapkan syarat formal untuk melewatinya 4. Buat program konkuren yang memenuhi kebenaran logika sekuensial dan kebenaran logika temporal.

    1. Titik observasi didapatkan 2. Dari contoh di atas, pernyataan terakhir merupakan suatu requirement program yang dapat ditafsirkan

    sebagai berikut :

    end(SP1) < begin(SP2)

    end(SP1) < begin(SP2)

    end(SP1) < begin(SP3)

    end(SP4) < begin(SP1)

    end(SPn) < begin(SP4)

    secara umum syaratnya adalah end(SPi) < begin(SP i+1 )

    3. Langkah untuk melewati titik sinkronisasi :

    )1()( SjbeginSiendji

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 19

    5. Bentuk umum sinkronisasi Procedure X (var i : Integer)

    Loop

    P(mutex)

    Counter Counter + 1 {Seksi kritis} If Counter < N then Block

    V(mutex)

    Unblock

    P(mutex)

    CounterCounter 1 {Seksi kritis} V(mutex)

    Forever

    {deklarasi global}

    Counter : integer (init =0)

    Create semaphore(mutex,1)

    {main program}

    begin

    X(1)

    X(2)

    X(n)

    End

    Ada beberapa solusi program untuk permasalahan di atas, yaitu : Program sinkron1

    { Solusi kesatu, apabila semua proses

    dijalankan, dan hampir pada saat yang

    bersamaan masuk ke maka sejumlah n-1 proses

    akan terblok, ketika proses yang ke-n

    masuk maka proses tersebut akan

    membebaskan proses ke-1 sampai dengan

    ke n-1 yang terblok di antrian (Q)}

    Program sinkron2

    {Solusi kedua, apabila semua proses

    dijalankan, dan hampir pada saat yang

    bersamaan masuk ke maka sejumlah n-1 proses

    akan terblok, ketika proses yang ke-n

    masuk maka proses tersebut akan

    membebaskan proses ke-1, proses ke-1

    membebaskan proses ke-2, proses ke-2

    membebaskan proses ke-3, dan

    seterusnya. }

    Procedure X(var i : integer)

    Loop

    P(mutex)

    CounterCounter + 1 If Counter = N then

    For I=1 to N do

    V(privsem)

    V(mutex)

    P(privsem)

    P(mutex)

    CounterCounter - 1 V(mutex)

    Forever

    Procedure X( var i : integer)

    Loop

    P(mutex)

    CounterCounter + 1 If Counter = N then

    V(privsem)

    V(mutex)

    P(privsem)

    V(privsem)

    P(mutex)

    CounterCounter - 1 V(mutex)

    Forever

    {deklarasi global}

    Counter : integer (init =0)

    Create semaphore(mutex,1)

    Create semaphore(privsem,0)

    {main program}

    begin

    X(1)

    X(2)

    .

    X(n)

    End

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 20

    IV.2.1 Contoh yang paling sederhana untuk pendekatan sinkronisasi adalah Problem Producer-Consumer.

    Skema algoritma Produsen dan Konsumen Problem :

    1. Cari titik observasi : Hal yang menjadi pusat perhatian bagi produsen adalah ,

    Perlu dihitung item yang di produce.

    Ketika akan meletakkan item di conveyor, hal ini harus dijadikan titik observasi jika conveyor terbatas. Lain halnya jika conveyor tidak terbatas.

    Setelah meletakan item di conveyor. Merupakan titik observasi yang menjadi tanda bagi Konsumen, mempersilahkanya untuk mengambil item dari conveyor.

    Hal yang menjadi pusat perhatian bagi konsumen adalah ,

    Ketika akan mengambil item. Konsumen harus menunggu sampai item ada di conveyor(konsumen terblok).

    Konsumen akan dibebaskan oleh produsen setelah meletakan item di conveyor.

    Lakukan pengurangan terhadap jumlah item setelah men-consume.

    2. Titik sinkronisasi : Yang menjadi titik sinkronisasi adalah titik pertemuan antara produsen selesai meletakan item dengan

    konsumen sebelum mengambil item dari conveyor.

    3. Tetapkan syarat formal untuk melewatinya : End(TS1) < Begin(TS2) 4. Buatlah program konkuren.

    Procedure Produsen

    Loop

    {TO1}

    forever

    Procedure Konsumen

    Loop

    {TO4}

    forever

    {deklarasi global }

    Create semaphore (.. , .)

    {main program}

    Begin

    Produsen

    Konsumen

    End

    Solusi 1. Kapasitas conveyor tidak terbatas. Produsen dan konsumen tunggal Procedure Produsen

    Begin

    Loop

    V(n)

    Forever

    End

    Procedure Konsumen

    Begin

    Loop

    P(n)

    Forever

    End

    {deklarasi global }

    Create semaphore (n , 0) {Private Semaphore}

    {main program}

    Begin

    Produsen

    Konsumen

    End

    Solusi 2. Kapasitas conveyor tidak terbatas. Produsen dan konsumen jamak. Karena produsen dan konsumen jamak maka akses ke konveyor perlu dibungkus dengan mutex (suatu

    semaphore bernilai awal 1, sehingga hanya ada satu proses yang ada di conveyor pada satu saat). Hal ini

    menyebabkan efek serializibility.

    TO2 yang

    menjadi TS1

    TO3 yang

    menjadi TS2

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 21

    Procedure Produsen(var I : integer)

    Begin

    Loop

    P(s)

    V(s)

    V(n)

    Forever

    End

    Procedure Konsumen (var i : integer)

    Begin

    Loop

    P(n)

    P(s)

    V(s)

    Forever

    End

    {deklarasi global }

    Create semaphore (n , 0) {Private Semaphore}

    Create semaphore (s , 1) {Mutex }

    {main program}

    Begin

    Produsen (1)

    ..

    Produsen (n)

    Konsumen(1)

    ..

    Konsumen(m)

    End

    Solusi 3. Kapasitas conveyor tidak terbatas, setelah produsen memproduce item dan konsumen men-consume item, ubah ( tambah atau kurangi) variabel yang menandakan jumlah item(n). Setelah produce

    item , maka counter n dinaikan 1 (n + 1) dan Consume (n-1). Konsumen akan menunggu (terblok) jika

    konveyor kosong atau n=0.Dan akan dibebaskan jika n=1 ( setelah produsen mem-produce item). Procedure Produsen(var i : integer)

    Begin

    Loop

    P(s)

    n n + 1 if n=1 then V(delay)

    V(s)

    Forever

    End

    Procedure Konsumen(var i : integer)

    Begin

    P(delay)

    Loop

    P(s)

    nn 1 V(s)

    if n=0 then P(delay)

    Forever

    End

    {deklarasi global }

    n : integer (= 0)

    Create semaphore (delay, 0) {Private Semaphore}

    Create semaphore (s , 1) {Mutex }

    {main program}

    Begin

    Produsen (1)

    ..

    Produsen (n)

    Konsumen(1)

    ..

    Konsumen(m)

    End

    Pada solusi 3, logika secara sekuensial terpenuhi namun logika temporal tidak terpenuhi. Tunjukan !!!!

    Perhatikan sekenario pada simulasi ke-9, pengurangan n tidak boleh terjadi karena dari requirement

    dinyatakan bahwa jika n=0 maka proses konsumen harus terblok.

    Kemungkinan Skenario Program solusi 3.

    Aksi n delay

    1 Inisialisasi 0 0

    2 Produsen : Critical section 1 1

    3 Konsumen : P(delay) 1 0

    4 Konsumen : Critical section 0 0

    5 Producer : Critical section 1 1

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 22

    6 Konsumen : if n=0 then P(delay) 1 1

    7 Konsumen : Critical section 0 1

    8 Konsumen : if n=0 then P(delay) 0 0

    9 Konsumen : Critical section -1 0

    Solusi 4. Kapasitas konveyor terbatas (e). Solusi ke-4 merupakan solusi yang lebih bersih dan lebih mewakili solusi permasalahan secara umum.

    Procedure Produsen (var i : integer)

    Begin

    Loop

    P(e)

    P(s)

    V(s)

    V(n)

    Forever

    End

    Procedure Konsumen(var I : integer)

    Begin

    Loop

    P(n)

    P(s)

    V(s)

    V(e)

    Forever

    End

    {deklarasi global }

    Const ukuran_conveyor : integer (= ....)

    Create semaphore (n, 0) {Private Semaphore}

    Create semaphore (s , 1) {Mutex }

    Create semaphore (e, ukuran_conveyor)

    {main program}

    Begin

    Produsen (1)

    ..

    Produsen (n)

    Konsumen(1)

    ..

    Konsumen(m)

    End

    IV.2.2 Dining- Philosophers Problem

    1. Cari titik temu. Titik temu untuk setiap filsuf adalah event saat berakhirnya . Artinya semua filsuf sebelum

    mencapai titik temu itu harus sudah mempunyai status , , . Proses (filsuf)

    yang tidak maka harus terblok. Filsuf yang terblok akan dibebaskan oleh filsuf sebelah kanannya

    atau sebelah kirinya setelah selesai .

    2. Cari titik sinkronisasi 3. Syarat formalnya :

    4. Program konkuren

    Program DinSinkronisasi

    { Solusi menggunakan pendekatan sinkronisasi dengan semaphore}

    Procedure PHIL( var I : integer)

    Begin

    Loop

    {sebelum makan}

    P(mutex)

    if Si-1 != makan && Si+1 != makan then

    Si = makan V(Privi)

    Else

    Si = mau makan

    V(mutex)

    P(Privi)

    {setelah makan}

    )1()( SjbeginSiendji

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 23

    P(mutex)

    if Si-1 = mau makan && SI-2 != makan then

    V(PrivI-1)

    If SI+1 = mau makan && SI+2 != makan then

    V(PrivI+1)

    V(mutex)

    Forever

    End

    { Deklarasi global}

    Create Semaphore(Mutex,1)

    Create Semaphore(Privi,0) {Privi merupakan array dari index 0 s/d 4}

    Status = (mikir,maumakan,makan)

    Si = array[0..4] of Status

    { Program utama}

    Begin

    PHIL(0)

    PHIL(1)

    PHIL(2)

    PHIL(3)

    PHIL(4)

    End

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 24

    V Implementasi

    Salah satu contoh implementasi mekanisme yang ada adalah sebagai berikut :

    No. Mekanisme Implementasi

    IRMX C++ Builder

    1 Semaphore:

    P(X) , V(X)

    Memanfaatkan semaphore :

    rq_receive_units() dan rq_send_units()

    Memanfaatkan class Thread :

    WaitForSingleObject(x,INFINITE)

    ReleaseSemaphore(x,1,NULL)

    Contoh pemanfaatan di dalam C++ builder #ifndef mthread7H

    #define mthread7H

    /* Nama file : mthread7.h

    Deskripsi : Program untuk mensimulasikan "Problem Dining Philosopher"

    Menggunakan pendekatan Seksi Kritis mekanisme Semaphore

    Create By : Acep Taryana

    Date : 17 Mei 2000 */

    //---------------------------------------------------------------------------

    #include

    #include

    #include

    #include

    #include

    #include

    typedef enum { Makan , MauMakan, Mikir} StatusFilsuf;

    typedef enum {Used , NotUsed } StatusGarpu;

    //---------------------------------------------------------------------------

    class TMutexThread : public TThread

    {

    public :

    _fastcall TMutexThread(int TheThreadNum);

    /*Konstruktor TMutexThread diaktifkan ketika terjadi event FormCreate dari

    Program.

    fungsi Konstruktor untuk membentuk Thread masing-masing filsuf dengan

    aktifitas

    Konstruktorsebagai berikut :

    - Mengisi variabel PhilsumNum dan GarpuNum dengan Nilai variabel

    TheThreadNum

    - Men-set status filsuf dan garpu ke-i (Mikir dan Not Used) Garpu ke-i

    adalah

    garpu disebelah kiri filsuf.

    - Mengaktifkan Thread masing-masing filsuf(memanggil Execute) */

    private :

    int PhilsupNum, GarpuNum;

    String StatusFilsuf, StatusGarpu;

    void _fastcall Execute(void);

    /* Initial State(I.S) : Thread filsuf sudah terbentuk

    Aktifitas : Loop forever untuk setiap thread, Menjaga bahwa

    hanya ada maks 4 orang filsuf yang berada di mejamakan dan Mengatur status

    garpu sehingga

    garpu yang sedang dipakai dijamin tidak akan diserobot oleh filsuf

    lain,

    mengupdate status dari setiap filsuf, mengupdate status dari setiap

    garpu.

    Final State(F.S) : Setiap Thread filsuf dan main terminated. */

    void _fastcall UpdateStatusFilsuf(int s);

    /* I.S. s berisi nilai yang menyatakan status filsuf

    Aktifitas : Menseleksi nilai status filsuf, kemudian memanggil

    UpdateDisplayStatusFilsuf(void)

    F.S : Didapatkan status filsuf dalam bentuk string */

    void _fastcall UpdateDisplayStatusFilsuf(void);

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 25

    /* I.S : Status filsuf dalam bentuk string sudah ada

    F.S : Dilayar tercetak status filsuf */

    void _fastcall UpdateStatusGarpu(int s);

    /* I.S. s berisi nilai yang menyatakan status garpu

    Aktifitas : Menseleksi nilai status garpu, kemudian memanggil

    UpdateDisplayStatusGarpu(void)

    F.S : Didapatkan status garpu dalam bentuk string */

    void _fastcall UpdateDisplayStatusGarpu(void);

    /* I.S : Status garpu dalam bentuk string sudah ada

    F.S : Dilayar tercetak status garpu */

    };

    //---------------------------------------------------------------------------

    class TForm1 : public TForm

    {

    __published: // IDE-managed Components

    TPanel *Panel1;

    TLabel *Garpu1;

    TLabel *Garpu2;

    TLabel *Garpu3;

    TLabel *Garpu4;

    TLabel *Garpu5;

    TCheckBox *PhilsupCB3;

    TCheckBox *PhilsupCB2;

    TCheckBox *PhilsupCB1;

    TCheckBox *PhilsupCB4;

    TCheckBox *PhilsupCB5;

    TLabel *LStatus1;

    TLabel *LStatus2;

    TLabel *LStatus3;

    TLabel *LStatus4;

    TLabel *LStatus5;

    void __fastcall FormCreate(TObject *Sender);

    void __fastcall FormDestroy(TObject *Sender);

    private: // User declarations

    TMutexThread *Philsup[5];

    public: // User declarations

    __fastcall TForm1(TComponent* Owner);

    };

    //---------------------------------------------------------------------------

    extern TForm1 *Form1;

    //---------------------------------------------------------------------------

    #endif

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 26

    #include

    #pragma hdrstop

    #include "mthread7.h"

    //---------------------------------------------------------------------------

    #pragma resource "*.dfm"

    TForm1 *Form1;

    //---------------------------------------------------------------------------

    //Variabel Global

    HANDLE Garpu[5], // Semaphore Garpu

    Guard; // Semaphore untuk menjaga filsuf.

    // Didalam meja makan tidak boleh lebih dari 4 orang

    CRITICAL_SECTION CriticalSection; // Seksi Kritis

    StatusFilsuf SFilsuf[5]; // status dari setiap filsuf

    StatusGarpu SGarpu[5]; // status dari setiap garpu "Used,

    NotUsed"

    int N=5 - 1; // jumlah filsuf yang berada di meja

    makan

    int Counter; // index dari filsuf

    //---------------------------------------------------------------------------

    __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)

    {

    }

    //---------------------------------------------------------------------------

    void __fastcall TForm1::FormCreate(TObject *Sender)

    { int i;

    // Buat semaphore dengan jumlah maksimum 1

    for (i=0; i

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 27

    UpdateStatusGarpu(SGarpu[GarpuNum]);

    Counter = 0; // inisialisasi filsuf

    // Oject akan dibebaskan setelah terminated

    FreeOnTerminate = TRUE;

    // Awal eksekusi thread

    Resume();

    }

    //---------------------------------------------------------------------------

    void _fastcall TMutexThread::Execute(void)

    {

    // Selama thread belum berakhir

    while (!Terminated)

    {

    // < ---------------- M I K I R ----------------->

    SFilsuf[PhilsupNum] = Mikir;

    SGarpu[GarpuNum] = NotUsed;

    SGarpu[(GarpuNum + 1) % 5] = NotUsed;

    UpdateStatusFilsuf(SFilsuf[PhilsupNum]);

    UpdateStatusGarpu(SGarpu[GarpuNum]);

    // Masuk seksi kritis

    EnterCriticalSection(&CriticalSection);

    if (Counter == 4)

    WaitForSingleObject(Guard, INFINITE); // Satpam beraksi untuk

    mencegah

    // filsuf kelima tidak masuk

    else Counter++;

    LeaveCriticalSection(&CriticalSection);

    WaitForSingleObject(Garpu[GarpuNum], INFINITE);

    WaitForSingleObject(Garpu[(GarpuNum+1) % 5], INFINITE);

    // < ------------------- M A K A N ----------------------- >

    Sleep(4000);

    SFilsuf[PhilsupNum] = Makan;

    SGarpu[GarpuNum] = Used; // Garpu kiri

    SGarpu[(GarpuNum + 1) % 5 ] = Used; // Garpu kanan

    UpdateStatusFilsuf(SFilsuf[PhilsupNum]);

    UpdateStatusGarpu(SGarpu[GarpuNum]);

    UpdateStatusGarpu(SGarpu[(GarpuNum+1) % 5]);

    Sleep(4000);

    ReleaseSemaphore(Garpu[(GarpuNum+1) % 5],1,NULL);

    ReleaseSemaphore(Garpu[GarpuNum],1,NULL);

    EnterCriticalSection(&CriticalSection);

    Counter--; // Filsuf meninggalkan meja makan / tidak aktif makan

    LeaveCriticalSection(&CriticalSection);

    ReleaseSemaphore(Guard,1,NULL); // Satpam membebaskan filsuf yang diblok

    }

    }

    //---------------------------------------------------------------------------

    void _fastcall TMutexThread::UpdateStatusFilsuf(int s)

    {

    switch (s)

    {

    case Makan :

    StatusFilsuf = "Makan";

    break;

    case Mikir :

    StatusFilsuf = "Mikir";

    break;

    }

    Synchronize(UpdateDisplayStatusFilsuf);

    }

    void _fastcall TMutexThread::UpdateStatusGarpu(int s)

    {

    switch (s)

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 28

    {

    case 0 :

    StatusGarpu = "Used";

    break;

    case 1 :

    StatusGarpu = "NotUsed";

    break;

    }

    Synchronize(UpdateDisplayStatusGarpu);

    }

    void _fastcall TMutexThread::UpdateDisplayStatusFilsuf(void)

    {

    switch (PhilsupNum)

    {

    case 0 :

    Form1->LStatus1->Caption = StatusFilsuf;

    Form1->PhilsupCB1->Checked = (SFilsuf[PhilsupNum] == Makan ? True :

    False);

    break;

    case 1 :

    Form1->LStatus2->Caption = StatusFilsuf;

    Form1->PhilsupCB2->Checked = (SFilsuf[PhilsupNum] == Makan ? True :

    False);

    break;

    case 2 :

    Form1->LStatus3->Caption = StatusFilsuf;

    Form1->PhilsupCB3->Checked = (SFilsuf[PhilsupNum] == Makan ? True :

    False);

    break;

    case 3 :

    Form1->LStatus4->Caption = StatusFilsuf;

    Form1->PhilsupCB4->Checked = (SFilsuf[PhilsupNum] == Makan ? True :

    False);

    break;

    case 4 :

    Form1->LStatus5->Caption = StatusFilsuf;

    Form1->PhilsupCB5->Checked = (SFilsuf[PhilsupNum] == Makan ? True :

    False);

    break;

    }

    }

    //---------------------------------------------------------------------------

    void _fastcall TMutexThread::UpdateDisplayStatusGarpu(void)

    {

    switch (PhilsupNum)

    {

    case 0 :

    Form1->Garpu1->Caption = StatusGarpu;

    Form1->Garpu2->Caption = StatusGarpu;

    Form1->Garpu1->Color = ( SGarpu[PhilsupNum]==NotUsed ? clWhite :

    clYellow);

    Form1->Garpu2->Color = ( SGarpu[(PhilsupNum + 1) % 5]==NotUsed ?

    clWhite : clYellow);

    break;

    case 1 :

    Form1->Garpu2->Caption = StatusGarpu;

    Form1->Garpu3->Caption = StatusGarpu;

    Form1->Garpu2->Color = ( SGarpu[PhilsupNum]==NotUsed ? clWhite :

    clYellow);

    Form1->Garpu3->Color = ( SGarpu[(PhilsupNum + 1) % 5]==NotUsed ?

    clWhite : clYellow);

    break;

    case 2 :

    Form1->Garpu3->Caption = StatusGarpu;

    Form1->Garpu4->Caption = StatusGarpu;

    Form1->Garpu3->Color = ( SGarpu[PhilsupNum]==NotUsed ? clWhite :

    clYellow);

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 29

    Form1->Garpu4->Color = ( SGarpu[(PhilsupNum + 1) % 5]==NotUsed ?

    clWhite : clYellow);

    break;

    case 3 :

    Form1->Garpu4->Caption = StatusGarpu;

    Form1->Garpu5->Caption = StatusGarpu;

    Form1->Garpu4->Color = ( SGarpu[PhilsupNum]==NotUsed ? clWhite :

    clYellow);

    Form1->Garpu5->Color = ( SGarpu[(PhilsupNum + 1) % 5]==NotUsed ?

    clWhite : clYellow);

    break;

    case 4 :

    Form1->Garpu5->Caption = StatusGarpu;

    Form1->Garpu1->Caption = StatusGarpu;

    Form1->Garpu5->Color = ( SGarpu[PhilsupNum]==NotUsed ? clWhite :

    clYellow);

    Form1->Garpu1->Color = ( SGarpu[(PhilsupNum + 1) % 5]==NotUsed ?

    clWhite : clYellow);

    break;

    }

    }

  • Catatan kuliah Real-Time Programming / Jurusan Teknik Elektro Unsoed/ Acep Taryana/May-2015/ Halaman 30

    DAFTAR PUSTAKA

    [1].Cristopher Vickery,Real-Time and Systems Programming for PCs

    [2].Stuart Bennet, Real-Time Computer Control : An Introduction

    [3].Roger S. Pressman, Software Engineering (A Practitioner's Approach),

    Fourth Edition.

    [4]. William Stallings, Operating Systems, Second Edition, Prentice Hall

    International Edition, 1995

    [5]. Gregory R. Andrews, Concurrent Programming, Principles and

    practice.