Sabtu, 25 Juni 2011

Konkurensi

Fitur-fitur utama dari sistem operasi modern yang paling menonjol adalah kemampuan sistem operasi untuk melakukan:
  1. Multiprogramming: kemampuan untuk memanajemen banyak proses dengan menggunakan satu prosesor,
  2. Multiprocessing: kemampuan untuk memanajemen banyak proses dengan menggunakan banyak prosesor,
  3. Distributed Processing  (pemrosesan tersebar): kemampuan untuk memanajemen banyak proses yang dieksekusi pada banyak komputer yang tersebar dibeberapa lokasi.
Hal mendasar yang perlu diperhatikan ketika menangani banyak proses yang berjalan bersama-sama (konkurensi) adalah masalah-masalah seperti: bagaimana komunikasi antar proses-proses tersebut, membagi pakai dan terjadinya kompetisi untuk sumber daya komputer, sinkronisasi aktivitas proses-proses, dan alokasi prosesor.
Prinsip-prinsip Konkurensi
Pada komputer yang menjalankan multiprogramming proses-proses dijalankan bergantian dengan cepat oleh prosesor sehinga tampak seolah-olah berjalan bergantian. Ketika hal ini dilakukan timbul beberapa masalah, yaitu:
  1. Berbagi pakai sumber daya memiliki resiko tinggi. Contohnya ketika dua buah proses mengakses variabel yang sama dan melakukan operasi penulisan dan pembacaan maka urutan eksekusi pembacaan dan penulisan masing-masing proses menjadi hal yang perlu diperhatikan dan bersifat kritikal.
  2. Sulit bagi sistem operasi untuk memanajemen alokasi sumber daya komputer secara optimal. Contohnya jika sebuah proses mengakses suatu file atau I/O kemudian ditunda eksekusinya maka proses lain yang hendak mengakses file atau I/O tersebut akan ditolak hingga proses pertama selesai mengakses file atau I/O tersebut.
  3. Sulit untuk melacak kesalahan pada program. Hal ini dikarenakan hasil yang sama tidak determinisitik dan sulit diproduksi ulang.
Salah satu masalah yang ditimbulkan dari berbagi pakai sumber daya adalah race condition, yaitu situasi sedemikian sehingga beberapa proses atau thread menulis data di tempat/variabel yang sama sehingga hasil akhir bergantung kepada urutan eksekusi instruksi-instruksi proses-proses tersebut. Sebagai contoh: jika ada dua proses P1 dan P2, berbagai pakai variabel global a. Jika P1 mengubah nilai a menjadi 1 dan kemudian pada suatu ketika P2 mengubah nilai a menjadi 2 maka kedua proses sedang berada dalam kondisi balapan untuk menulis variabel a. Pada contoh ini pihak yang kalah balapan (yang terakhir mengubah nilai variabel a) adalah yang menentukan nilai akhir dari variabel a.
Untuk menangani masalah konkurensi ini sistem operasi perlu memperhatikan hal-hal sebagai berikut:
  1. Sistem operasi harus dapat mengetahui jejak dari berbagai proses yang berjalan, Hal ini dapat dilakukan melalui process control block.
  2. Sistem operasi harus dapat mengalokasi dan mendealokasi sumber daya komputer untuk setiap proses yang aktif, seperti Prosesor, Memori, Berkas-berkas, Peralatan-peralatan I / O
  3. Sistem operasi harus dapat melindungi data dan sumber daya fisik yang sedang dialokasikan untuk setiap proses dari interferensi yang tidak dimaksudkan oleh proses lain.
  4. Fungsi dan output dari sebuah proses harus independen terhadap kecepatan eksekusi relatif terhadap kecepatan proses konkuren yang lain. Bab ini akan difokuskan pada poin ke-empat ini.
Apa maksud dari pernyataan fungsi dan output dari sebuah proses harus independen terhadap kecepatan eksekusi relatif terhadap kecepatan proses konkuren yang lain? Fungsi sebuah proses dan output yang dihasilkannya sebisa mungkin dijaga untuk tidak terpengaruh oleh kecepatan eksekusi proses tersebut yang dalam sebuah sistem multiproses menjadi tidak tetap bergantung proses-proses lainnya.

