1. PENDAHULUAN
Dalam komputasi, kernel merupakan komponen utama dari komputer, yang merupakan jembatan antara aplikasi dan pengelolaan data yang sebenar-benarnya dilakukan pada tingkat hardware. Tanggung jawab kernel termasuk sumber daya sistem pengelolaan (komunikasi hardware dan software komponen). Biasanya sebagai komponen dasar dari suatu sistem operasi, kernel dapat memberikan tingkat terendah lapisan abstraksi untuk sumber daya (terutama prosesor dan I / O device) bahkan perangkat lunak aplikasi harus kontol untuk melakukan fungsinya.
Seiring perkembangan sistem operasi yang berfungsi sebagai inti dari pemrograman komputer , Mach hadir dikembangkan dalam sebuah proyek di Carnegie Mellon University. Mach merupakan sebuah sistem operasi kernel yang dikembangkan untuk mendukung penelitian sistem operasi, terutama komputasi terdistribusi dan paralel. Mach kernel sering disebut-sebut sebagai salah satu contoh awal dari sebuah microkernel. Derivatif Mach adalah dasar dari kernel sistem operasi modern di Mac OS X dan GNU Hurd.
Proyek di Carnegie Mellon dari 1985-1994 yang berakhir dengan kegagalan dengan Mach 3.0. Mach dikembangkan sebagai piranti kernel di BSD versi UNIX, sehingga tidak ada sistem operasi baru harus dirancang pada waktu itu.Mach dan turunannya digunakan di sejumlah system operasi komersial, seperti NeXSTEP dan OPENSTEP, dan terutama Mac OS X menggunakan xnu kernel sistem operasi yang menggabungkan non-microkernel Mach sebagai komponen utamanya.
2. PEMBAHASAN
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 yang fungsionalitas 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 memungkinkan “Thread” untuk menjalankan.
- Thread adalah suatu unit eksekusi, ada dalam konteks ‘Task’ dan sumber daya ‘Task’.
- Port adalah antrian message untuk komunikasi antara task, task sendiri mengirim dan menerima hak masing-masing port.
- Message adalah objek data yang hanya dapat dikirim ke port.
Sistem IPC awalnya mengalami masalah kinerja, sehingga beberapa strategi dikembangkan untuk meminimalkan dampak. Seperti, pendahulunya Accent, Mach menggunakan mekanisme single physical shared memory untuk melewati message dari suatu program ke yang lain. Secara fisik menyalin message akan terlalu lambat sehingga Mach bergantung pada mesin Memory Mangement Unit (MMU). Sehingga data yang akan ditulis harus disalin secara fisik, proses yang dikenal sebagai copy-on-write. Pendekatan ini memiliki
beberapa keuntungan sebagai berikut :
- Meningkatkan fleksibilitas dalam manajemen memori untuk penggunaan programprogram.
- Peningkatan kinerja melalui message passing UNIX
2.2. Interproses Communcation
Sebagian besar sistem operasi komersial, seperti UNIX menyediakan komunikasi antara proses dan host (internet addres). Kernel Mach memberikan oriented-message yaitu kemampuan komunikasi berbasis interproses. Interposes Comunication (IPC) mendukung
bebagai interaksi, termasuk didalamnya Remote Procedure Calls (RPC), pemrograman berorientasi objek terdistribusi, streaming data, dan pengiriman data dalam jumlah yang sangat besar.
2.2.1. Port
Port adalah communication channel satu arah antara client yang meminta layanan dan sebuah server yang menyediakan layanan. Sebuah port dapat memiliki banyak pengirim (multiple senders) dan hanya mempunyai satu penerima (single receiver). Sebuah port berhubungan dengan message queue. Port juga memelihara sejumlah right (hak akses) kepadanya. Setiap entitas sistem (selain cakupan virtual memory) dinamai oleh sebuah port, sehingga port juga diciptakan secara implisit ketika entitas-entitas tersebut diciptakan. Pada gambar 2.2 menunjukkan struktur port secara umum. Port terdiri atas satu atau lebih send right dan satu receive right. Message queue yang berhubungan dengan port terdiri atas serangkaian urutan message. Message terdiri atas port tujuan (destination port), reply port reference, send right dan receive right yang dilewatkan ke message, dan out-of-line data
(virtual copy). Beberapa system call menyediakan port dengan fungsi sebagai berikut ini :
- Mengalokasikan sebuah port baru untuk tugas terntentu dan memberikan tugas akses semua port baru.
- Mengalokasiskan akses port.
- Memperoleh status port.
- Membuat port cadangan.

