در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

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

مقدمه


در مقاله قبل به بررسی سیستم های تبادل پیام و روش های پیاده سازی منطقی عملیات ()send و ()receive پرداختیم. سپس در قسمت 1.3.1 چگونگی ارجاع پردازه ها به همدیگر شرح داده شد. در همین راستا، در این مقاله ابتدا به بررسی مسائل دیگری که حول پیاده سازی عملیات ()send و ()receive وجود دارد می پردازیم (1.3.2 و 1.3.3) و سپس در قسمت های 1.4 و 1.5 دو مورد از دیگر روش های IPC شرح داده می شود.


1.3.2.همزمانی


همانطور که گفته شد ارتباط بین پردازه ها به وسیله اعمال اولیه ()send و ()receive انجام می شود. گزینه های طراحی متفاوتی برای پیاده سازی هر کدام از اعمال اولیه وجود دارد. تبادل پیام ممکن است بلوکه شونده (همزمان) یا غیر بلوکه شونده (غیر همزمان) باشند.

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

• ارسال به صورت غیر بلوکه شونده: پردازه ارسال کننده پیام را فرستاده و به انجام عملیات خود ادامه می دهد.

• دریافت به صورت بلوکه شونده: دریافت کننده تا زمان مهیا بودن یک پیام بلوکه می شود.

• دریافت به صورت غیر بلوکه شونده: دریافت کننده یا یک پیام معتبر و یا یک پیام تهی را بازیابی می کند.


1.3.3. بافرینگ


در برقراری ارتباط چه به صورت مستقیم و چه به صورت غیر مستقیم، پیام های مبادله شده به وسیله پردازه های شرکت کننده در ارتباط درون یک صف موقتی نگه داری می شوند. همچین صف هایی به سه طریق قابل پیاده سازی هستند:

  • ظرفیت صفر : صف حداکثر دارای طولی برابر صفر خواهد بود، در نتیجه لینک ارتباطی نمی تواند دارای پیام های منتظر درون صف باشد. در این حالت ارسال کننده باید تا زمان دریافت پیام بلوکه شود.
  • ظرفیت محدود (کران دار) : صف دارای طول متناهی n است؛ در نتیجه حداکثر n پیام می توانند درون آن ساکن شوند. به هنگام ارسال یک پیام اگر صف پر نباشد، پیام ارسالی درون صف گذاشته می شود و ارسال-کننده بدون اینکه نیازی به انتظار داشته باشد می تواند به اجرای خود ادامه دهد. ظرفیت لینک متناهی است. اگر صف پر باشد، ارسال کننده باید تا زمان فراهم شدن فضا درون صف، بلوکه شود.
  • ظرفیت نامحدود (بی کران) : در این حالت طول صف نامتناهی است در نتیجه هر تعداد پیام قابل نگه داری درون آن است و ارسال کننده هیچ وقت بلوکه نمی شود.

گاهی اوقات به حالت ظرفیت صفر، سیستم پیام رسانی بدون بافر گفته می شود. دو حالت دیگر به عنوان سیستم هایی با بافرینگ اتوماتیک شناخته می شوند.


1.4. Pipes


پایپ به عنوان یک مجرا عمل می کند و در نتیجه به دو پردازه اجازه رد و بدل اطلاعات را می دهد. پایپ ها یکی از اولین امکانات IPC سیستم های یونیکس اولیه بودند. پایپ ها با وجود محدودیت هایی که دارند یکی از ساده ترین راه ها را برای دو پردازه که می خواهند با هم ارتباط داشته باشند، فراهم می کنند. در پیاده سازی یک پایپ چهار مسئله باید در نظر گرفته شود:

  1. آیا پایپ اجازه ارتباط دو طرفه را می دهد یا تنها ارتباط یکرطرفه در آن مجاز است؟
  2. اگر ارتباط دو طرفه امکان پذیر باشد، آیا این ارتباط half duplex است (یعنی در یک زمان داده ها تنها در یک جهت اجازه حرکت دارند) یا full duplex (یعنی داده ها در یک زمان اجازه حرکت در دو جهت را دارند) ؟
  3. آیا باید بین دو پردازه ای که درگیر ارتباط هستند، یک رابطه (مانند رابطه والد-فرزندی) وجود داشته باشد؟
  4. آیا پایپ ها از طریق شبکه می توانند ارتباط برقرار کنند یا اینکه پردازه های برقرار کننده ارتباط تنها باید بر روی یک ماشین باشند؟

در پایپ های اولیه یک پردازه داده ها را در یک طرف پایپ می نویسد و پردازه ی دیگر از طرف دیگر پایپ داده ها را می خواند. به عنوان نتیجه، پایپ های اولیه یک طرفه هستند. اگر نیاز به ارتباط دو طرفه باشد، باید از دو پایپ استفاده شود، به طوری که هر پایپ داده ها را در جهت های مختلف انتقال دهد. در سیستم های یونیکس پایپ های اولیه با استفاده از تابع ([]pipe(int fd ساخته می شوند. به این پایپ از طریق توصیفگرهای فایل [] int fd می توان دسترسی پیدا کرد. [fd[0 بخش خواندن و [fd[1 بخش نوشتن پایپ است. یونیکس با پایپ به عنوان یک فایل خاص برخورد می کند، در نتیجه می توانیم به پایپ ها از طریق فراخوانی های سیستمی () read و () write دسترسی پیدا کنیم.

به یک پایپ اولیه نمی توان خارج از پردازه ای که آن را ایجاد کرده است، دسترسی پیدا کرد. غالبا پردازه ی پدر یک پایپ را ایجاد کرده و از آن برای ارتباط با پردازه ی فرزندی که از طریق دستور () fork ایجاد می کند، استفاده می کند. همانطور که می دانید، پردازه فرزند فایل های باز را از پدر خود به ارث می برد. از آنجا که پایپ نوع خاصی از فایل است، پس فرزند پایپ را از پردازه پدر خود به ارث می برد. شکل زیر رابطه ی توصیف کننده فایل fd را با پردازه های پدر و فرزند نشان می دهد:

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


1.5.Named Pipes


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

named pipeها ابزار ارتباطی قدرتمندتری فراهم می کنند. در اینجا ارتباط می تواند دو جهته باشد و نیاز به وجود رابطه والد-فرزندی هم نیست. با برپا شدن یک named pipe چندین پردازه از آن می توانند برای ارتباط استفاده کنند. در حالت عادی یک named pipe چندین نویسنده دارد. به علاوه named pipeها حتی بعد از به پایان رسیدن پردازه های دخیل در ارتباط نیز وجود خواهند داشت.

در سیستم های یونیکس از named pipeها به عنوان FIFO یاد می شود. FIFOها در سیستم فایل به عنوان یک فایل عادی ظاهر می شوند. FIFO با استفاده از فراخوانی های سیستمی () mkfifo ساخته و بوسیله فراخوانی های سیستمی () open()، read و () write دستکاری می شوند. FIFO تا زمانی که به طور صریح از سیستم فایل حذف نشود، وجود خواهد داشت. با وجود اینکه FIFO اجازه ارتباط دو سویه را می دهد، اما تنها انتقال half-duplex مجاز می باشد. اگر داده ها نیاز به حرکت در هر دو جهت داشته باشند، معمولا از دو FIFO استفاده می شود. به علاوه پردازه های دخیل در ارتباط باید بر روی یک ماشین قرار داشته باشند.


در مقالات بعد به بررسی امکانات لینوکس برای پیاده سازی IPC می پردازیم. ItPro باشید!

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

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

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

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

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

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

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