Minggu, 27 Mei 2012

Interprocess Communication pada POSIX



Dalam menjalankan fungsinya dalam sistem operasi, dibutuhkan interaksi antara beberapa proses yang berbeda. Interaksi tersebut bertujuan agar terjadi kesinambungan antar proses yang terjadi sehingga sistem operasi dapat berjalan sebagaimana mestinya. Interaksi tersebut dapat melalui sistem berbagi memori atau dengan cara saling berkirim pesan. Terkadang, beberapa pesan yang dikirim tidak dapat diterima seluruhnya oleh penerima dan menyebabkan informasi yang lain menjadi tidak valid, maka dibutuhkanlah sebuah mekanisme sinkronasi yang akan mengatur penerimaan dan pengiriman pesan sehingga kesalahan penerimaan pesan dapat diperkecil. Pesan yang dikirim dapat ditampung dalam penyangga sebelum diterima oleh penerima. Dalam tulisan ini akan diulas bagaimana hubungan antar proses dapat berlangsung.

IPC


IPC (Inter-Process Communication) adalah komunikasi antar proses untuk mengirim data dari satu proses ke proses yang lain, baik antar proses dalam satu komputer maupun proses-proses dalam komputer yang berbeda. IPC dapat dilakukan dengan berbagai cara yaitu Shared memory, Pipe, Messages passing, dan sebagainya. Berikut penjelasan mengenai cara-cara tersebut.

a.      Shared memory

Sistem Berbagi Memori atau yang disebut juga sebagai Shared Memory System merupakan salah satu cara komunikasi antar proses dengan cara mengalokasikan suatu alamat memori untuk dipakai berkomunikasi antar proses. Alamat dan besar alokasi memori yang digunakan biasanya ditentukan oleh pembuat program. Pada metode ini, sistem akan mengatur proses mana yang akan memakai memori pada waktu tertentu sehingga pekerjaan dapat dilakukan secara efektif.



b.      Pipe

Pipe merupakan komunikasi sequensial antar proses yang saling terelasi, namun pipe memiliki kelemahan yaitu hanya bisa digunakan untuk komunikasi antar proses yang saling berhubungan, dan komunikasinya yang dilakukan adalah secara sequensial. Urutan informasi yang ada dalam sebuah pipe ada yang mirip dengan antrian queue. Jika komunikasi yang diinginkan adalah komunikasi dua arah maka kita harus membuat dua pipe, karena sebuah pipe hanya bisa digunakan untuk komunikasi satu arah saja.

c.       Messages passing
Sistem berkirim pesan adalah proses komunikasi antar bagian sistem untuk membagi variabel yang dibutuhkan. Proses ini menyediakan dua operasi yaitu mengirim pesan dan menerima pesan. Ketika dua bagian sistem ingin berkomunikasi satu sama lain, yang harus dilakukan pertama kali adalah membuat sebuah link komunikasi antara keduanya. Setelah itu, kedua bagian itu dapat saling bertukar pesan melalui link komunikasi tersebut. Sistem berkirim pesan sangat penting dalam sistem operasi. Karena dapat diimplementasikan dalam banyak hal seperti pembagian memori, pembagian bus, dan melaksanakan proses yang membutuhkan pengerjaan bersama antara beberapa bagian sistem operasi. Terdapat dua macam cara berkomunikasi, yaitu:
1.       Komunikasi langsung
Setiap proses yang ingin berkomunikasi harus memiliki nama yang bersifat eksplisit  baik penerimaan atau pengirim dari komunikasi tersebut. Dalam konteks ini, pengiriman dan penerimaan pesan secara primitive dapat dijabarkan sebagai :

  • Send (P, message) – mengirim sebuah pesan ke proses P.
  • Receive (Q, message) – menerima sebuah pesan dari proses Q.
Sebuah jaringan komunikasi pada bahasan ini memiliki beberapa sifat, yaitu:

  • Sebuah jaringan yang didirikan secara otomatis diantara setiap pasang dari proses yang ingin dikomunikasikan. Proses tersebut harus mengetahui identitas dari semua yang ingin dikomunikasikan.
  • Sebuah jaringan adalah terdiri dari penggabungan dua proses.
  • Diantara setiap pesan dari proses terdapat tepat sebuah jaringan.