Gambar 2.2 Struktur port secara umum
Beberapa operasi mempengaruhi port itu sendiri, sebagian operasi mempengaruhi port right atau port name space yang berisi right tersebut, atau mempengaruhi message queue. Sebuah port diciptakan secara implisit ketika entitas sistem lainnya (threads, tasks,
processors, processor sets, hosts, atau devices) diciptakan. mach_reply_port juga menciptakan sebuah port. Sebuah port diciptakan secara eksplisit oleh port_name_space –> mach_port_allocate dan port_name_space [port_name]–>mach_port_allocate_name. Sebuah port tidak dapat dihancurkan secara eksplisit. Port hanya dihancurkan ketika receive right dihancurkan. Keberadaan port sangat penting untuk semua hal yang terlibat, seperti banyak task yang menggunakan sebuah port akan menunggu untuk dinotifikasi, melalui sebuah message ketika mereka mati. Notifikasi seperti ini diminta dengan opsi ke mach_msg, sebagaimana dengan port_name_space[port_name]–> mach_port_request_notification.
2.2.1.1. Port Right
Sebuah port hanya dapat diakses melalui sebuah port right. Port right adalah sebuah entitas yang mengindikasikan hak akses ke sebuah spesifik port dengan cara yang spesifik. Dalam konteks ini, terdapat tiga tipe port right, yaitu:
- Receive right, mengijinkan pemegang untuk menerima message dari port yang berhubungan.
- Send right, mengijinkan pemegang untuk mengirimkan message ke port yang berhubungan.
- Send-once right, mengijinkan pemegang untuk mengirimkan sebuah message ke port yang berhubungan. Send-once right lalu menghancurkan dirinya sendiri setelah message ini dikirimkan.
Port right dapat di-copy dan dipindah di antara sejumlah task melalui berbagai macam pilihan dalam pemanggilan mach_msg, dan juga oleh perintah eksplisit (explicit command). Bereda dengan perasi message, port right dapat dimanipulasi hanya sebagai anggota dari
sebuah port name space. Port right diciptakan secara implisit ketika entitas sistem lainnya diciptakan dan secara
eksplisit melalui explicit port operation. Kernel akan memberikan notifikasi ketika ada lebih send right untuk sebuah port. Penghancuran send-once right menghasilkan sebuah send-once notification yang dikirimkan ke port yang berkorespondensi. Port rights adalah suatu keamanan, pada suatu jalan yang independen pada pengidentifikasian ports. Hak akses kernel dilindungi oleh entities, client memanipulasi port rights hanya via port names, ketika mereka harus melakukannya. mach_msg adalah salah satu prinsip dimana hak dimanipulasi. Ports right dapat dipindahkan antar task (dihapus dari pengirim dan ditambahkan ke penerima) dalam message. Option flags pada suatu message akan menyebabkan mach_msg untuk membuat copy dari pengiriman right yang telah ada, atau untuk mengenerate, mengirim, atau suatu send-once right dari right yang diterima.Rights dapat pula dipaksa secara penuh untuk dikopi, atau dipindahkan oleh port_name_space [port_name]→ mach_port_extrac-t_right (sama dengan penerimaan target pada right message), Selain operasi message. Port rights dapat dimanipulasi hanya oleh member dari port name space.
Gambar 2.3. memperlihatkan urutan dari port rights, beberapa diantaranya terdiri dari port name space dan beberapa transit dalam message. Selain itu juga terlihat dari port name space pada port set. Suatu port right dirusak oleh instruksi port_name_space [port_name]→ mach_port_deallocate dan port_name_space [port_name]→ mach_port_destroy. Perusakkan dapat pula sebagai product dari port-name pada suatu manipulasi space, seperti port_name_space [port_name]→mach_port_mod_refs. Beberapa informasi status dapat diperoleh, diberikan suatu penerimaan right, dengan port_name_space [port_name]→ mach_port_get_receive_status.