Proses-proses dalam sistem multiproses dapat saling independen tetapi lebih sering melakukan interaksi. Ada beberapa jenis interaksi yang terjadi antar proses berdasarkan derajat pengetahuan proses-proses terhadap adanya proses lainnya:
  1. Proses-proses tidak saling mengetahui keberadaan proses lain.
  2. Proses-proses tersebut dimaksudkan untuk bekerja independen dan tidak dimaksudkan untuk saling bekerja sama. Pada kasus ini meski tidak bekerja sama tetapi sangat mungkin terjadi kompetisi untuk mendapatkan sumber daya kompuer tertentu.
  3. Proses-proses saling mengetahui keberadaan proses lain secara tidak langsung.
  4. Proses-proses ini tidak mengetahui secara langsung proses lain melalui process ID yang mereka miliki melainkan karena berbagi pakai suatu sumber daya yang sama dan mengetahui bahwa sumber daya tersebut dibagi pakai bersama dengan proses lainnya.
  5. Proses-proses saling mengetahui keberadaan proses lain secara langsung.
Proses-proses ini saling mengetahui keberadaan proses lain sampai pada tingkat mengetahui process ID proses lainnya.
Pada jenis interaksi pertama proses-proses yang berjalan berbarengan mengalami konflik ketika mencoba mengakses sumber daya yang sama pada waktu yang bersamaan. Jika salah satu proses telah mengakses sumber daya tersebut maka proses lain harus menunggu hingga proses tersebut selesai menggunakan sumber daya tersebut sebelum dapat menggunakannya. Hal ini menyebabkan eksekusi proses menjadi tertunda dan bahkan pada beberapa kasus proses lain tidak pernah mendapat kesempatan untuk mengakses sumber daya tersebut dan akhirnya tidak pernah selesai dengan sukses.
Untuk mengendalikan proses-proses yang saling berkompetisi setidaknya ada tiga masalah yang dihadapi, yaitu:
  1. Mutual exclusion
  2. Deadlock
  3. Starvation
Mutual exclusion adalah konsep sedemikian sehingga hanya satu proses yang boleh mengakses/menggunakan sebuah sumber daya yang tidak bisa dipakai berbarengan (contohnya: printer, kartu jaringan, dll). Instruksi-instruksi yang dieksekusi ketika mengakses sebuah sumber daya disebut sebagai critical section dan sumber daya tersebut dikenal sebagai critical resource. Mutual excluision mengharuskan pada suatu saat hanya ada satu proses yang berada pada kondisi critical section.
Penerapan mutual exclusion dapat menyebabkan dua masalah, yaitu deadlock dan starvation. Deadlock adalah kondisi sedemikian sehingga beberapa proses tidak berjalan karena masing-masing sedang mengakses suatu sumber daya dan untuk menyelesaikan eksekusi critical section masing-masing harus mengakses critical resource yang sedang diakses proses lainnya. Misalkan proses P1 dan P2 membutuhkan sumberdaya R1 dan R2 untuk menyelesaikan critical section masing-masing. Seandainya P1 sedang mengakses R1 dan P2 sedang mengakses R2 maka P1 tidak dapat mengakses R2 dan sebaliknya P2 juga tidak dapat mengakses R1. Saat inilah kedua proses tidak dapat melanjutkan proses eksekusi dan deadlock terjadi.
Starvation (kelaparan) adalah kondisi sedemikan sehingga sebuah proses terus menerus gagal mendapatkan akses suatu sumber daya dikarenakan proses-proses lain terus menggunakan sumber daya tersebut

Persayaratan untuk mutual exclusion
Untuk menerapkan mutual exclusion sebuah sistem harus memenuhi kebutuhan-kebutuhan sebagai berikut:
  1. Mutual exclusion harus dapat dipaksakan
  2. Proses yang berhenti sementara pada bagian non critical harus dapat berhenti tanpa mengganggu proses yang lain
  3. Tidak boleh terjadi sebuah proses tertahan dari memasuki critical section dalam waktu yang tidak pasti: tidak boleh ada deadlock dan starvation
  4. Ketika tidak ada proses yang memasuki critical section pada suatu critical resource maka proses lain yang hendak memasuki cirtical sectionnya harus diizinkan mengakses critical resource tersebut tanpa waktu tunda
  5. Tidak asumsi yang dibuat mengenai kecepatan proses dan jumlah prosesor
