In bu Bo'lim, biz kashf qiling to'rtta boshqacha IPC tizimlari. Biz birinchi qopqoq the Umumiy xotira uchun POSIX API va keyin Mach operatsiyasida xabar uzatishni muhokama qiling tizimi. Keyingisi, biz hozir Windows IPC , qaysi qiziq foydalanadi umumiy xotira ma'lum turdagi xabarlarni uzatish mexanizmi sifatida. Biz UNIX tizimlaridagi eng qadimgi IPC mexanizmlaridan biri bo'lgan quvurlar bilan yakunlaymiz .
POSIX Ulashgan Xotira
POSIX tizimlari uchun bir nechta IPC mexanizmlari mavjud , jumladan umumiy xotira va xabarlarni uzatish. Bu erda biz umumiy xotira uchun POSIX API-ni o'rganamiz .
POSIX umumiy xotirasi umumiy xotira hududini fayl bilan bog'laydigan xotira xaritali fayllar yordamida tashkil etiladi. A jarayon avval shm yordamida umumiy xotira ob'ektini yaratishi kerak open() tizimi chaqiruvi quyidagicha:
fd = shm ochiq (ism, O YARATISH | O RDWR, 0666);
The birinchi parametr belgilaydi the nomi ning the umumiy xotira ob'ekt. Ushbu umumiy xotiraga kirishni istagan jarayonlar ushbu nomdagi ob'ektga murojaat qilishlari kerak. The keyingi parametrlari belgilang bu the umumiy xotira ob'ekt hisoblanadi uchun bo'l yaratilgan _ agar bu qiladi emas hali mavjud ( O YARATISH ) va bu the ob'ekt hisoblanadi ochiq uchun o'qish va yozish ( O RDWR ). The oxirgi parametr o'rnatadi the faylga kirish ruxsatlar ning _ umumiy xotira ob'ekt. A omadli qo'ng'iroq qiling uchun shm open() qaytaradi a umumiy xotira obyekti uchun butun son fayl deskriptori.
Ob'ekt o'rnatilgandan so'ng, sozlash uchun ftruncate() funktsiyasidan foydalaniladi the hajmi ning the ob'ekt ichida bayt. The qo'ng'iroq qiling
ftruncate(fd, 4096);
to'plamlar the hajmi ning the ob'ekt uchun 4096 bayt.
Nihoyat, the mmap() funktsiyasi o'rnatadi a xotira xaritasi fayl ni o'z ichiga olgan umumiy xotira ob'ekt. Bu shuningdek qaytadi a ko'rsatgich uchun the xotira xaritasi umumiy xotira ob'ektiga kirish uchun ishlatiladigan fayl.
3.16-rasm va 3.17-rasmda ko'rsatilgan dasturlar ishlab chiqaruvchidan foydalanadi - iste'molchi model ichida amalga oshirish birgalikda xotira. The ishlab chiqaruvchi o'rnatadi umumiy xotira ob'ekt va yozadi uchun birgalikda xotira, va the iste'molchi umumiy xotiradan o'qiydi.
#o'z ichiga oladi < stdio.h > #include < stdlib.h > #include < string.h > #include < fcntl.h > #include < sys/shm.h > #include < sys/stat.h >
#o'z ichiga oladi < sys/mman.h >
int asosiy()
{
/* the hajmi (in bayt) ning birgalikda xotira ob'ekt */ const int SIZE = 4096;
/* nomi ning the birgalikda xotira ob'ekt */ const char *ism = "OS";
/* torlar yozilgan uchun birgalikda xotira */ const char *xabar 0 = "Salom";
const char *xabar 1 = "Dunyo!";
/* birgalikda xotira fayl tavsiflovchi */ int fd;
/* ko'rsatgich uchun birgalikda xotira obekt */ belgi *ptr;
/* yaratmoq the birgalikda xotira ob'ekt */
fd = shm ochiq (ism, O YARATISH | O RDWR, 0666);
/* sozlash the hajmi ning the birgalikda xotira ob'ekt */
Dostları ilə paylaş: |