Gambar 2.3. Struktur Port Right
Sistem dirawat dengan suatu (system-wide) penghitungan sejumlah pengiriman (sendonce) rights untuk tiap port (termasuk didalamnya transit pada message, tujuan dan balasan port rights). Penerima dari suatu port mungkin lebih tertarik jika tidak ada lagi pengiriman rights dari port. Notifikasi dari bentuk ini dapat diminta (port_name_space [port_name]→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-moresenders 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 tujuan dari 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 dalam
sebuah 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:
- MACH_PORT_NULL — Tidak ada port rightyang berhubungan.
- MACH_PORT_DEAD — Sebuah right yang dihubungkan dengan nama ini, tetapi port yang mana right mengacu telah dihancurkan.
- port right — Sebuah send-once right, send right, atau receive right untuk sebuah port.
- port set name —Sebuah nama yang bertindak seperti receive right, tetapi mengijinka penerimaan dari multiple ports.
2.2.1.3. Port Set
Sebuah port set adalah sekumpulan port yang dapat diperlakukan sebagai sebuah single unit ketika menerima sebuah message. Sebuah operasi receive dari mach_msg diijinkan melanggar sebuah port name yang menamai receive right, atau sebuah port set. Sebuah port
set berisi sekumpulan receive right. Ketika sebuah receive operation dilakukan dengan melanggar sebuah port set, sebuah message akan diterima pada salah satu port yang dipilih secara acak dalam port set. Setiap receive right dalam port set mempunyai nama sendiri, dan port set juga memiliki nama sendiri. Sebuah receive right yang melanggar port set melaporkan nama receive right tersebut yang port-nya menyediakan message. Receive right hanya dapat termasuk ke dalam satu port set. Sebuah task tidak dapat secara langsung menerima dari receive right yang berada di dalam port set.
Sebuah port set diciptakan dengan port_name_space [port_name]–>mach_port_allocate atau port_name_space [port_name] –>mach_port_allocate_name. Port set dihancurkan oleh port_name_space [port_name]–>mach_port_destroy atau port_name_space [port_name]–>mach_port_deallocate. Manipulasi port set dilakukan dengan port_name_space [port_name] mach_port_move_member. Pemanggilan ini dapat menambahkan sebuah anggota ke sebuah port set, menghapus anggota dari port set, atau memindahkannya dari satu port set ke port set yang lain. Keanggotaan dari sebuah port set dapat ditemukan dengan port_name_space [port_name]–>mach_port_get_set_status.
2.2.1.4. Manipulasi Antarmuka Port
Bagian ini menggambarkan antarmuka untuk menciptakan, merusak dan memanipulasi port, port dan set hak port. Jenis data ipc_space_t ini adalah task_t (dan dengan demikian mach_port_t a), yang memegang nama port yang terkait dengan port yang mewakili ruang IPC di kernel. Ruang IPC digunakan oleh kernel untuk mengelola nama port dan hak-hak yang tersedia untuk task. Ruang IPC tidak mendapatkan nama port sendiri. Sebaliknya nama port dari tugas mengandung ruang IPC digunakan untuk nama ruang IPC tugas (seperti yang ditunjukkan oleh fakta bahwa jenis ipc_space_t sebenarnya task_t). Ruang IPC tugas hanya
dapat diakses di luar kernel.
Berikut ini adalah jenis-jenis antarmuka port dalam Mach:
- Penciptaan Port, cara membuat port baru dan set port.
- PengahancuranPort, bagaimana untuk merusak port dan set port.
- Port Name, bagaimana query dan memanipulasi nama port.
- Port right, bagaimana bekerja dengan hak port.
- Port dan Tugas lainnya, bagaimana untuk memindahkan hak antara tugas.
- Receiving right, bagaimana bekerja dengan menerima hak.
- Port Set, bagaimana bekerja dengan set port.
- 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 kirimsekali 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 dapat kembali kembali kode mach_msg.
2.2.1.7. Nama Port
Pada mach_port_names fungsi mengembalikan informasi tentang ruang nama tugas itu port. Untuk setiap nama, juga mengembalikan apa jenis tugas memegang hak (informasi yang sama dikembalikan oleh mach_port_type.) Nama dan tipe array dialokasikan otomatis ketika message balasan diterima. Pengguna harus vm_deallocate mereka ketika data tidak lagi
diperlukan. Mach_port_names akan kembali nama nama-nama port, port set, dan nama ruang nama mati dalam tugas itu port, tanpa urutan tertentu dan dalam ncount jumlah nama kembali. Ini akan kembali dalam jenis jenis setiap nama yang sesuai, yang menunjukkan apa hak tugas memegang dengan nama itu. tcount harus sama dengan count. Para mach_port_type fungsi mengembalikan informasi tentang hak tugas untuk nama tertentu dalam ruang nama port. ptype dikembalikan adalah bitmask menunjukkan apa tugas memegang hak untuk port, set port atau nama mati. Bitmask ini terdiri dari bit berikut:
- MACH_PORT_TYPE_SEND :Nama menunjukkan suatu kirim tepat.
- MACH_PORT_TYPE_RECEIVE : Nama menunjukkan suatu menerima hak.
- MACH_PORT_TYPE_SEND_ONCE : Nama menunjukkan hak-sekali mengirim.
- MACH_PORT_TYPE_PORT_SET : Nama menunjukkan suatu set port.
- MACH_PORT_TYPE_DEAD_NAME : Nama adalah nama mati.
- MACH_PORT_TYPE_DNREQUEST : Permintaan mati-nama telah terdaftar untuk kanan.
- MACH_PORT_TYPE_MAREQUEST : Permintaan msg-diterima untuk kanan adalah tertunda.
- MACH_PORT_TYPE_COMPAT : Hak port diciptakan dalam modus kompatibilitas.
2.2.2. Message
Sebuah message terdiri atas header, message dikirim dan diterima. Task mengirim message ke port, message yang dikirim ke port akan disampaikan dengan tepat (message tidak mungkin hilang) dan diterima dalam urutan dimana message tersebut dikirim. Message berisi header yang berukuran tetap dan sejumlah variabel data dimasukan dalam header, header menggambarkan tujuan dan ukuran message.
2.2.2.1. Mach Message Calls
Untuk menggunakan panggilan mach_msg, kita dapat menyertakan file header mach/port.h and mach/message.h
- Fungsi
mach_msg_return_t mach_msg (
mach_msg_header_t *msg,
mach_msg_option_t option, mach_msg_size_t send_size,
mach_msg_size_t rcv_size, mach_port_t rcv_name,
mach_msg_timeout_t timeout, mach_port_t notify)
Fungsi mach_msg digunakan untuk mengirim dan menerima message. Mach message berisi data, yang dapat mencakup port right dan acuan ke memori. Msg adalah alamat dari buffer dalam alamat pemanggil. Buffer message harus sejajar pada panjang-batas kata. Message mempunyai opsi pilihan yang sedikit nilai, dikombinasikan dengan bitwise. Satu atau kedua MACH_SEND_MSG dan MACH_RCV_MSG harus digunakan. Pilihan lain bertindak sebagai pengubah. Saat mengirim message, send_size menentukan ukuran buffer message. Jika tidak nol harus diberikan. Ketika menerima message, rcv_size menentukan ukuran buffer message. Jika tidak nol harus diberikan. Ketika menerima message, rcv_name menentukan port atau set port. Jika tidak MACH_PORT_NULL harus diberikan. Bila menggunakan MACH_SEND_TIMEOUT dan pilihan MACH_RCV_TIMEOUT, timeout menentukan waktu dalam milidetik untuk menunggu sebelum menyerah. Jika tidak MACH_MSG_TIMEOUT_NONE harus diberikan. Bila menggunakan MACH_SEND_NOTIFY, MACH_SEND_CANCEL, dan pilihan MACH_RCV_NOTIFY, memberitahukan menentukan port yang digunakan untuk pemberitahuan. Jika tidak MACH_PORT_NULL harus diberikan.
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 menerima panggilan, 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 bersamasama,
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
flag message.
- mach_msg_size_t
Tipe data mach_msg_size_t adalah unsigned int digunakan untuk menyimpan ukuran
message.
- mach_msg_id_t
Tipe data mach_msg_id_t adalah integer_t biasanya digunakan untuk menyampaikan fungsi atau id operasi untuk penerima.
- mach_msg_header_t
Struktur ini adalah awal dari setiap message dalam sistem IPC Mach
2.2.2.3. Pertukaran Port Right
Port adalah hak dengan bilangan bulat positif. Kecuali untuk nilai MACH_PORT_NULL dicadangkan (0) 1 dan MACH_PORT_DEAD (~ 0), dengan 32-bit nama lengkap. Ketika kernel memilih nama untuk hak baru, ia bebas untuk memilih nama yang tidak digunakan.
Sebuah message dapat membawa port right; msgt_name (msgtl_name) mendiskripsikan jenis port dan mana port yang tepat harus diekstrak. Nilai MACH_PORT_NULL dan MACH_PORT_DEAD selalu valid di tempat port right. Dalam message terkirim, nilai
msgt_name berikut menunjukkan hak port:
- MACH_MSG_TYPE_MAKE_SEND
- MACH_MSG_TYPE_COPY_SEND
- MACH_MSG_TYPE_MOVE_SEND
- MACH_MSG_TYPE_MAKE_SEND_ONCE
- MACH_MSG_TYPE_MOVE_SEND_ONCE
- MACH_MSG_TYPE_MOVE_RECEIVE
- MACH_MSG_TYPE_PORT_SEND
- MACH_MSG_TYPE_PORT_SEND_ONCE
- MACH_MSG_TYPE_PORT_RECEIVE
2.2.2.4. Memory
Sebuah message dapat berisi alamat pengirim yang harus ditransfer sebagai bagian dari message. Message membawa salinan dari memor, tapi kernel menggunakan teknik VM untuk menyalin halaman, kecuali pengirim atau penerima memodifikasi data halaman fisik tetap.
Transfer out-of-line terjadi ketika deskripsi jenis data menentukan msgt_inline sebagai FALSE. Alamat dari memory (sebuah vm_offset_t atau vm_address_t) harus mengikuti deskripsi Message. Data out-of-line tidak memberikan kontribusi untuk ukuran message. Nama, ukuran dan nomor komlom deskripsi tipe jenis dan panjang dari out-of-line, bukan alamat di line. Ou-of-line memori sering memerlukan tipe yang panjang(mach_msg_type_long_t) karena field msgt_number terlalu kecil untuk
menggambarkan sebuah halaman 4K byte.
2.2.2.5. Message Send
Operasi antrian mengirim message ke port, message membawa salinan data pemanggil. Setelah mengirim, pemanggil datap dengan bebas memodifikasi buffer message atau out-ofline memory dan isi message tidak akan berubah. Jika antrian port sudah penuh, maka beberapa hal bisa terjadi. Dibawah ini merupakan tahapan memodifikasi message send yang tidak bisa diabaikan:
- MACH_SEND_TIMEOUT
- MACH_SEND_NOTIFY
- MACH_SEND_NOTIFY_IN_PROGRESS.
- MACH_SEND_INTERRUPT
- MACH_SEND_CANCEL
2.2.2.6. Message Receive
Operasi menerima messagean dari port, Task memperoleh right menerima thread dan dibawah message memori-of-line. rvc_name menetapkan sekumpulan port penerima. Sebuah message yang diterima dapat memuat right port dan out-of-line. Para msgh_local_port tidak menerima right thread , tindakan menerima message mengirim ke port tujuan. Msg_remote_port menerima, menjawab, dan membawa port dan memori jika MACH_MSGH_BITS_COMPLEX berada dalam msgh_bits. Kode-kode di bawah ini menandakan sebuah message diterima :
- MACH_RCV_INVALID_NAME : Yang ditentukan rcv_name tidak valid.
- MACH_RCV_IN_SET : Port tertentu adalah anggota dari sebuah set port.
- MACH_RCV_TIMED_OUT : Interval timeout berakhir.
- MACH_RCV_INTERRUPTED : Sebuah software interrupt terjadi.
- MACH_RCV_PORT_DIED : Penelepon kehilangan hak-hak yang ditentukan oleh rcv_name .
- MACH_RCV_PORT_CHANGED : rcv_name ditentukan hak menerima yang dipindah ke port diatur selama panggilan.
- MACH_RCV_TOO_LARGE : Bila menggunakan MACH_RCV_LARGE , dan message itu lebih besar dari rcv_size . Message dibiarkan antri, dan ukuran sebenarnya dikembalikan dalam msgh_size bidang buffer message
2.3. Kelebihan Mach
Sistem operasi Mach dirancang untuk menyediakan dasar kekurangan sistem operasi. Tujuanya adalah untuk merancang sebuah sistem operasi BSD yang kompatible. Di bawah ini merupakan keunggulan Mach :
- Support untuk arsitektur yang beragam, termasuk Multiprosesor dengan akses memori bersama : Uniform Memory Access (UMA), Nonuniform Memory Access (NUMA), dan Remote Memory Access (NORMA)
- Mampu untuk berbagai kecepatan intercomputer jaringan dari jaringan wide-area berkecepatan tinggi maupun jaringan local area.
- Struktur kernel yang sederhan dengan sejumlah abstraksi (abstraksi-abstraksi ini cukup memungkinkan sistem operasi lain untuk diimplementasikan di atas Mach).
- Operasi yang terdistribusi, menyediakan transparasi jaringan untuk klien dan berorientasi objek baik secara internal dan eksternal.
- Manajemen memori terpadu dan komunikasi interproses. Menyediakan komunikasi yang efesien dari sejumlah data serta komunikasi berbasis manajemen memori
- Mendukung sistem heterogen, untuk membuat Mach tersedia secara luas dandioperasikan 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.
- Portabilitas 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. Manfaat sistem 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.
3. KESIMPULAN
Dari penjelasan bab-bab di atas lahirnya sistem operasi Mach sangat mendukung penelitian sistem operasi terutama sistem operasi yang terdistribusi dan komputasi paralalel. Walaupun proyek Mach gagal pada pengembangan Mach 3.0 namun Mach menjadi microkernel sejati yang mana Mach dikembangkan sebagai kernel BSD versi UNIX, selain itu kernel Mach digunakan sebagai komponen utama oleh sejumlah sistem operasi komersial seperti NeXTSTEP , OPENSTEP , dan Mac OS X. Konsep yang dibangun pada Mach yaitu yang dirancang sebagai “drop-in” pengganti untuk kernel UNIX tradisional, Mach menggunakan Interposes Communication (IPC) yaitu seperti sebuah sistem yang memindahkan informasi atara dua program, sehingga semua fitur dirancang untuk menjadi platform yang netral dimana Mach dikembangkan dengan memperhatikan multiprosesing. Mach menggabungkan seluruh dukungan multiprosessing yang sangat fleksible, mulai dari sistem memori bersama antar prosesor. Mach dirancang untuk berjalan pada sistem komputer mulai dari satu sampai ribuan prosesor, selain itu Mach mudah di porting ke banyak arsitektur komputer yang bervarias. Tujuan utama Mach adalah menjadi sistem terdistrubusi yang mampu berfungsi pada hardware yang heterogen
Jika ingin makalah lengkapnya kirim email ke : dew1_07@yahoo.com…atau message ke FB : Ervin Kusuma Dewi insya Allah akan segera dikirim…(^_^)