Sebuah proses berada dalam critical section untuk waktu yang terbatas.
Dukungan Perangkat Keras untuk Mewujudkan Mutual Exclusion
Interrupt Disabling
Apabila sebuah proses yang memasuki critical section dapat diinterupsi eksekusinya maka mutual exclusion menjadi tidak terjamin penerapannya. Kemampuan untuk mencegah suatu proses diinterupsi di tengah critical section proses tersebut dapat diwujudkan dalam bentuk rutin-rutin dasar/primitif yang disediakan di dalam kernal yang berguna untuk mematikan dan menyalakan kembali fasilitas interupsi. Sebuah proses dapat memaksakan mutual exclusion dengan cara seperti di bawah ini:
while (true)
{
  /* matikan interupsi */;
  /* masuk ke critical section */;
  /* nyalakan interupsi */;
  /* masuk ke non-critical section */;   
}

Sebelum proses memasuki critical section proses memanggil rutin primitif untuk mematikan fasilitas interupsi dan proses memanggil rutin untuk mengembalikan fungsi interupsi. Dikarenakan critical section tidak dapat diinterupsi maka mutual exclusion menjadi terjamin penerapannya. Cara ini memiliki biaya yang mahal dikarenakan akan membatasi fleksibilitas prosesor dalam mengubah proses yang dieksekusi. Selain itu solusi ini tidak bekerja pada lingkungan multiprosesor di mana beberapa proses dapat dijalankan bersamaan masing-masing dengan prosesor yang berbeda.   
Instruksi-instruksi Mesin Khusus
Interrupt disabling tidak dapat digunakan pada mesin dengan banyak prosesor dikarenakan tidak ada mekanisme untuk melakukan interupsi antar prosesor. Pada lingkungan seperti ini yang mengkaitkan prosesor satu dan lainnya adalah mereka sama-sama mengakses satu main memory yang sama dan pada tingkatan perangkat keras akses ke lokasi tertentu main memory berarti menghalangi prosesor lain mengakses lokasi yang sama. Dengan menggunakan kondisi ini para disainer prosesor mencoba untuk mengaplikasikan mutual exclusion melalui instruksi mesin yang dalam satu putaran melakukan dua pekerjaan yang bersifat atomik seperti reading dan writing, atau reading dan testing. Dua bentuk instruksi yang diimplementasi antara lain:
1.    Instruksi test and set
2.    Instruksi exchange

Instruksi Test and Set
Instruksi test and set dapat didefinisikan seperti di bawah ini:
boolean testset (int i)
{
    if(i==0)
    {
        i=1;
        return true;
    }
    else
    {
        return false;
    }
}

Instruksi ini memeriksa apakah parameter i bernilai. Jika i bernilai 0 maka instruksi ini akan mengganti nilainya menjadi 1 dan mengembalikan nilai boolean true. Sebaliknya jika bernilai 1 maka instruksi ini akan mengembalikan nilai false.
Tabel di bawah memperlihatkan bagaimana mutual exclusion dapat diimplementasi melalui mekanisme instruksi ini. Prosedur parBegin(P1,P2, …, Pn) sendiri bekerja dengan cara sebagai berikut: tahan (suspend) ekseskusi dari program utama (main program) kemudian siapkan/inisiasi eksekusi secara konkuren prosedur P1, P2, …, Pn. Jika prosedur-prosedur tersebut telah selesai lanjutkan kembali program utama. Sebuah variabel yang dibagi pakai bernama bolt diinisialisasi bernilai 0. Proses yang dapat memasuki critical section hanyalah proses yang mendapati bahwa nilai bolt adalah 0. Proses lainnya akan tertahan dari memasuki critical section dan mengalami bussy waiting atau spin waiting. Bussy waiting adalah suatu teknik sedemikian sehingga proses tidak dapat memasuki critical section dan terus-menerus memeriksa kondisi tertentu yang membolehkan proses tersebut memasuki critical section. Setelah proses keluar dari critical section proses tersebut akan mengubah nilai bolt kembali menjadi 0.

