IPC (ارتباط میان پردازه ای) در لینوکس - قسمت دوم

1.3. سیستم های تبادل پیام


در بخش قبل نشان دادیم که چگونه پردازه های همکار در یک محیط حافظه اشتراکی می توانند با یکدیگر ارتباط برقرار کنند. این طرح نیازمند این است که پردازه ها یک ناحیه از حافظه را به اشتراک بگذارند و کد مورد نیاز برای دسترسی و تغییر حافظه اشتراکی باید به طور صریح توسط برنامه نویس نوشته شود. یک راه دیگر برای دستیابی به نتیجه ای مشابه، این است که سیستم عامل برای پردازه های همکار امکاناتی را فراهم کنند تا آن ها بتوانند از طریق امکان تبادل پیام با همدیگر ارتباط برقرار کنند.

تبادل پیام مکانیزمی را فراهم می کند که به پردازه ها اجازه برقراری ارتباط و همزمان کردن فعالیت هایشان را بدون به اشتراک گذاری فضای آدرسی مشابه می دهد. امکان تبادل پیام به طور خاص در محیط های توزیع شده که در آن پردازه های همکار بر روی کامپیوترهای گوناگون واقع شده اند، مفید می باشد.

مکانیزم تبادل پیام حداقل دو عملیات را فراهم می کند: (send (message و (recieve (message .

سایز پیامی که توسط یک پردازه فرستاده می شود می تواند ثابت یا متغیر باشد. پیاده سازی در سطح سیستم ، زمانی که تنها پیام های با سایز ثابت اجازه ارسال دارند، سر راست خواهد بود اما این محدودیت کار برنامه نویسی را سخت تر می کند. برعکس پیام های با سایز متغیر نیاز به پیاده سازی در سطح سیستم پیچده تری دارد اما کار برنامه نویسی ساده تر خواهد شد.

اگر پردازه های P و Q بخواهند با هم ارتباط برقرار کنند، باید پیام هایی را به یکدیگر بفرستند یا از یکدیگر دریافت کنند: [به همین دلیل] یک لینک ارتباطی باید بین آن ها وجود داشته باشد. در ادامه چندین روش برای پیاده سازی منطقی یک لینک و عملیات ()send()/receive آورده شده است:

  • ارتباط مستقیم و غیر مستقیم
  • ارتباط همزمان یا غیرهمزمان
  • بافرینگ اتوماتیک یا صریح

در ادامه به مسائل مرتبط با هر یک از موارد بالا نگاه می اندازیم.


1.3.1. نام دادن


پردازه هایی که می خواهند با یکدیگر ارتباط برقرار کنند، باید راهی برای ارجاع به همدیگر داشته باشند. پردازه ها می توانند از ارتباط مستقیم یا غیر مستقیم استفاده کنند.

تحت ارتباط مستقیم، هر پردازه ای که خواهان برقراری ارتباط است باید به طور صریح گیرنده یا فرستنده ارتباط را مشخص کند(نام گذاری کند). در این طرح، اعمال اولیه ()send و ()receive به صورت زیر تعریف می شوند:

  • (send(P, message : یک پیام را به پردازه P می فرستد.
  • (receive(Q, message : یک پیام را از پردازه Q دریافت می کند.

یک لینک ارتباطی در این طرح دارای ویژگی های زیر است:

  • یک لینک به طور اتوماتیک بین هر جفت پردازه ای که خوهان برقراری ارتباط هستند، برپا می شود. پردازه ها برای برقراری ارتباط تنها باید از شناسه های یکدیگر اطلاع داشته باشند.
  • هر لینک دقیقا در ارتباط با دو پردازه است.
  • بین هر جفت پردازه دقیقا یک لینک وجود خواهد داشت.

از اشکالات این طرح می توان به خاصیت پیمانه ای محدود آن اشاره کرد. با تغییر شناسه یک پردازه ناگزیر باید تمامی تعریفات پردازه های دیگر چک شود. تمامی ارجاعات به شناسه قدیم باید یافت شده و با شناسه جدید جایگزین شود. درحالت کلی چنین تکنیک هایی منجربه hard-coding می شود و [در نتیجه] باید شناسه ها به طور صریح تعیین شود. به همین جهت این تکنیک نسبت به تکنیک های غیر مستقیم، کمتر مورد پسند است.

در ارتباط غیر مسقیم ، ارسال و دریافت پیام از طریق صندوق های پستی یا پورت ها صورت می گیرد. یک صندوق پست را می توان در حالت انتزاعی به عنوان یک شی که پردازه ها می توانند در آن پیام بگذارند یا پیام ها را از آن حذف کنند، نمایش داد. هر صندوق پست یک شناسه یکتا دارد. یک پردازه می تواند با یک پردازه دیگر از طریق چندین صندوق پستی متفاوت ارتباط برقرار کند. به این نکته توجه داشته باشید که دو پردازه تنها زمانی قادر به برقراری ارتباط خواهند بود که یک صندوق پست به اشتراک گذاری شده داشته باشند. اعمال اولیه ()send و ()receive به صورت زیر تعریف می شوند:

  • (send(A, message : یک پیام را به صندوق پست A می فرستد.
  • (receive(A, message: یک پیام را از صندوق پست A دریافت می کند.

در این طرح، یک لینک ارتباطی دارای ویژگی های زیر است:

  • یک لینک تنها زمانی بین یک جفت پردازه برپا می شود که هر دوی آنها یک صندوق پستی اشتراکی داشته باشند.
  • یک لینک ممکن است در ارتباط با بیش از دو پردازه باشد.
  • بین هر جفت از پردازه هایی که با هم در ارتباط هستند ممکن است چندین لینک ارتباطی وجود داشته باشد، به طوری که هر لینک مربوط به یک صندوق پست است.

حال فرض کنید که پردازه های P1 ، P2 و P3 همگی صندوق پستی A را به اشتراک گذاشته اند. پردازه ی P1 یک پیام را به A می فرستد، در حالی که P2 و P3 هر دو دستور receive() را به اجرا در می آورند. کدام پردازه پیامی که به وسیله A فرستاده شده است را دریافت می کند؟ جواب این سوال بستگی به این دارد که کدام یک از روش های زیر را اتخاذ کرده باشیم:

  • به یک لینک اجازه بدهیم که حداکثر در ارتباط با دو پردازه باشد.
  • حداکثر به یک پردازه در یک زمان اجازه اجرای عملیات () receive را بدهیم.
  • به سیستم این اجازه را بدهیم که به طور دلخواه پردازه ی دریافت کننده پیام (یا P1 یا P2، اما نه هر دوی آنها) را انتخاب کند. سیستم ممکن است برای انتخاب پردازه ی دریافت کننده پیام یک الگوریتم را تعریف کند. (برای مثال round robin). سیستم ممکن است دریافت کننده را به ارسال کننده بشناساند.

صندوق پست ممکن است در مالکیت پردازه یا سیستم عامل باشد. اگر صندوق پست در مالکیت پردازه باشد (در این حالت صندوق پست بخشی از فضای آدرس پردازه است.)، می توانیم بین مالک (که تنها قادر به دریافت پیام از طریق صندوق پستی است) و کابر (که تنها قادر به ارسال پیام به صندوق پستی است) تمایز قائل شویم. از آنجا که هر صندوق پست یک مالک یکتا دارد، دیگر استباهی در رابطه با این که کدام پردازه باید پیام ارسالی به صندوق پستی را دریافت کند، رخ نمی دهد. وقتی پردازه ای که مالک صندوق پست است خاتمه می یابد، صندوق پست نیز محو می شود. هر پردازه ای که متعاقبا پیامی به این صندوق پست ارسال می کند باید نسبت به عدم وجود صندوق پست مطلع شود.

در مقایسه، صندوق پستی که در مالکیت سیستم عامل است به خودی خود وجود خواهد شد. این صندوق پست مستقل است و به پردازه ی خاصی ضمیمه نمی شود. برای اینکار سیستم عامل باید مکانیزمی را فراهم آورد که به پردازه اجازه کارهای زیر را بدهد:

  • یک صندوق پست جدید ایجاد کند.
  • از طریق صندوق پست پیام هایی را ارسال و دریافت کند.
  • یک صندوق پست را حذف کند.

پردازه ای که صندوق پست را ایجاد می کند به طور پیش فرض مالک آن صندوق پست است. در ابتدا مالک تنها پردازه ای است که می تواند از طریق این صندوق پستی پیامهایی را دریافت کند. با این حال مالکیت و حق دریافت پیام از طریق فراخوانی های سیستمی مناسب قابل واگذاری به دیگر پرداز ها است. با این کار می توان برای هر صندوق پست چندین گیرنده تعیین کرد.


نویسنده: رامین غلامی تقی زاده

منبع: انجمن تخصصی فناوری اطلاعات ایران

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد

#ارتباط_میان_پردازه_ای #ipc_در_لینوکس #سیستم_های_تبادل_پیام
عنوان
1 IPC (ارتباط میان پردازه ای) در لینوکس - قسمت اول رایگان
2 IPC (ارتباط میان پردازه ای) در لینوکس - قسمت دوم رایگان
3 IPC (ارتباط میان پردازه ای) در لینوکس - قسمت سوم رایگان
4 IPC (ارتباط میان پردازه ای) در لینوکس - قسمت چهارم رایگان
5 IPC (ارتباط میان پردازه ای) در لینوکس - قسمت پنجم رایگان
6 IPC (ارتباط میان پردازه ای) در لینوکس - قسمت ششم رایگان
7 IPC (ارتباط میان پردازه ای) در لینوکس - قسمت هفتم رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....