machportajratish (
mach vazifa o'zini(), // a vazifa havola qilish uchun o'zi MACH PORT TO'G'RI QABUL OLING, // the to'g'ri uchun bu port va port); // the nomi ning the port to'g'ri
Har biri vazifa shuningdek ega kirish uchun a bootstrapport , qaysi imkon beradi a vazifa uchun ro'yxatdan o'tish a port bu ega yaratilgan bilan a butun tizim bo'ylab bootstrapserver . Bir marta a port ega bootstrap serverida ro'yxatdan o'tgan bo'lsa , boshqa vazifalar ushbu registrdagi portni qidirishi va portga xabar yuborish huquqini olishi mumkin.
The navbat bog'langan bilan har biri port hisoblanadi cheklangan ichida hajmi va hisoblanadi dastlab bo'sh. Xabarlar portga yuborilganda, xabarlar navbatga ko'chiriladi. Barcha xabarlar bor yetkazib berildi ishonchli tarzda va bor the bir xil ustuvorlik. Mach buni kafolatlaydi bir nechta xabarlar dan the bir xil jo'natuvchi bor navbatda turdi ichida birinchi kelgan, birinchi chiqish ( FIFO ) tartibi, lekin mutlaq buyurtmani kafolatlamaydi. Masalan, ikkita jo'natuvchidan kelgan xabarlar istalgan tartibda navbatga qo'yilishi mumkin.
Mach xabarlar o'z ichiga oladi the ergashish ikki maydonlar:
Xabar haqidagi metamaʼlumotlarni oʻz ichiga olgan qatʼiy oʻlchamli xabar sarlavhasi, jumladan hajmi ning xabar kabi yaxshi manba sifatida va maqsad portlar. Odatda, jo'natuvchi ip javobni kutadi, shuning uchun manbaning port nomi qabul qiluvchi vazifaga o'tadi, u javob yuborishda " qaytish manzili " sifatida foydalanishi mumkin.
Ao'zgaruvchan o'lchamlitanasio'z ichiga olganma'lumotlar.
oddiy yoki murakkab bo'lishi mumkin . Oddiy xabar yadro tomonidan izohlanmagan oddiy, tuzilmagan foydalanuvchi ma'lumotlarini o'z ichiga oladi. Murakkab xabarda ma'lumotlarni o'z ichiga olgan xotira joylariga ko'rsatgichlar bo'lishi mumkin (ma'lum kabi " liniyadan tashqari " ma'lumotlar) yoki mumkin shuningdek bo'l ishlatilgan uchun uzatish port huquqlari boshqa vazifa. Chiziqdan tashqari ma'lumotlar ko'rsatkichlar bor ayniqsa foydali qachon a xabar kerak o'tish katta bo'laklar ning ma'lumotlar. A oddiy xabar bo'lardi talab qiladi nusxa ko'chirish va qadoqlash the ma'lumotlar ichida the xabar; chiziqdan tashqarida ma'lumotlar yuqish talab qiladi faqat ma'lumotlar saqlanadigan xotira joyiga ishora qiluvchi ko'rsatgich.
Mach msg() funksiyasi yuborish va qabul qilish uchun standart API hisoblanadi xabarlar. Funktsiya parametrlaridan birining qiymati — yoki MACH YUBORISH MSG yoki MACH RCV MSG - borligini bildiradi hisoblanadi a yuborish yoki qabul qilish operatsiya. Biz hozir tasvirlab bering Qanaqasiga bu hisoblanadi ishlatilgan qachon a mijoz vazifa yuboradi a oddiy xabar a ga server vazifasi. Ikkita port bor deb taxmin qiling - mijoz va server - mos ravishda mijoz va server vazifalari bilan bog'liq. 3.18-rasmdagi kodda sarlavha yaratish va serverga xabar yuborish mijoz vazifasi, shuningdek mijozdan yuborilgan xabarni qabul qiluvchi server vazifasi ko‘rsatilgan.
The mach msg() funktsiyasi qo'ng'iroq qiling hisoblanadi chaqirilgan tomonidan foydalanuvchi dasturlari uchun xabar uzatishni amalga oshirish. mach msg() keyin mach msg trap() funksiyasini ishga tushiradi hisoblanadi a tizimi qo'ng'iroq qiling uchun the Mach yadro. Ichida the yadro, mach msg trap() keyingi mach funktsiyasini chaqiradi msg trap() ni ustiga yozing , bu esa xabarning haqiqiy uzatilishini boshqaradi.
#include
tuzilishi xabar {
mach msg sarlavha t sarlavha; int ma'lumotlar;
} ;
mach porti t mijoz; mach port t server;
/* MijozKod */ strukturasi xabar xabar;
// qurish the sarlavha
message.header.msgh hajmi = sizeof(xabar); message.header.msgh masofaviy port = server; message.header.msgh mahalliy port = mijoz;