/*program:mutualexclusion*/
const int n=/*jumlah proses*/
int bolt;
void P(int i)
{
   while(true)
   {
     while(!testset(bolt))
        /*diam*/
     /*critical section*/
     /*lain-lain*/
   }
}
void main()
{
   bolt=0;
   parBegin(P(1),P(2), …, P(n));
}
/*program:mutualexclusion*/
const int n=/*jumlah proses*/
int bolt;
void P(int i)
{
  int keyi=1;
  while(true)
  {
     do exchange (keyi, bolt);
     while(key!=0)
     /*critical section*/
     exchange(keyi, bolt);
     /*lain-lain*/
  }
}
void main()
{
  bolt=0;
  parBegin(P(1),P(2), …, P(n));
}
Instruksi Test and Set
Instruksi Exchange

Instruksi Exchange
Instruksi exchange dapat didefinisikan seperti di bawah ini:
void exchange (int register, int memory)
{
    int temp;
    temp=memory;
    memory=register;
    register=temp;
}
Instruksi ini menukar nilai dalam sebuah register (lokasi memori dalam prosesor) dengan nilai dalam sebuah lokasi memori. Tabel 4-1 memperlihatkan bagaimana mutual exclusion dapat diimplementasi dengan instruksi ini. Prosedur parBegin dan variabel bolt pada instruksi ini memiliki fungsi yang sama dengan pasangannya di instruksi set and test sedangkan variabel baru keyi ditetapkan di awal bernilai 1. Proses boleh memasuki critical section hanya jika mendapati nilai bolt adalah 0 dengan cara menukar nilai keyi dengan bolt dan memeriksa apakah nilai keyi adalah 1. Setelah proses meninggalkan critical section proses akan menukarkan kembali nilai bolt menjadi 0.
Sifat-sifat Pendekatan Instruksi Mesin
Keuntungannya:
  1. Dapat digunakan pada lingkungan satu (uni) atau banyak (multi) prosesor yang berbagi pakai main memory
  2. Sederhana dan mudah dipastikan
  3. Dapat mendukung beberapa critical section dengan menggunakan variabel tersendiri untuk setiap critical section
Kerugiannya:
1.    Terdapat busy waiting yang menghabiskan waktu prosesor
2.    Memungkinkan terjadinya starvation.
3.    Memungkinkan terjadinya deadlock
Fasilitas Perangkat Lunak untuk Mewujudkan Mutual Exclusion
Melihat kekurangan dari pendekatan instruksi mesin pendekatan alternatif dirasa perlu. Sistem operasi dan bahasa pemrograman dapat menyediakan mekanisme untuk mewujudkan mutual exclusion. Beberapa di antaranya adalah:
1.    Semaphore,
2.    Monitor, dan
3.    Message passing
Semaphore
William Stalling dalam bukunya, Operating Systems Internal Design and Principles, menyebutkan kemajuan besar yang pertama dalam menangani masalah-maslah yang timbul akibat proses-proses yang konkuren terjadi di tahun 1965 oleh Dijkstra. Dijkstra menekankan pada disain dari sistem operasi sebagai sekumpulan proses berurutan yang saling bekeja sama dan dengan pengembangan dari mekanisme-mekanisme kerja sama yang efisien dan dapat diandalkan. Mekanisme-mekanisme tersebut dapat digunakan oleh proses dari user jika prosesor dan sistem operasi dapat menyediakan mereka untuk digunakan.
Prinsip dasarnya adalah: bawhwa dua atau lebih proses dapat bekerja sama dengan menggunakan sinyal-sinyal sederhana, sedemikian sehingga sebuah proses dapat dipaksa berhenti pada tahap tertentu hingga menerima sinyal tertentu. Kebutuhan untuk koordinasi kompleks apapun dapat dipenuhi dengan struktur sinyal-sinyal yang tepat. Untuk mengirimkan sinyal dibutuhkan variabel-variabel spesial yang disebut sebagai semaphore. Untuk mengirim sinyal melalui semaphore s sebuah proses memanggil rutin primitif semSignal(s) dan untuk menerima sinyal melalui semaphore s, sebuah proses memanggil rutin primitif semWait(s). Jika ternyata setelah memanggil semWait(s) sinyal yang ditunggu tidak tersedia maka proses tersebut akan ditahan hingga sinyal yang ditunggu dikirimkan.
Semaphore dapat dilihat sebagai sebuah variabel bertipe integer yang kepadanya dapat dilakukan tiga operasi, yaitu:
  1. Sebuah semaphore dapat diinisialisasikan sehingga bernilai bilangan non negatif.
  2. Operasi semWait akan mengurangi nilai semaphore. Jika nilainya telah negatif maka proses yang memanggil semWait tersebut akan di blok. Sebaliknya jika nilainya masih positif proses dapat dilanjutkan.
  3. Operasi semSignal menaikkan nilai semaphore. Jika nilanya kurang atau sama dengan nol maka proses yang diblok oleh operasi semWait akan dilepaskan dari status diblok.