Pembahasan ini memperlihatkan sebuah cara simetris dalam pemberian alamat. Oleh karena itu, baik keduanya yaitu pengirim dan penerima proses harus memberi nama bagi yang lain untuk berkomunikasi, hanya pengirim yang memberikan nama bagi penerima sedangkan penerima tidak menyediakan nama bagi pengirim. Dalam konteks ini, pengirim dan penerima secara sederhana dapat dijabarkan sebagai berikut:
  • Send (P, message) – mengirim sebuah pesan kepada proses P.
  • Receive (id, message) – menerima sebuah pesan dari semua proses. Variabel id diatur sebagai nama dari proses dengan komunikasi.
2.       Komunikasi tidak langsung
Dengan komunikasi tidak langsung, pesan akan dikirimkan pada dan diterima dari/ melalui mailbox (kotak surat) atau terminal-terminal, sebuah mailbox dapat dilihat secara abstrak sebagai sebuah objek didalam setiap pesan yang dapat ditempatkan dari proses dan dari setiap pesan yang bias dipindahkan. Setiap kotak surat memiliki sebuah identifikasi (identitas) yang unik, sebuah proses dapat berkomunikasi dengan beberapa proses lain melalui sebuah nomor dari mailbox yang berbeda.
Dua proses dapat saling berkomunikasi apabila kedua proses tersebut sharing mailbox. Pengirim dan penerima dapat dijabarkan sebagai :
  • Send (A, message) – mengirim pesan ke mailbox A.
  • Receive (A, message) – menerima pesan dari mailbox A.
Dalam masalah ini, link komunikasi mempunyai sifat sebagai berikut :
  • Sebuah link dibangun diantara sepasang proses dimana kedua proses tersebut membagi mailbox.
  • Sebuah link mungkin dapat berasosiasi dengan lebih dari dua proses.
  • Diantara setiap pasang proses komunikasi, mungkin terdapat link yang berbeda-beda, dimana setiap link berhubungan pada satu mailbox.
Misalkan terdapat proses P1, P2 dan P3 yang semuanya share mailbox. Proses P1 mengirim pesan ke A, ketika P2 dan P3 masing-masing mengeksekusi sebuah kiriman dari A. Proses mana yang akan menerima pesan yang dikirim P1? Jawabannya tergantung dari jalur yang kita pilih :
  • Mengizinkan sebuah link berasosiasi dengan paling banyak 2 proses.
  • Mengizinkan paling banyak satu proses pada suatu waktu untuk mengeksekusi hasil kiriman (receive operation).
  • Mengizinkan sistem untuk memilih secara mutlak proses mana yang akan menerima pesan (apakah itu P2 atau P3 tetapi tidak keduanya, tidak akan menerima pesan). Sistem mungkin mengidentifikasi penerima kepada pengirim.
Mailbox mungkin dapat dimiliki oleh sebuah proses atau sistem operasi. Jika mailbox dimiliki oleh proses, maka kita mendefinisikan antara pemilik (yang hanya dapat menerima pesan melalui mailbox) dan pengguna dari mailbox (yang hanya dapat mengirim pesan ke mailbox).
Selama setiap mailbox mempunyai kepemilikan yang unik, maka tidak akan ada kebingungan tentang siapa yang harus menerima pesan dari mailbox. Ketika proses yang memiliki mailbox tersebut diterminasi, mailbox akan hilang. Semua proses yang mengirim pesan ke mailbox ini diberi pesan bahwa mailbox tersebut tidak lagi ada. Dengan kata lain, mempunyai mailbox sendiri yang independent, dan tidak melibatkan proses yang lain. Maka sistem operasi harus memiliki mekanisme yang mengizinkan proses untuk melakukan hal-hal dibawah ini:
  • Membuat mailbox baru.
  • Mengirim dan menerima pesan melalui mailbox.
  • Menghapus mailbox.
Proses yang membuat mailbox pertama kali secara default akan memiliki mailbox tersebut. Untuk pertama kali, pemilik adalah satu-satunya proses yang dapat menerima pesan melalui mailbox ini.

POSIX

