منبع اصلی نوشتار زیر در این لینک قرار دارد

ارتباط میان فرایند ها در لینوکس

همانطور که میدانید در سیستم عامل لینوکس راههای کوناگونی برای ارتباط میان فرایند ها وجود دارد. از جمله pipe ، shared memory ، massage queue ، signalدر این دستور کار ما از روش shared memory استفاده کرده ایم.

Shared memory:

سه روش متفاوت در اینجا برای بوجود اوردن یک سگمنت از مموری و به اشتراک گذاشتن ان در فضای ادرس فرایند های مختلف وجود دارد.
این سه روش عبارتند از :

۱.POSIX shared Memory Operations

۲.POSIX Message Queues

۳.System V Shared Memory Function

روش اول را توضیح میدهیم:

فضای ادرس یک محدوده ای از مکان حافظه است که پردازه ها می توانند بدون هیچ خطایی به ان دسترسی داشته باشن. پایه و اساس روش shared memory تابع mmap است. در این روش از این تابع برای به اشتراک گذاشتن سگمنت ها استاده میکنیم.

توابعی که در این روش استفاده میشود را در جدول زیر مشاهده میکنید.

نام تابع هدف و عملکرد آن
Mmap(2) یک شی از حافظه را در یک فضای ادرس مپ میکند
shm_open(2) ایجاد دسترسی به shared memory
shm_unlink(2) وقتی که هیچ ارجاعی به shared memory نیست ان را از بین می برد.

حال برنامه ها را مانند زیر در ادیتور اوبونتوی خود مینویسیم .
در برنامه ی اول برای ارسال اعداد از mmap استفاده کردیم :

13

در برنامه دوم باید سه عدد دریافتی را ضرب کرده و حاصلضرب را به همراه ماکزیمم به برنامه سوم بفرستیم.
به صورت زیر و با استفاده از کد shm- open از حافظه برداشت میکنیمتوجه داشته باشید که قبلا سگمنی با کد زیر که همان حافظه ی به اشتراک گذاری هست را ساخته ایم :

14

 

کد برنامه ی دوم :

15

 

حال برنامه ی سوم :
دو عدد دریافتی را از هم کسر کرده و به همان اندازه کاراکتر # قرار می دهیم :
و

16

 

و حالا برنامه ی چهارم : اطلاعات را دریافت کرده و # ها را روی صفحه نمایش دهد :

17

 

منابع :

۲۴۷۸-http://menehune.opt.wfu.edu/Kokua/More_SGI

https://www.youtube.com/watch?v=IFRbX8u6lB0