Selain ketiga operasi di atas tidak boleh ada lagi cara untuk memeriksa dan mengubah nilai semaphore.
Bentuk dari semphore yang lebih ketat adalah binary semaphore atau mutex yang hanya mengizinkan nilai 0 dan 1 bagi semaphore. Operasi-operasinya adlah sebagai berikut:
  1. Binary semaphore dapat diinisialisasikan dengan nilai 0 atau 1.
  2. Operasi semWaitB memeriksa nilai semaphore. Jika nilainya satu maka nilainya diubah menjadi nol dan proses melanjutkan eksekusi.
  3. Operasi semSignalB memeriksa apakah ada proses yang diblok pada semaphore ini. Juka ada maka proses yang telah diblok oleh operasi semWaitB akan dilepaskan dari status diblok dan nilai dari semaphore diubah menjadi satu.
Bentuk semaphore yang pertama sering pula disebut sebagai counting semaphore atau general semaphore.
Kebijakan yang digunakan untuk mengeluarkan proses dari antrian proses yang diblok pada semaphore dapat bermacam-macam bentuknya. Bentuk yang paling adil adalah First In First Out (FIFO). Proses yang paling lama diblok adalah yang keluar paling awal. Semaphore yang mendefinisikan kebijakan melepas proses dari antrian dikenal sebagai strong semaphore sedangkan yang tidak mendefinisikannya disebut sebagai weak semaphore. 
Contoh dari mekanisme semaphore dapat dilihat pada gambar 4-1 dengan kondisi awal terdapat proses A, B, C, dan D dengan keterhubungan sedemikan sehingga proses A, B, dan C bergantung pada hasil yang dikeluarkan proses D. Urutan kejadian pada gambar dapat dijelaskan sebagai berikut:
  1. Awalnya A sedang berjalan; B, C, dan D dalam kondisi ready. Semaphore bernilai 1 menandakan salah satu hasil yang dikeluarkan proses D telah tersedia. Ketika A memanggil instruksi semWait pada semaphore s nilai s akan dikurangi menjadi 0 dan A dapat melanjutkan ke langkah selanjutnya dan kemudain bergabung pada antrian ready.
  2. B kemudian dieksekusi dan memanggil instruksi semWait. Dikarenakan nilai semaphore s menjadi -1 maka proses B akan diblok dan memasuki antrian blocked.
  3. Ketika proses D dieksekusi dan mengeluarkan hasil yang baru instruksi semSignal dipanggil oleh proses D  yang memungkinkan proses B yang diblok untuk masuk ke kondisi ready di antrian ready.
  4. Proses D yang telah selesai langsung bergabung pada antrian ready dan proses C dieksekusi.
  5. Proses C yang memanggil instruksi semWait kemudian diblok dan masuk ke antrian blocked dan nilai semaphore menjadi -1 (tidak tampak di gambar).
  6. Selanjutnya proses A dan B juga mengalami hal yang sama dengan proses C. Pada tahap ini akhirnya nilai semaphore menjadi -3.
  7. Proses D kembali dijalankan, mengeluarkan hasil baru dan memanggil instruksi semSignal sehingga nilai semaphore menjadi -2 dan proses C keluar dari antrian blocked masuk ke antrian ready. Ketika dieksekusi proses C akan mendapatkan hasil yang dikeluarkan oleh proses D. Pada putaran berikutanya proses D akan melepaskan proses A dan B dari antrian blocked dan masing-masing akan mendapatkan hasil dari proses D seperti halnya proses C.