POSIX singkatan dari Portable Operating System Interface for UNIX, adalah sebuah standar yang dicetuskan oleh Institute of Electical and Electronics Engineers (IEEE) yang mendefinisikan sekumpulan layanan dalam sistem operasi. Program-program yang mendukung standar POSIX dapat secara mudah di-port dari satu sistem ke sistem lainnya. POSIX menjadi basis dalam layanan sistem operasi UNIX. Meskipun demikian, POSIX juga dibuat demikian agar sistem operasi lainnya dapat mengimplementasikan layanan POSIX. Antarmuka pengguna standar dalam POSIX adalah Korn shell yang digunakan untuk memasukkan perintah command-line dan pembuatan skrip. Program-program pengguna lainnya juga dimasukkan ke dalam standar, seperti awk, echo, ed, dan ratusan program lainnya.

POSIX juga mendefinisikan pustaka API standar untuk thread (POSIX Thread) yang banyak diimplementasikan di sistem operasi modern dimana POSIX thread ini memiliki fungsi antara lain untuk :
  1. Thread management : Thread dikelola pada library thread routine untuk penciptaan thread, status query thread, normal atau abnormal terminasi thread, menunggu penghentian thread, pengaturan atribut penjadwalan, dan menentukan ukuran stack thread.
  2. Assistance for data sharing : Sharing data dengan thread dapat terjadi kesalahan jika terdapat dua atau lebih thread yang di-update dalam waktu bersamaan. Untuk itu disediakan sebuah fungsi yang disebut mutex dimana fungsi tersebut bertugas untuk menjaga agar setiap data yang ada hanya dapat dikases atau digunakan oleh satu thread dan apabila ada thread lain yang membutuhkan data terseut maka thread itu dapat menggunakannya dengan cara bergantian.
  3.  Assistance for synchronization : Condition variables disediakan untuk memfasilitasi koordinasi antara thread sehingga setiap thread dapat melaksanakan tugasnya masing-masing. Sementara itu, layanan-layanan level program yang dimasukkan ke dalam standar adalah input/output dasar (file, terminal, dan jaringan). POSIX juga mendefinisikan bagaimana melakukan pengujian terhadap sebuah aplikasi apakah mendukung POSIX atau tidak, yang disebut dengan POSIX Confirmance Test Suite (PCTS). Linux disusun berdasarkan standard sistem operasi POSIX, yang sebenarnya diturunkan berdasarkan fungsi kerja UNIX. UNIX kompatibel dengan Linux pada level system call, ini berarti sebagian besar program yang ditulis untuk UNIX atau Linux dapat direkompilasi dan dijalankan pada sistem lain dengan perubahan yang minimal.
Standar POSIX didukung oleh kebanyakan sistem operasi modern (utamanya keluarga sistem operasi UNIX), meski tidak semuanya diimplementasikan. Keluarga Windows NT juga mendukung standar POSIX, meski hanya beberapa standar, yakni POSIX.1 dan POSIX.4. Dukungan POSIX dalam sistem operasi itu juga dapat diperluas dengan menambahkan komponen tambahan, yang disebut dengan Windows Services for UNIX (SFU) dari Microsoft atau MKS Toolkit
POSIX  interprocess communication adalah pengembangan dari System V IPC, pertama kali diperkenalkan pada Solaris 7. Seperti pada system V, POSIX IPC bisa membaca dan menulis tetapi tidak bisa mengeksekusi hak akses untuk owner, group dan other. Dikatakan bahwa There is no way for the owner of a POSIX IPC object to assign a different owner. Tidak seperti pada System V IPC interface, pada POSIX IPC interface digunakan untuk multithread.
Disini kita bisa membandingkan antara POSIX IPC dengan System V IPC dimana keduanya memiliki basic tool yang sama yaitu semaphores, shared memory dan message queues.
POSIX IPC dengan System V IPC  memberikan interface yang sedikit berbeda untuk basic tool tersebut, namun dengan konsep-konsep dasar yang sama.  Perbedaan penting adalah bahwa POSIX menyediakan fitur pemberitahuan untuk message queue sedangkan pada Sys V tidak. POSIX IPC kurang banyak diterapkan apabila saya analisa dari list daftar implementasi pada beberapa platform, disebutkan bahwa  Sys V IPC is completely implemented AFAIK, whereas you can see the POSIX IPC is no”t.
aplikasi kedua dari umur mereka adalah bahwa POSIX IPC dirancang setelah Sys V IPC telah digunakan untuk sementara waktu. Oleh karena itu, para perancang API POSIX mampu belajar dari kekuatan dan kelemahan dari Sys VAPI. Akibatnya POSIX API lebih sederhana dan lebih mudah digunakan.