kernel machintosh bahasa
TRANSCRIPT
Mac OS X memberikan banyak manfaat kepada pengguna Macintosh dan pengembang
masyarakat. Manfaat ini termasuk peningkatan keandalan dan kinerja,
fitur jaringan ditingkatkan, antarmuka pemrograman sistem berbasis obyek, dan
peningkatan dukungan untuk standar industri.
Dalam menciptakan Mac OS X, Apple telah benar-benar kembali direkayasa inti Mac OS
sistem operasi. Membentuk dasar dari Mac OS X adalah kernel. Gambar 2-1
menggambarkan arsitektur Mac OS X.
Kernel menyediakan banyak perangkat tambahan untuk Mac OS X. Ini termasuk preemption,
perlindungan memori, meningkatkan kinerja, fasilitas jaringan ditingkatkan,
dukungan untuk kedua Macintosh (Extended dan Standard) dan non-Macintosh (UFS, ISO
9660) file sistem, API berorientasi obyek, dan banyak lagi. Dua fitur ini,
preemption dan perlindungan memori, menyebabkan lingkungan yang lebih kuat.
kernel Arsitektur
Dalam Mac OS 8 dan 9, aplikasi bekerja sama untuk berbagi waktu prosesor. Demikian pula, semua
aplikasi berbagi memori komputer di antara mereka. Mac OS 8 dan 9
multitaskingenvironments koperasi. Respon dari semua proses adalah
dikompromikan jika bahkan satu aplikasi tidak bekerja sama. Di sisi lain,
aplikasi real-time seperti multimedia harus yakin diprediksi,
waktu-kritis, perilaku.
Sebaliknya, Mac OS X adalah multitaskingenvironment preemptive. Dalam Mac OS X,
kernel menyediakan penegakan kerjasama, proses penjadwalan untuk berbagi waktu
(preemption). Ini mendukung perilaku real-time dalam aplikasi yang membutuhkan itu.
Dalam Mac OS X, proses biasanya tidak berbagi memori. Sebaliknya, pihak yang ditunjuk kernel
setiap processits memiliki ruang alamat, mengendalikan akses ke ruang alamat tersebut. ini
kontrol memastikan bahwa tidak ada aplikasi secara tidak sengaja dapat mengakses atau memodifikasi lain
memori aplikasi (perlindungan). Ukuran tidak menjadi masalah; dengan memori virtual
sistem termasuk dalam Mac OS X, setiap aplikasi memiliki akses ke sendiri 4 GB memori
ruang alamat.
Dilihat bersama-sama, semua aplikasi dikatakan berjalan di ruang pengguna, tapi ini tidak
menyiratkan bahwa mereka berbagi memori. Ruang pengguna hanyalah sebuah istilah untuk gabungan
ruang alamat dari semua aplikasi user-level. Kernel itu sendiri memiliki alamat sendiri
ruang, disebut ruang kernel. Dalam Mac OS X, ada aplikasi dapat memodifikasi memori
perangkat lunak sistem (kernel).
Meskipun proses pengguna tidak berbagi memori secara default seperti di Mac OS 8 dan 9,
komunikasi (dan bahkan berbagi memori) antara aplikasi masih mungkin.
Sebagai contoh, kernel menawarkan kaya set primitif untuk mengizinkan beberapa berbagi
informasi antar proses. Primitif ini termasuk shared library dan
kerangka kerja. Pesan Mach memberikan pendekatan lain, menyerahkan memori dari
satu proses ke proses lainnya. Tidak seperti Mac OS 8 dan 9, namun, berbagi memori tidak bisa
terjadi tanpa tindakan nyata oleh programmer.
Lapisan dasar dari Mac OS X terdiri dari beberapa arsitektur
komponen, seperti yang ditunjukkan pada Gambar 2-3. Secara bersama-sama, komponen ini membentuk
kernel environmentor sederhana, kernel.
penting
Perhatikan bahwa Mac OS X menggunakan kernel istilah yang agak
berbeda dari yang Anda dapat digunakan untuk melihat itu digunakan.
Kernel, dalam terminologi sistem operasi tradisional, adalah inti kecil
software yang memberikan fasilitas minimal yang diperlukan untuk melaksanakan
layanan sistem operasi tambahan. - Dari Desain dan Pelaksanaan
4.4 BSD Sistem Operasi, McKusick, Bostic, Karels, dan Quarterman, 1996
Sebaliknya, Mac OS X menggunakan kernel istilah untuk merujuk kepada segala sesuatu yang mengeksekusi dalam
ruang alamat kernel.
Mac OS X kernel mencakup Mach, BSD, I / O Kit, sistem file, dan jaringan
Mach
Mach mengelola sumber daya prosesor seperti penggunaan CPU dan memori, menangani
penjadwalan, memberikan perlindungan memory, dan menyediakan pesan-berpusat
infrastruktur ke seluruh lapisan sistem operasi. The Mach Komponen
memberikan
■ untyped IPCand RPC
■ dukungan untuk SMP
■ dukungan untuk real-timeservices
■ pager anexternal
■ arsitektur modular
■ meningkatkan kinerja
BSD
Di atas lapisan Mach, lapisan BSD memberikan "kepribadian OS" API dan jasa.
Lapisan BSD didasarkan pada kernel BSD, terutama FreeBSD. Komponen BSD
memberikan
■ file sistem
■ jaringan
■ kebijakan keamanan dasar seperti ID pengguna dan izin
■ kerangka sistem - mekanisme untuk mengekspor API untuk aplikasi
lapisan
■ model proses BSD, termasuk ID proses dan sinyal
■ API kernel FreeBSD
■ banyak POSIXAPIs
■ Pthreads (POSIX thread implementasi)
Jaringan
Mac OS X jaringan mengambil keuntungan dari kemampuan jaringan canggih BSD
untuk memberikan dukungan untuk fitur-fitur modern, seperti Network Address Translation
(NAT) dan firewall. Komponen jaringan menyediakan
■ 4.4BSD TCP / IP stack dan socket API
■ dukungan untuk kedua IP dan AppleTalk
■ multihoming
■ Routing
■ multicastsupport
■ Server tala
■ berbasis socket AppleTalk
■ Mac OS dukungan Klasik
■ berkarbonisasi Open Transport API
FILE SISTEM Mac OS X menyediakan dukungan untuk berbagai jenis file sistem, termasuk HFS,
HFS +, UFS, NFS, ISO 9660, dan lain-lain. Jenis default file sistem adalah HFS +; mac
Sepatu OS X (dan "akar") dari HFS +. Fitur canggih Mac OS X sistem berkas
mencakup ditingkatkan Virtual File System (VFS) desain. VFS menyediakan untuk berlapis
arsitektur (file sistem stackable). Sistem file komponen memberikan
■ UTF-8 (Unicode) dukungan
■ peningkatan kinerja
kernel Extensions
Mac OS X menyediakan mekanisme ekstensi kernel sebagai sarana yang memungkinkan dinamis
pemuatan potongan kode ke dalam kernel, tanpa perlu mengkompilasi ulang. ini
potongan kode yang dikenal umum sebagai plug-Insor, dalam kernel Mac OS X, seperti
kernel extensionsor kexts.
Karena kexts menyediakan baik modularitas dan loadability dinamis, mereka adalah
pilihan alami untuk layanan yang relatif mandiri yang membutuhkan akses ke kernel
antarmuka internal. Banyak komponen lingkungan kernel mendukung ini
mekanisme ekstensi, meskipun dengan cara yang berbeda.
Sebagai contoh, beberapa fitur jaringan baru melibatkan penggunaan jaringan
ekstensi kernel (NKEs). Kemampuan untuk secara dinamis menambahkan file-sistem baru
pelaksanaan didasarkan pada VFS kexts. Device driver dan keluarga perangkat di
I / O Kit diimplementasikan menggunakan kexts. Kexts membuat pengembangan lebih mudah bagi
pengembang menulis driver atau mereka menulis kode untuk mendukung format volume yang baru
atau jaringan protokol
“Extending the Kernel”
Mac OS X menyediakan
mekanisme ekstensi kernel sebagai sarana yang memungkinkan pembebanan dinamis dari kode ke
kernel, tanpa perlu mengkompilasi ulang atau relink. Karena ekstensi kernel ini
(Kexts) menyediakan baik modularitas dan loadability dinamis, mereka adalah alam
pilihan untuk setiap layanan yang relatif mandiri yang membutuhkan akses ke kernel internal yang
interface.
Karena kexts berjalan dalam modus supervisor di ruang alamat kernel, mereka juga
sulit untuk menulis dan debug dari modul user-level, dan harus sesuai dengan ketat
pedoman. Selanjutnya, sumber kernel yang kabel (secara permanen menetap di memori)
dan karena itu lebih mahal untuk digunakan dibandingkan sumber daya dalam tugas user-space setara
fungsionalitas.
Selain itu, meskipun perlindungan memori menjaga aplikasi dari menerjang
sistem, tidak ada perlindungan seperti berada di tempat di dalam kernel. Sebuah kernel berperilaku buruk
ekstensi di Mac OS X benar-benar dapat menyebabkan lebih banyak masalah daripada buruk berperilaku
aplikasi atau ekstensi bisa di Mac OS 8 atau 9.
Bugs di kexts dapat memiliki konsekuensi yang jauh lebih parah daripada bug dalam kode user-level.
Misalnya, kesalahan akses memori dalam aplikasi pengguna dapat, paling buruk, menyebabkan bahwa
aplikasi crash. Sebaliknya, kesalahan akses memori di kext menyebabkan sistem
panik, menabrak sistem operasi.
Akhirnya, untuk alasan keamanan, beberapa pelanggan membatasi atau tidak mengizinkan penggunaan
kexts pihak ketiga. Akibatnya, penggunaan kexts sangat tidak dianjurkan dalam situasi
di mana solusi user-level layak. Mac OS X menjamin bahwa benang pengguna yang
sama efisien sebagai thread kernel, sehingga efisiensi tidak harus menjadi masalah. kecuali Anda
aplikasi membutuhkan akses tingkat rendah untuk kernel interface atau aliran data, Anda
harus menggunakan tingkat yang lebih tinggi dari abstraksi ketika mengembangkan kode untuk Mac OS X.
Memperluas Kernel
Ketika Anda mencoba untuk menentukan apakah sebuah kode harus kext, defaultnya
Jawabannya umumnya tidak. Secara khusus, jika kode Anda merupakan perpanjangan sistem
Mac OS 8 atau 9, yang tidak berarti bahwa hal itu tentu harus menjadi perpanjangan kernel di
Mac OS X. Hanya ada beberapa alasan bagus untuk pengembang untuk menulis kernel
ekstensi:
■ Kode Anda perlu mengambil interupsi utama, yaitu, sesuatu dalam perangkat keras
perlu mengganggu CPU.
■ Klien utama kode Anda di dalam kernel, misalnya, sebuah perangkat block
yang klien utamanya adalah sistem file.
■ Sejumlah cukup besar aplikasi yang berjalan membutuhkan sumber daya yang Anda
kode menyediakan; misalnya, Anda telah menulis sebuah file sistem stack.
■ Kode Anda perlu multipleks antara beberapa aplikasi client yang membutuhkan
kecepatan tinggi, sinkronisasi baik, atau latency rendah.
Jika kode Anda tidak memenuhi salah satu kriteria di atas, Anda harus mempertimbangkan
mengembangkannya sebagai perpustakaan atau daemon user-level, atau menggunakan salah satu user-level
plug-in arsitektur (seperti komponen QuickTime atau Core Graphics
kerangka) alih-alih menulis ekstensi kernel.
Jika Anda menulis device driver atau kode untuk mendukung format volume yang baru atau
jaringan protokol, namun, kexts mungkin satu-satunya solusi yang layak.
Untungnya, sementara kexts mungkin lebih sulit untuk menulis daripada kode user-space,
beberapa alat dan prosedur yang tersedia untuk meningkatkan pembangunan dan
proses debugging. Lihat \\"Debugging kext Anda"//
Kext debugging dapat menjadi rumit. Sebelum Anda dapat men-debug kext, Anda harus terlebih dahulu
mengaktifkan kernel debugging, seperti Mac OS X biasanya tidak dikonfigurasi untuk mengizinkan
debugging kernel. Hanya account root dapat mengaktifkan kernel debugging, dan Anda
perlu reboot Mac OS X untuk perubahan berlaku.
Kernel debugging dilakukan menggunakan dua mesin Mac OS X, yang disebut
mesin pembangunan dan mesin target. Mesin ini harus terhubung melalui
koneksi handal jaringan pada subnet yang sama (atau dalam jaringan lokal tunggal).
Secara khusus, ada tidak boleh ada router IP intervensi atau perangkat lain yang bisa
membuat Ethernet berbasis hardware pengalamatan mustahil.
The kext terdaftar (dan KMODs diambil dan dijalankan) pada mesin target.
Debugger ini diluncurkan dan dijalankan pada mesin pembangunan. Anda juga dapat
membangun kembali kext Anda pada mesin pengembangan, setelah Anda memperbaiki kesalahan apapun yang Anda temukan.
Debugging harus dilakukan dalam mode ini karena Anda sementara harus menghentikan
kernel pada mesin target untuk menggunakan debugger. Bila Anda menghentikan
kernel, semua proses lain pada mesin berhenti. Namun, debugger berjalan
jarak jauh dapat terus berjalan dan dapat terus memeriksa (atau memodifikasi) kernel pada
mesin target.
Perhatikan bahwa bug di kexts dapat menyebabkan kernel sasaran untuk membekukan atau panik. Jika ini
terjadi, Anda mungkin tidak dapat melanjutkan debugging, bahkan lebih dari remote
koneksi; Anda harus reboot target dan mulai dari awal, pengaturan breakpoint hanya
sebelum kode di mana kext jatuh dan bekerja sangat hati-hati hingga kecelakaan
titik.
Kexts yang debug menggunakan GDB, debugger sumber-tingkat dengan baris perintah
antarmuka. Anda akan perlu bekerja pada aplikasi Terminal untuk menjalankan GDB. untuk
informasi rinci tentang cara menggunakan GDB, lihat dokumentasi yang disertakan dengan
Mac OS X. Anda juga dapat menggunakan helpcommand dari dalam GDB
Memperluas Kernel
Karena kext debugging terjadi di seperti tingkat rendah, Anda tidak akan dapat mengambil
keuntungan dari semua fitur GDB. Sebagai contoh:
■ Anda tidak dapat menggunakan GDB untuk memanggil fungsi atau metode dalam kext a.
■ Anda tidak dapat menggunakan GDB untuk debug mengganggu rutinitas.
Berhati-hatilah bahwa Anda tidak menghentikan kernel terlalu lama ketika Anda debug (untuk
Misalnya, ketika Anda mengatur breakpoints). Dalam waktu singkat, inkonsistensi internal yang dapat
muncul yang menyebabkan kernel target untuk panik atau membekukan, memaksa Anda untuk reboot target
mesin.
Mach
Layanan dasar dan primitif dari kernel Mac OS X didasarkan pada Mach
3.0. Apple telah diubah dan diperpanjang Mach untuk lebih memenuhi Mac OS X fungsional dan
tujuan kinerja.
Mach 3,0 pada awalnya dipahami sebagai sederhana, extensible, komunikasi
mikrokernel. Hal ini mampu berjalan sebagai kernel mandiri, dengan tradisional lainnya
layanan sistem operasi seperti I / O, sistem file, dan tumpukan jaringan berjalan
sebagai server mode pengguna.
Namun, di Mac OS X, Mach terkait dengan komponen kernel lainnya menjadi satu
ruang alamat kernel. Hal ini terutama untuk kinerja; itu jauh lebih cepat untuk membuat
panggilan langsung antara komponen terkait daripada untuk mengirim pesan atau melakukan RPC
antara tugas-tugas yang terpisah. Ini modular hasil struktur yang lebih kuat dan
sistem extensible dari kernel monolitik akan memungkinkan, tanpa kinerja
hukuman dari mikrokernel murni.
Jadi di Mac OS X, Mach tidak terutama hub komunikasi antara klien dan
server. Sebaliknya, nilai terdiri dari abstraksi yang, diperpanjang nya, dan yang
fleksibilitas. Secara khusus, Mach menyediakan
■ API berbasis obyek dengan saluran komunikasi (misalnya efor, port) sebagai objek
referensi
■ eksekusi sangat paralel, termasuk benang Terlebih Dahulu dijadwalkan dan
dukungan untuk SMP
■ kerangka penjadwalan yang fleksibel, dengan dukungan untuk penggunaan real-time
■ satu set lengkap IPCprimitives, termasuk pesan, RPC, sinkronisasi,
dan pemberitahuan
■ dukungan untuk ruang alamat virtual yang besar, bersama daerah memori, dan memori
benda didukung oleh toko persisten
22 Mach Kernel Abstractions
BAB 3
Mach
■ terbukti diperpanjang dan portabilitas, misalnya di set instruksi
arsitektur dan lingkungan di terdistribusi
■ keamanan dan manajemen sumber daya sebagai prinsip dasar desain; semua
sumber daya virtual
Mach Kernel Abstractions
Mach menyediakan sedikit saja dari abstraksi yang telah dirancang untuk menjadi sederhana
dan kuat. Abstraksi kernel utama adalah
■ Tasks.The unit kepemilikan sumber daya; setiap tugas terdiri dari alamat virtual
ruang, port kanan ruang nama, dan satu set benang.
■ Threads. Unit eksekusi CPU.
■ Alamat ruang. Dalam hubungannya dengan manajer memori, Mach mengimplementasikan
gagasan ruang alamat virtual jarang dan memori bersama.
■ benda Memory. Unit internal manajemen memori. benda memori
termasuk entri nama dan daerah; mereka adalah representasi dari
Data berpotensi-persistent yang dapat dipetakan ke ruang alamat.
■ Ports. Aman, saluran komunikasi simpleks, hanya dapat diakses melalui mengirim dan
menerima kemampuan (hak).
■ IPC. Antrian pesan, panggilan prosedur remote, pemberitahuan, Semaphore, dan
set kunci.
■ Waktu. Jam, timer, dan menunggu.
Pada tingkat perangkap, antarmuka untuk sebagian abstraksi Mach terdiri dari pesan terkirim
ke dan dari pelabuhan kernel yang mewakili benda-benda. Interface perangkap-tingkat (seperti
sebagai mach_msg_overwrite_trap) dan pesan format yang sendiri disarikan dalam
penggunaan normal oleh Mach Antarmuka Generator (MIG). MIG digunakan untuk mengkompilasi
interface prosedural untuk API berbasis pesan, berdasarkan deskripsi dari mereka
API.
Mach
Sebuah thread adalah entitas yang cukup ringan. Hal ini cukup murah untuk membuat dan memiliki rendah
overhead untuk beroperasi. Hal ini benar karena thread memiliki informasi negara kecil (kebanyakan
state register); tugasnya memiliki menanggung beban pengelolaan sumber daya. pada
mesin multiprosesor, adalah mungkin untuk beberapa benang dalam tugas untuk mengeksekusi dalam
paralel. Bahkan ketika paralelisme bukanlah tujuan, beberapa benang memiliki keuntungan
di setiap thread dapat menggunakan gaya pemrograman sinkron, daripada mencoba
pemrograman asynchronous dengan thread tunggal berusaha untuk menyediakan beberapa
layanan.
Ports, Port Rights, Port Sets, and Port Name Spaces
Sebuah thread adalah entitas komputasi dasar. Sebuah thread milik satu dan hanya satu
tugas yang mendefinisikan ruang alamat virtual. Untuk mempengaruhi struktur alamat
ruang atau untuk referensi semua sumber daya lain selain ruang alamat, benang harus
mengeksekusi instruksi perangkap khusus yang menyebabkan kernel untuk melakukan operasi pada
nama benang atau mengirim pesan ke beberapa agen atas nama benang. di
umum, perangkap ini memanipulasi sumber daya terkait dengan tugas yang berisi
benang. Permintaan dapat dibuat dari kernel untuk memanipulasi entitas: untuk membuat
mereka, menghapusnya, dan mempengaruhi negara mereka.
Mach menyediakan kerangka kerja yang fleksibel untuk kebijakan penjadwalan thread. versi awal
Mac OS X dukungan baik waktu-sharingand tetap prioritypolicies. A
prioritas timesharing thread dinaikkan dan diturunkan untuk menyeimbangkan sumber dayanya
Konsumsi terhadap benang time-sharing lainnya.
Benang tetap prioritas mengeksekusi untuk quantum waktu tertentu, dan kemudian diletakkan di
akhir antrian benang prioritas yang sama. Menetapkan prioritas thread tetap murah
tingkat kuantum hingga tak terbatas memungkinkan benang untuk menjalankan sampai blok, atau sampai itu
mendahului oleh thread prioritas yang lebih tinggi. Prioritas tinggi benang real-time
biasanya tetap prioritas.
Versi mendatang dari Mac OS X mungkin memiliki kebijakan penjadwalan tambahan, untuk lebih
dukungan real-time yang canggih.
Dengan pengecualian dari ruang alamat virtual tugas ini, semua sumber daya lainnya Mach adalah
diakses melalui tingkat tipuan yang dikenal sebagai port. Sebuah port adalah titik akhir dari
saluran komunikasi searah antara klien yang meminta layanan dan
server yang memberikan layanan. Jika balasan yang akan diberikan kepada layanan tersebut
permintaan, port kedua harus digunakan.
Dalam kebanyakan kasus, sumber daya yang diakses oleh port (yaitu, dinamai oleh itu) adalah
disebut sebagai objek. Kebanyakan benda disebut oleh port memiliki penerima tunggal dan
(berpotensi) beberapa pengirim. Artinya, ada tepat satu menerima pelabuhan, dan setidaknya
satu pengiriman pelabuhan, untuk objek khas seperti antrian pesan.
Layanan yang akan diberikan oleh suatu benda ditentukan oleh manajer yang menerima
permintaan yang dikirim ke objek. Ini mengikuti bahwa penerima untuk port yang terkait dengan
objek dari kernel adalah kernel dan penerima untuk port yang terkait dengan
benda-tugas yang diberikan adalah tugas menyediakan objek.
Untuk port yang nama benda-tugas yang diberikan, adalah mungkin untuk mengubah penerima
meminta untuk itu port tugas yang berbeda, misalnya dengan melewatkan port untuk tugas itu
dalam pesan. Sebuah tugas tunggal dapat memiliki beberapa port yang mengacu pada sumber daya yang
mendukung. Untuk itu, setiap entitas yang diberikan dapat memiliki beberapa port yang mewakilinya,
masing-masing menyiratkan set yang berbeda dari operasi diperbolehkan. Sebagai contoh, banyak benda
memiliki nama portand port kontrol (kadang-kadang disebut port istimewa). akses
ke port kontrol memungkinkan objek yang akan dimanipulasi; Akses ke port nama
hanya nama objek, misalnya, untuk kembali informasi tentang hal itu.
Tugas memiliki izin untuk port akses dengan cara tertentu (mengirim, menerima, mengirim-sekali);
ini disebut hak pelabuhan. Sebuah port dapat diakses hanya melalui hak. Port sering
digunakan untuk memberikan klien akses ke obyek dalam Mach. Memiliki hak untuk mengirim ke
pelabuhan IPC objek menunjukkan hak untuk memanipulasi objek dalam cara yang ditentukan. sebagai
, hak kepemilikan pelabuhan tersebut adalah mekanisme keamanan mendasar dalam Mach.
Memiliki hak untuk objek adalah memiliki kemampuan untuk mengakses atau memanipulasi objek.
Hak port dapat disalin dan dipindahkan antara tugas melalui IPC. Melakukan hal itu, pada dasarnya,
melewati kemampuan untuk beberapa objek atau server.
Jenis Port
Salah satu jenis objek disebut oleh port adalah satu set pelabuhan. Seperti namanya, port set
adalah seperangkat hak port yang dapat diperlakukan sebagai satu kesatuan ketika menerima pesan
atau acara dari salah satu anggota dari himpunan. Pelabuhan set mengizinkan satu thread untuk menunggu
sejumlah sumber pesan dan acara, misalnya dalam loop kerja.
Secara tradisional di Mach, saluran komunikasi dilambangkan dengan port selalu
antrian pesan. Namun, Mac OS X mendukung jenis tambahan
saluran komunikasi, dan jenis baru dari objek IPC juga diwakili oleh
port dan hak pelabuhan. Lihat bagian, "Tugas ke Task Komunikasi (IPC)"
(halaman 28), untuk rincian lebih lanjut tentang pesan dan jenis IPC lainnya.
Pelabuhan dan hak pelabuhan tidak memiliki nama systemwide yang memungkinkan port sewenang-wenang atau
hak untuk dimanipulasi secara langsung. Port dapat dimanipulasi oleh tugas hanya jika tugas
memiliki port tepat di ruang nama pelabuhan. Sebuah port benar ditentukan oleh nama port, sebuah
indeks integer menjadi 32-bit ruang nama pelabuhan. Setiap tugas telah terkait dengan itu satu
ruang nama pelabuhan.
Tugas memperoleh hak pelabuhan ketika tugas lain secara eksplisit memasukkan mereka ke dalam namanya
ruang, ketika mereka menerima hak dalam pesan, dengan menciptakan benda-benda yang mengembalikan hak
ke objek, dan melalui Mach panggilan untuk pelabuhan khusus tertentu (mach_thread_self, mach_task_self, and mach_reply_port.)
Memory ManagementAkses Runtime dilakukan melalui alamat virtual yang
mungkin tidak sesuai dengan lokasi di memori fisik pada saat awal
mencoba akses. Mach bertanggung jawab untuk mendamaikan akses yang diminta dalam maya
ruang dengan lokasi di memori fisik. Ia melakukannya melalui permintaan packing.
Halaman default menangani memori nonpersistent, dikenal sebagai memori anonim.
Memori Anonymous adalah nol-diinisialisasi, dan ia hanya ada selama hidup tugas.
The vnode pager peta file ke objek memori. Mach ekspor antarmuka untuk
benda memori untuk memungkinkan isinya akan disumbangkan oleh tugas-tugas user-mode. ini
antarmuka dikenal sebagai Memori Eksternal Manajemen Interface, atau Emmi.
Ekspor subsistem manajemen memori memori virtual menangani dikenal sebagai
entri memori bernama. Seperti kebanyakan sumber kernel, ini dilambangkan dengan port.
Memiliki bernama entri memori menangani memungkinkan pemiliknya untuk memetakan mendasari
objek memori virtual atau untuk lulus hak untuk memetakan objek yang mendasari kepada orang lain.
Pemetaan entri disebutkan dalam dua berbeda hasil tugas di jendela memori bersama
antara dua tugas, sehingga memberikan suatu metode yang fleksibel untuk mengembangkan penerbangan berbagi
memori.
Alamat rentang ruang memori virtual juga dapat diisi melalui langsung
Alokasi (menggunakan vm_allocate). Objek memori virtual mendasari
anonim dan didukung oleh pager default. Rentang berbagi sebuah ruang alamat
juga dapat diatur melalui warisan. Ketika tugas-tugas baru diciptakan, mereka kloning
dari orang tua. Kloning ini berkaitan dengan ruang alamat memori yang mendasari sebagai
baik. Bagian Dipetakan objek dapat diwariskan sebagai salinan, atau sebagai bersama, atau tidak sama
semua, berdasarkan atribut yang terkait dengan pemetaan. Mach praktek bentuk
copy tertunda dikenal sebagai copy-on-writeto mengoptimalkan kinerja diwariskan
salinan pada penciptaan tugas.
Alih-alih langsung menyalin jangkauan, optimasi copy-on-write adalah
dilakukan dengan berbagi dilindungi. Dua tugas memori yang akan disalin,
tapi dengan akses read-only. Saat salah satu tugas mencoba untuk memodifikasi sebagian dari
jangkauan, sebagian yang disalin pada saat itu. Ini evaluasi malas salinan memori
optimasi penting yang memungkinkan penyederhanaan di beberapa daerah, terutama
API messaging.
Salah satu bentuk lain dari berbagi disediakan oleh Mach, melalui ekspor bernama
daerah. Sebuah wilayah bernama adalah bentuk entri bernama, tapi bukannya didukung oleh
objek memori virtual, didukung oleh peta fragmen virtual. Fragmen ini mungkin
terus pemetaan ke berbagai obyek virtual memory. Hal ini mappable ke lainnya
peta virtual, memberikan cara mewarisi tidak hanya sekelompok memori virtual
benda tetapi juga hubungan pemetaan yang ada. Fitur ini menawarkan signifikan
optimasi di setup tugas, misalnya ketika berbagi wilayah kompleks
ruang alamat yang digunakan untuk perpustakaan
Task to Task Communication (IPC)Komunikasi antara tugas merupakan elemen penting dari filosofi Mach.
Mach mendukung struktur sistem client / server dimana tugas (klien) Akses
jasa dengan membuat permintaan dari tugas-tugas lain (server) melalui pesan dikirim melalui
saluran komunikasi.
Titik akhir dari saluran komunikasi ini di Mach disebut port, sementara
hak pelabuhan menunjukkan izin untuk menggunakan saluran. Bentuk-bentuk IPC disediakan oleh
Mach termasuk
■ antrian pesan
■ Semaphore
■ pemberitahuan
■ kunci set
■ panggilan prosedur jauh (RPC)
Jenis objek IPC dilambangkan dengan port menentukan operasi yang diijinkan
pada port itu, dan bagaimana (dan apakah) transfer data terjadi.
penting
Fasilitas IPC di Mac OS X berada dalam keadaan transisi. di
versi awal dari sistem, tidak semua jenis IPC mungkin
dilaksanakan.
Ada dua API Mach fundamental berbeda untuk manipulasi baku ports-
yang mach_ipcfamily dan mach_msgfamily tersebut. Dalam alasan, kedua keluarga mungkin
digunakan dengan benda IPC; Namun, mach_ipccalls lebih disukai dalam kode baru.
The mach_ipccalls menjaga informasi negara mana yang tepat untuk mendukung
gagasan transaksi. The mach_msgcalls yang didukung untuk kode warisan tapi
usang; mereka stateless.