Strong semaphore menjamin terbebas dari starvation sedangkan weak semaphore tidak. Pada umumnya sistem operasi menyediakan fasilitas untuk strong semaphore.
Contoh dari mekanisme semaphore

Monitor diajukan sebagai solusi dari masalah yang dimiliki semaphore. Monitor sendiri adalah sebuah modul program yang memiliki satu atau beberapa prosedur, urutan inisialisasi, dan data lokal. Monitor memiliki karakteristik sebagai berikut:
  1. Data lokal hanya bisa diakses oleh prosedur yang ada di dalam monitor.
  2. Sebuah proses memasuki monitor dengan memanggil salah satu prosedur di dalam monitor tersebut.
  3. Pada satu saat hanya ada satu proses yang bisa menggunakan prosedur di dalam monitor. Proses lain yang hendak mengakses pada waktu yang bersamaan harus menunggu proses pertama selesai.
Untuk melindungi struktur data yang dibagi pakai bersama data tersebut dapat diletakkan di dalam monitor.
Untuk dapat digunakan dalam lingkungan yang konkuren monitor harus menyediakan fasilitas sinkronisasi bagi proses-proses yang menggunakannya. Sebagai contoh jika ada sebuah proses yang memanggil prosedur dalam monitor  dan ketika berada di dalamnya harus diblok untuk menunggu suatu kejadian atau kondisi tertentu terpenuhi maka diperlukan sebuah fasilitas yang memungkinkan proses tersebut tidak hanya diblok tetapi juga melepas akses terhadap monitor sehinga proses lain dapat menggunakan monitor tersebut. Setelah kondisi terpenuhi dan monitor kembali tersedia proses tadi dapat kembali berjalan pada posisi sebelum ia diblok.
Monitor sendiri memiliki beberapa alternative implementasi seperti:
1.    Monitor dengan signal
2.    Monitor dengan notify dan broadcast
Message Passing
Message passing adalah sebuah teknik untuk melakukan sinkronisasi dan komunikasi antara proses-proses yang salin berinteraksi. Message passing dapat diimplementasikan dengan beberapa cara namun yang dibahas kali ini adalah dengan menggunakan sepasang prosedur primitive yaitu:
1.    Send (tujuan, pesan)
2.    Receive(sumber, pesan)
Sebuah proses mengirim informasi kepada proses lain melalui pemanggilan prosedur send sedangkan proses menerima informasi melalui pemanggilan prosedur receive.
Ada beberapa persoalan yang berkenaan dengan disain teknik message passing ini, antara lain:
  1. Sinkronisasi: proses tidak dapat menerima pesan sebelum pesan tersebut dikirimkan oleh proses lain.
  2. Pengalamatan: menentukan cara mengalamati sebuah proses, yaitu melalui direct addressing dan indirect addressing.
  3. Format pesan: menentukan bagaimana pesan dibentuk dan informasi apa saja yang terdapat di dalam pesan termasuk pesan-pesan pada sistem tersebar
  4. Aturan antrian: menentukan bagaimana antrian pesan yang datang maupun dikirim diproses oleh proses tujuan atau sumber.
