1 TUGAS IIPC System - Mach Dosen: Dr.-Ing. M.Reza Pulungan, S.Si, M.ScOleh : Ervin Kusuma Dewi 323335 Khadijah 325316 Lelly Hidayah Anggraini 309045 Ika Candradewi 322924 PROGRAM ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS GADJAH MADA YOGYAKARTA 2011
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
DAFTAR ISI ........................................................................................................................... i BAB I PENDAHULUAN ....................................................................................................... 1 BAB II PEMBAHASAN ........................................................................................................ 2
2.1. Komponen System Mach ....................................................................................... 2 2.2. Interproses Communcation.................................................................................... 4 2.2.1. Port .................................................................................................................... 4
2.2.1.1. Port Right ................................................................................................... 6
2.2.1.2. Port Name space......................................................................................... 8
2.2.1.3. Port Set ....................................................................................................... 9
2.2.1.4. Manipulasi Antarmuka Port ........................................................................ 9
2.2.1.5. Penciptaan Port ........................................................................................ 10
2.2.1.6. Penghacuran Port ..................................................................................... 10
2.2.1.7. Nama Port ................................................................................................ 11
Kernel Mach dirancang sebagai “drop-in” pengganti untuk kernel UNIX tradisional.
Carnegie Mellon University mulai bereksperimen sepanjang garis-garis di bawah kernel
Accent, menggunakan sistem IPC yang didasarkan pada shared memory. Accent adalah sistem
murni eksperimental dengan banyak fitur, yang dikembangkan dalam mode ad-hoc selama
periode waktu dengan perubahan kepentingan penelitian. Selain itu, kegunaan Accent untuk
penelitian terbatas karena tidak compatible dengan UNIX, sedangkan UNIX sudah menjadi
standar de-facto hampir semua penelitian sistem operasi.
Mach dikembangkan pada konsep Accent yang IPC, tapi membuat sistem yang lebih
dari UNIX, bahkan mampu menjalankan program UNIX dengan sedikit atau tanpa modifikasi,
yaitu dengan memperkenalkan konsep dari sebuah port , yang mewakili masing-masing titik
akhir dari dua arah IPC. Port memiliki keamanan dan hak-hak seperti file di bawah UNIX,
yang memungkinkan model UNIX untuk perlindungan.
2.1. Komponen System Mach
Untuk mencapai tujuan desain Mach, para pengembang mengurangi sistem operasi yangfungsionalitas untuk abstraksi dasar, fungsi yang lain diturunkan. Pendekatan Mach adalah
menempatkan sedikit mungkin di dalam kernel tetapi untuk membuat fitur yang ada cukup.
Filosofi desain Mach adalah untuk memiliki sebuah desain simple, kernel yang dapat
dikembangkan, fokus pada fasilitas komunikasi. Sebagai contoh, semua permintaan ke kernel,
dan semua pergerakan data antar proses akan di tangani melalui suatu mekanisme komunikasi.
Mach adalah contoh dari sistem berorientasi objek dimana data dan operasi memanipulasi
data yang dikemas menjadi objek abstrak. Hanya operasi objek dapat bertindak atas entitas
yang didefinisikan di dalamnya. Abstraksi Mach adalah jantung dari sistem yang akan
dijelaskan sebagai berikut :
Task adalah objek yang terdiri dari serangkaian sumber daya sistem yang
mach_port_request_no-tification). Notifikasi ini tergantung pada istilah dari make-send
count, yang didiskusikan sebagai bagian dari port name space. Perpindahan (ke task yang
lainnya) dari penerimaan rights tidak secara langsung berpengaruh pada beberapa no-more-
senders permintaan notifikasi. (Perubahan rencana dibatalkan keluar dari tidak adanya
permintaan notifikasi, dan untuk mengirim suatu send-once notification untuk
mengidentifikasi pembatalan ini). Suatu send-once right mengizinkan suatu message untuk
dikirmkan via jalan tersebut. Rights digenerate hanya dari receive right . Send-once right
memiliki properti yang memberi garansi bahwa message akan memberikan hasil dari itu. Pada
kasus yang normal, send-once right dikonsumsi dengan menggunakan hal itu sebagai port
tujuan pada message. Pada right secara perlahan dirusak ketika message diterima. Send-once
right dapat dipindahkan dari satu task ke task yang lain (disamping digunakan sebagai tujuandari right) hingga beberapa waktu, ini dikonsumsi. Jika right dirusak, disamping
menggunakannya untuk mengirim message, notifikasi send-once dikirim ke port dalam
keadaan stabil.
2.2.1.2. Port Name space
Port dan port right tidak mempunyai system-wide names yang mengijinkan sejumlah
port atau port right untuk dimanipulasi secara langsung. Port dapat dimanipulasi hanya
melalui port right dan port right dapat dimanipulasi hanya ketika mereka diisikan ke dalamsebuah port name space. Sebuah port right dispesifikasi dengan sebuah port name dengan
sebuah indeks ke dalam port name space. Setiap task yang berhubungan dengan sebuah single
port name space.
Sebuah masukan dalam sebuah port name space dapat mempunya kemungkinan nilai, yaitu:
1) MACH_PORT _NULL — Tidak ada port right yang berhubungan.
2) MACH_PORT _DEAD — Sebuah right yang dihubungkan dengan nama ini, tetapi
port yang mana right mengacu telah dihancurkan.
3) port right — Sebuah send-once right , send right , atau receive right untuk sebuah port .
4) port set name —Sebuah nama yang bertindak seperti receive right , tetapi mengijinkan
Berikut ini adalah jenis-jenis antarmuka port dalam Mach:
1) Penciptaan Port , cara membuat port baru dan set port .
2) PengahancuranPort , bagaimana untuk merusak port dan set port .
3) Port Name, bagaimana query dan memanipulasi nama port .
4) Port right , bagaimana bekerja dengan hak port .
5) Port dan Tugas lainnya, bagaimana untuk memindahkan hak antara tugas.
6) Receiving right , bagaimana bekerja dengan menerima hak.
7) Port Set , bagaimana bekerja dengan set port .
8) NotificationRequest , bagaimana meminta pemberitahuan untuk acara.
2.2.1.5. Penciptaan Port
Fungsi mach_ port _allocate menciptakan hak baru dalam tugas tertentu. Nama yang
tepat baru dikembalikan dalam nama, mungkin nama yang tidak digunakan.
Argumen yang tepat mengambil nilai berikut :
MACH_PORT_RIGHT_RECEIVE
MACH_PORT_RIGHT_PORT_SET
MACH_PORT_RIGHT_DEAD_NAME
2.2.1.6. Penghacuran Port
Fungsi mach_port_deallocate melepaskan referensi pengguna untuk hak tugas IPC. Hal
ini memungkinkan tugas untuk melepaskan referensi pengguna untuk mengirim atau kirim-
sekali tepat tanpa gagal jika port telah meninggal dan kanan adalah sekarang benar-benar
nama mati.
Jika nama menunjukkan nama mati, mengirim kanan, atau kirim-sekali benar, maka hak
kehilangan satu referensi pengguna. Jika hanya memiliki satu referensi pengguna, kemudian
kanan ini hancur.
Fungsi ini mengembalikan KERN_SUCCESS jika panggilan berhasil, KERN_INVALID_TASK jika tugas tidak sah, KERN_INVALID_NAME jika nama tidak menunjukkan hak dan
KERN_INVALID_RIGHT jika nama dinotasikan hak valid . Pemanggilan mach_ port _deallocate
sebenarnya RPC untuk tugas, biasanya hak kirim untuk port tugas, tetapi berpotensi kirim
benar. Selain kode kembali normal diagnostik dari server call (biasanya kernel), panggilan
Jika argumen pilihan MACH_SEND_MSG, mengirimkan message. Argumen send_size
menentukan ukuran message untuk mengirim. Field msgh_remote_port dari header
message menentukan tujuan message.
Jika argumen pilihan MACH_RCV_MSG, menerima message. Argumen rcv_size
menentukan ukuran buffer message yang akan menerima message, message lebih besar dari
rcv_size tidak diterima. Argumen rcv_name menentukan port atau set port dari mana
untuk menerima.
Jika argumen pilihan adalah MACH_SEND_MSG | MACH_RCV_MSG, maka mach_msg tidak baik
mengirim dan menerima operasi. Jika operasi mengirim menemukan kesalahan (kembali
kode selain MACH_MSG_SUCCESS), kemudian memanggil kembali segera tanpa mencoba
menerima operasi. Panggilan gabungan setara untuk memisahkan mengirim dan menerimapanggilan, tetapi menghemat panggilan sistem dan memungkinkan optimasi internal
lainnya.
Jika argumen tidak menspesifikasikan MACH_SEND_MSG atau MACH_RCV_MSG, maka
mach_msg tidak apa-apa. Beberapa pilihan, seperti MACH_SEND_TIMEOUT dan
MACH_RCV_TIMEOUT, berbagi argumen pendukung. Jika pilihan ini digunakan bersama-
sama, mereka menggunakan independen dari nilai argumen yang mendukung itu.
2) Data Type
mach_msg_timeout_t
Mach msf_timeout_t adalah natural_t digunakan oleh mekanisme timeout. Unit adalah
milidetik, nilai yang digunakan ketika ada batas waktu tidak ada
MACH_MSG_TIMEOUT_NONE.
2.2.2.2. Message Format
Message Mach terdiri dari header message ukuran tetap, mach_msg_header _t, diikuti
oleh nol atau lebih item data. Item data yang diketik. Setiap item memiliki deskriptor jenis
diikuti dengan data aktual (atau alamat dari data, untuk out-of-line daerah memori). Jenis data
berikut terkait dengan Message Mach :
mach_msg_bits_t
Tipe data mach_msg_bits_t adalah unsigned int digunakan untuk menyimpan berbagai
Mendukung sistem heterogen, untuk membuat Mach tersedia secara luas dan
dioperasikan antara sistem komputer dari beberapa vendor
Pada desainer Mach sangat dipengaruhi oleh BSD (dan oleh UNIX pada umumnya) yang
meberikan manfaat sebagai berikut :
Antarmuka yang sederhana dan konsisten.
Port abilitas untuk class uniprosesor .
Library yang luas untuk utilitas dan aplikasi.
Kemampuan untuk menggabungkan utilitas melalui pipa.
Selain di atas, para desaigner Mach juga ingin memperbaiki kelemahan BSD, yaitu :
Sebuah kernel yang menjadi berlebihan banyak fitur dan akibatnya sulit untuk
mengelola dan memodifikasi.
Tujuan desain asli sulit untuk memberikan dukungan prosesor untuk sistem distribusi
dan shared program. Misalnya kernel diracang untuk uniprosesor, ia tidak memiliki
ketentuan untuk kode penguncian namun prosesor lainya mungkin menggunakan.
Abstraksi mendasar terlalu banyak.
Berdasarkan penjelasan di atas, perkembangan Mach terus menjadi usaha besar. Manfaatsistem tersebut sama-sama besar namun Sistem operasi bejalan pada uni dan ada banyak
arsitektur multiprosesor. Wilayah eksperimen Mach meliputi operasi sistem, database, sistem
terdistribusi , bahasa multiprosesor, keamanan dan distrsibusi kecerdasan buatan.
2.4. Contoh program IPC-Mach
Contoh program berikut menunjukkan bagaimana message dilewatkan antara 2 task .
Contoh ini mengilustrasikan beberapa fitur Mach yang mendasar, yaitu alokasi, dealokasi, dan
penggunaan port , penggunaan environment manager , mengatur struktur message, dan
komunikasi antara dua proses melalui message atau port . Pada contoh ini, parent task akan
menciptakan sebuah child task , yang akan mengirimkan message ke berisi data ke parent .
Parent kemudian akan menotifikasi child tersebut dengan mengirimkan reply message.
Contoh ini menggunakan versi Mach dari UNIX fork utility untuk menciptakan ( fork )
sebuah child task . Fork dalam UNIX menciptakan salinan lengkap dari address space parent
dan menyiapkan child untuk mulai mengeksekusi segera setelah pemanggilan fork . Fork
dalam Mach menciptakan dua port untuk child task , didefinisikan dengan task _self(), dan
sebuah notification port , didefinisikan dengan task_notify. Task port adalah port yang
merepresentasikan task terebut dalam pemanggilan ke kernel. Notify port adalah port yang
mana task tersebut bisa menerima message khusus dari kernel. Child task juga mewarisi
exception port , bootstrap port dan beberapa port untuk sistem server sepeti environment
manager dan NetMsgServer. Akses ke user defined port tidak diwariskan melalui forking.
Thread yang diciptakan memiliki sebuah thread kernel port , diacu oleh thread _self(), dan
sebuah thread reply port , diacu dengan thread _reply() yang diciptakan untuknya. Thread kernel port tersebut adalah port yang merepresentasikan thread di pemanggilan kernel. Thread
reply port adalah sebuah port yang mana thread dapat menerima beberapa initialization
message dari parent -nya.
Message passing antara parent dan child tidak dapat terjadi sampai sebuah port dikenal
oleh kedua proses tersebut. Sebelum forking, sebuah string disusun untuk digunakan sebagai
nama communication port dan sebuah port dialokasikan menggunakan pemanggilan
port_allocate. Kemudian, fungsi environment manager env_set_ port dipanggil untuk
menghubungkan nama dengan port . Nama ini tersedia untuk kedua proses tersebut setelah
forking karena nama tersebut merupakan variabel statis. Setelah fork , child dapat memperoleh
send right ke port menggunakan env_get_ port.
Sekarang kedua task mempunyai akses ke communication port , sebuah message disusun
oleh child . Message ini berisi sebuah fixed sized message header dan variable sized data
portion. Ketika membangun message, child mengatur field msg_remote_ port di haeder ke
communication port yang telah dibangun sebelumnya. Field ini menunjuk port ke mana
message dikirimkan. Header field lainnya yang harus diatur dengan tepat oleh child adalah
msg_local_ port. Ini adalah port di mana child akan menunggu reply message. Pada contoh
ini, child akan menerima reply message pada thread reply port -nya. Task yang menerima
message yang dibuat oleh child secara otomatis menerima send right ke msg_local_ port.
Karena child task berharap untuk mengirimkan message dan kemudian segera menerima reply
message, child memilih menggunakan msg_rpc daripada msg_send dan msg_receive.
msg_rpc mengirim dan menerima message menggunakan message buffer yang sama untuk
kedua pemanggilan tersebut.
Kode lengkap dari contoh program disajikan pada Lampiran, sedngkan penjelasan
berbagai fungsi yang digunakan dalam contoh akan diejalskan sebagai berikut
1) Mach Error Printing
mach_error adalah sebuah error routine yang menerima sebuah string dan nilai error.
String kemudian dicetak bersama dengan sebuah error string yang berhubungan dengan nilai
tersebut.
kern_return__t error;
mach_error("PARENT: port _allocate returned value of", error);
2) Port Allocation
port _allocate digunakan untuk mengciptakan sebuah port . Argumen pertama untuk.
port _allocate adalah task yang memiliki port , dalam kasus ini proses itu sendiri atau
task _selft().
port _t result;
kern_return_t error;
if ((error = port _allocate(task _self(), &result)) != KERN_SUCCESS) {
mach_error("PARENT: port _allocate returned value of ", error);
exit(1);
}
3) Port Deallocation
port _deallocate digunakan untuk melepaskan akses sebuah task ke sebuah port .
Jika task tersebut mempunyai kepemilikan dan receive right ke port , port _deallocate menghancurkan port dan menotifikasi (pada notify port ) semua task lain yang mempunyai