Sinkronisasi
Ketika suatu proses mengirimkan pesan dengan memanggil prosedur send ada dua kemungkinan yang dapat terjadi:
1.    Proses pengirim diblok hingga pesan diterima, atau
2.    Proses boleh melanjutkan eksekusi
Hal yang sama juga terjadi pada proses menerima pesandengan memanggil prosedur receive. Proses dapat diblok menunggu adanya pesan yang datang atau proses melanjutkan eksekusinya sekalipun pesan belum datang.
Berdasarkan empat kondisi yang telah disebutkan dapat dibuat tiga kombinasi kondisi yang umum digunakan pada sebuah sistem yaitu:
1.    Blocking send, blocking receive
2.    Nonblocking send, blocking receive
3.    Nonblocking send, nonblocking receive
Proses dengan nonblocking send memiliki kelebihan proses dapat terus berlanjut tanpa menunggu adanya konfirmasi bahwa pesan telah diterima namun di sisi lain jika proses mengalami kesalahan dan terus menerus mengirimkan pesan maka sumber daya komputer dapat terkuras oleh proses tersebut. Selain itu pemrogram aplikasi juga harus membuat sendiri mekanisme untuk menentukan apakah pesan sudah diterima atau belum.
Pada prosedur primitive receive versi blocking proses yang meminta pesan akan menunggu hingga pesan yang dimaksud diterima. Saat pesan tidak juga diterima proses dapat menunggu terus tanpa kepastian. Non blocking receive menyelesaikan masalah ini namun sisi buruknya adalah pesan dapat hilang ketika prosedur receive dipanggil sebelum pesan sampai.
Pengalamatan (Addressing)
Pada direct addressing prosedur send memerlukan penanda/identitas dari proses yang menjadi tujuan pesan sedangkan prosedur receive akan menangani dua kemungkinan:
  1. Prosedur receive memerlukan identitas proses yang akan mengirimkan pesan. Konsekuensinya proses yang memanggil receive perlu mengetahui identitas dari proses yang akan mengirimkan pesan. Cara ini efektif untuk mengendalikan dua proses konkuren yang saling bekerja sama.
  2. Proses yang menerima pesan tidak dapat menentukan proses mana yang menjadi sumber pesan. Contohnya pada proses yang menangani printer. Proses tersebut menerima pesan dari proses-proses lain yang memerlukan layanan printer. Pada kasus seperti ini lebih tepat jika menggunakan indirect addressing.
Pada metode indirect addressing pesan tidak langsung dikirimkan kepada proses tujuan melainkan disimpan terlebih dahulu pada penyimpanan sementara (mailbox). Cara ini dipandang lebih baik karena ketergantungan antar proses menjadi lebih rendah dan komunikasi dapat menjadi lebih fleksibel.
Terdapat empat jenis komunikasi dengan metode indirect ini bergantung kepada banyaknya proses pengirim dan penerima, yaitu:
1.    Satu pengiri ke satu penerima
2.    Banyak pengirim ke satu penerima
3.    Satu pengirim ke banyak penerima
4.    Banyak pengirim ke banyak penerima
Yang menjadi persoalan adalah kepemilikan mailbox tempat menyimpan pesan. Mailbox bisa dimiliki oleh proses penerima pesan dan ketika proses mati begitu juga mailbox akan dihapus. Cara lain adlah sistem operasi menyediakan layanan mailbox dan mailbox dapat dipesan oleh proses tertentu. Pada cara ke-dua mailbox dapat dipandang dimiliki oleh proses yang memintanya dan akan dihilangkan ketika proses tersebut selesai atau tetap dimiliki oleh sistem operasi penghapusan nantinya dilakukan oleh sistem operasi.
Format Pesan
Format pesan amat bergantung pada fasilitas pertukaran pesan dan jumlah komputer yang terlibat dalam pertukaran pesan. Pesan dapat memiliki panjang tetap untuk memperkecil overhead (pemrosesan tambahan seperti: menelusuri pesan untuk mencari ujung dari sebuah pesan) atau jika berukuran besar dapat disimpan dalam sebuah file. Pendekatan yang lebih fleksibel adalah menggunakan pesan yang panjangnya tidak tetap.
Pesan dapat dibagi menjadi bagian kepala (header) yang berisi informasi tentang pesan dan badan (body) tempat menampung isi pesan sebenarnya.
Aturan Antrian
Aturan antrian yang paling sederhana adalah FIFO (first in first out) tetapi mungkin tidak cukup jika terdapat beberapa pesan yang penting dan perlu untuk segera disampaikan dibandingkan pesan-pesan lainnya. Alternatifnya ialah dengan menyediakan fasilitas prioritas pada pesan atau membolehkan penerima pesan memeriksa antrian untuk mengambil pesan.

Tidak ada komentar:

Posting Komentar

Catatan: Hanya anggota dari blog ini yang dapat mengirim komentar.