ارتباط بین پردازشی چیست؟ – توضیح IPC در سیستم عامل به زبان ساده
«ارتباط بین پردازشی» (Inter Process Communication | IPC) یکی از مکانیزمهای کلیدی استفاده شده توسط سیستمهای عامل است که برای برقراری ارتباط بین فرایندهای در حال پردازش بهکار برده میشود. ارتباط بین پردازشی یا به صورت مختصر IPC به فرایندها کمک میکند که بدون اینکه مجبور باشند از دستورات یا رابطهای سطح کاربر استفاده کنند با یکدیگر ارتباط برقرار کنند. این مکانیزم به بخشهای مختلف برنامه درحال اجرا کمک میکند که بدون تعارض و تداخل با یکدیگر به دادهها و فایلهای به اشتراک گذاشته شده دسترسی داشته باشند. پیامهای IPC بین دو یا چند فرایند مختلف مبادله میشوند. این فرایندهای میتوانند درون کامپیوتر یکسان یا چند کامپیوتر متفاوت قرار داشته باشند.
در این مطلب از مجله فرادرس درباره ارتباط بین پردازشی و دلیل استفاده از آن بحث کردهایم. سپس رایجترین و مهمترین رویکردهای مختلف را درباره پیادهسازی این مکانیز بررسی کردیم. از توضیح مربوط به ماهیت ارتباط بین پردازشی شروع کرده و تا دلایل مختلف استفاده از ساختار IPC را بیان کردهایم.
ارتباط بین پردازشی چیست؟
ارتباط بین پردازشی، فرایندی است که به دیگر فرایندهای سیستمهای کامیپوتری برای به اشتراکگذاری اطلاعات با یکدیگر کمک میکند. IPC به برنامههای مختلف این امکان را میدهد که به صورت موازی با یکدیگر اجرا شده، داده به اشتراک گذاشته و با هم ارتباط برقرار کنند. به دو دلیل مهم ارتباط بین پردازشی از اهمیت برخوردار است.
- دلیل اول این است که سرعت اجرای برنامهها را افزایش میدهد.
- دلیل دوم هم اینکه از اجرای صحیح و منظم برنامهها اطمینان حاصل میکند.
چرا وجود ارتباط بین پردازشی ضروری است؟
IPC به برنامههای مختلف کمک میکند که در پشت صحنه - خارج از دید و دخالت کاربر - با یکدیگر ارتباط برقرار کنند. ضرورت وجود این مکانیزم دلایلی دارد که در فهرست زیر بیان کردهایم.
- IPC سرعت اجرای وظایف را افزایش میدهد.
- تضمین میکند که وظایف به درستی و به همان ترتیب اجرا شده، کار کنند.
- وجود IPC برای عملکرد کارآمد سیستم عامل ضروری است.
- سیستم عاملها از IPC برای تبادل داده با ابزار و عناصری استفاده میکنند که برای تعامل با کاربر لازم است. برای مثال میتوان به موس، صفحه کلید و «رابط کاربری گرافیکی» (Graphical User Interface | GUI) اشاره کرد.
- علاوه بر موارد گفته شده بالا، IPC به سیستم عامل کمک میکند که چند برنامه را به صورت همزمان اجرا کند. برای مثال، سیستم عامل ممکن است که از IPC برای فراهم کردن اطلاعات درباره وضعیت پنجرههای باز در صفحه نمایش برای «سامانه پنجرهبندی» (Windowing System) استفاده کند.
مقایسه ارتباط بین پردازشی با مثالی از دنیای واقعی
وقتی که از سیستمی بر اساس کار تیمی استفاده میکنیم، ضروری است که بتوانیم با همه اعضای تیم در شرکت ارتباط برقرار کنیم. بعضی از اعضای شرکت عضو بخشهای تجاری، فروش یا فنی هستند. ارتباط برقرار کردن با همه اعضا باعث افزایش سرعت کار میشود. در نتیجه کارآمدی کل بدنه شرکت ارتقا پیدا میکند. در سیستم عامل هم به همین صورت کارها به پیش میرود. امکان مدیریت چندین درخواست کاربر به صورت همزمان با یکدیگر توسط هر برنامه باعث ارتقا عملکرد کلی سیستم میشود.
آموزش مهندسی نرم افزار
به مجموعهای از فعالیتها و روشهایی که با هدف توسعه، طراحی، تست، نگهداری و بهبود نرمافزارها بهکار برده میشوند، مهندسی نرمافزار گفته میشود. این حوزه شامل فرایندهای مختلفی مانند مهندسی و طراحی نرمافزار، توسعه وکدنویسی نرمافزار، آزمون نرمافزار و مدیریت پروژه است. طراحی و توسعه ارتباط بین پردازشی برای برنامههای هدف هم یکی از تخصصهای مربوط به رشته مهندسی نرمافزار است. دانشجویان و افرادی که علاقهمند به کار در این حوزه هستند باید اطلاعات و مهارتهای مربوط به مهندسی نرمافزار را فرا بگیرند.
گروه آموزشی فرادرس تلاش کرده که با کمک مطالب مربوط به بخش مجله و فیلمهای آموزشی وبسایت فرادرس، بهترین آموزشها را در هر زمینه رایجی در اختیار علاقهمندان قراردهد. مهندسی نرمافزار هم یکی از زمینههای روبه پیشرفت و بسیار پُرطرفدار در بین قشر دانشجویان مهندسی کامپیوتر است. به همین دلیل در این زمینه هم فیلمهای آموزشی بسیار با کیفیتی تولید و پخش شدهاند. در ادامه چند مورد از این فیلمها را معرفی کردهایم. در صورت تمایل با کلیک بر روی تصویر بالا به صفحه اصلی این مجموعه آموزشی رفته و از فیلمهای بیشتر و متنوعتری نیز دیدن کنید.
- فیلم رایگان راهنمای جامع شغلی مهندسی نرم افزار درباره وظایف، فرصت ها و بازار کار با فرادرس
- فیلم آموزش مهندسی نرم افزار مربوط به مرور و حل سوالات آزمون های استخدامی در فرادرس
- فیلم آموزش محاسبات کوانتومی درباره مفاهیم کلیدی در فرادرس
- فیلم آموزش سیستم های توزیع شده با فرادرس
همزمان سازی ارتباط بین پردازشی
«همزمانسازی» (Synchronization) در IPC فرایندی است که برای اطمینان از هماهنگی و عدم دخالت چند فرایند مختلف در کار یکدیگر اجرا میشود. زیرا تقریبا همیشه چند فرایند جدا از هم به صورت همزمان توسط سیستم عامل پردازش میشوند. به دلیل توانایی فرایندها در اشتراک گذاری دادهها و منابع سیستم با یکدیگر، این مسئله اهمیت بسیار زیادی دارد. و اگر که فرایندها به صورت «همزمان شده» (Synchronized) با یکدیگر نباشند شاید باعث نوشتن داده برروی اطلاعات یکدیگر یا بروز سایر مشکلات شوند.
برای همزمان کردن فرایندها با هم چندین سازوکار مختلف وجود دارند. در فهرست زیر این موارد را بیان کردهایم.
- «انحصار متقابل» (Mutual exclusion): این سازوکار به نوعی طراحی شده تا از دسترسی فقط یک فرایند به منبع اشتراک گذاشته شده در هر واحد زمانی مطمئن شود. به طور کلی این روش با استفاده از «قفل» (Lock) پیادهسازی میشود. توجه داشته باشید که «قفل» به ساختار دادهای میگویند که در دسترس بودن یا نبودن هر منبع را نشان میدهد.
- «متغیرهای شرطی» (Condition variables): اینها متغیرهایی هستند که میتوانند برای انتظار تا زمان رویدادن شرایط خاصی صبر کنند. برای مثال، فرایندی میتواند قبل از استفاده منبع اشتراکی و تا زمان آزاد شدن آن صبر کند.
- «موانع» (Barriers): موانع به نقاط همزمانسازی گفته میشود که همه فرایندها قبل از مجاز به اجرا شدن باید به آن برسند. هر فرایندی که زودتر به این نقطه رسید توقف کرده و منتظر میشود تا باقی فرایندها هم به این مانع برسند. استفاده از این مانع تضمین میکند که تا زمانی که همه فرایندهای وظیفه خاصی را به انجام نرسانده باشند، هیچ فرایندی سرخود و جلوتر از بقیه حرکت نکند. در نتیجه قبل از اینکه فاز دوم اجرای برنامهها شروع شود، همه فرایندها به صورت همزمان فاز فعلی را به پایان میرسانند.
- «سمافور» (Semaphore): سمافورها نوعی از متغیرها هستند که میتوانند تعداد دفعاتی که منبع اشتراکی استفاده شده را بشمارند. این مسئله برای وقتی مفید است که باید از اجرای بیش از حد منبعی در دوره زمانی مجاز، جلوگیری شود.
IPC هم از همزمانی استفاده میکند. از آنجا که خود سازوکار IPC در حوزههای مختلفی به کار برده میشود، در هر کدام از آن حوزهها هم کاربرد خاصی دارد. به همین دلیل برای نمایش مثال، چند مورد از کاربرهای مختلف همزمانی در IPC را به کمک فهرست زیر ارائه کردهایم.
- پایگاه داده: در پایگاههای داده ممکن است که چندین فرایند مختلف به صورت همزمان نیاز به استفاده از داده یکسانی داشته باشند. تکنیک همزمانی با هدف اطمینان از این بهکار برده میشود که در هر واحد زمانی فقط یک فرایند قادر به نوشتن بر روی دادهها باشد و اینکه سایر فرایندها در زمان نوشته شدن داده آن را نخوانند.
- سرور اینترنت یا شبکه: در چنین سرورهایی ممکن است که چندین فرایند مختلف نیاز به مدیریت درخواستهای رسیده شده از طرف کاربران داشته باشند. «همزمانی» (Synchronization) برای اطمینان از این استفاده میشود که در هر لحظه فقط یک فرایند به یک درخواست رسیدگی کند و دیگر فرایندها در درخواست مورد نظر دخالت نکنند.
- در سیستمهای توزیع شده: در سیستمهای توزیع شده ممکن است که چندین فرایند مجزا از هم به صورت همزمان با یکدیگر ارتباط برقرار کنند. در این سیستمها از همزمانی برای اطمینان از این استفاده میشود که پیامها به درستی و با ترتیب، ارسال و دریافت شوند. در ضمن، همزمانی از اجرای کار توسط آن فرایندها و بر اساس دادههای تاریخ گذشته نیز جلوگیری میکند.
رویکردهای مختلف پیاده سازی ارتباط بین پردازشی
برای پیادهسازی IPC روشهای مختلفی وجود دارند. بعضی وقتها حتی اپلکیشنها از چند رویکرد مختلف برای راه اندازی مکانیزم IPC استفاده میکنند. در فهرست زیر، روشهای رایج راهاندازی IPC را نامبردهایم.
- «پایپ» (Pipe)
- «حافظه اشتراکی» (Shared Memory)
- «ارسال پیام» (Message Passing)
- «صفهای پیام» (Message Queues)
- «ارتباط مستقیم» (Direct Communication)
- «ارتباط غیرمستقیم» (Indirect Communication)
- «اولین ورودی، اولین خروجی» (FIFO)
مبحث IPC یکی از مباحث کیلدی برای مدیریت نرمافزارها توسط سیستم عامل است. این مسئله مخصوصا در سیستم عاملهای مدرن حیاتی است. زیرا این نرمافزارهای اصلی به صورت همزمان و به دلیل در دسترس بودن سختافزارهای قدرتمند باید تعداد زیادی از فرایندها را مدیریت کنند. برای اینکه با سیستم عاملها به طرز بسیار بهتری آشنا شوید، پیشنهاد میکنیم که فیلم آموزش سیستم عامل – مرور و تست کنکور ارشد را از فرادرس مشاهده کنید. به منظور کمک به مخاطبان فرادرس، لینک مربوط به این فیلم را در پایین نیز قرار دادهایم.
در ادامه مطلب، هر کدام از روشهای بالا را با بیان جزئیات کاملتر توضیح دادهایم.
پایپ
«پایپ» (Pipe) یکی از روشهای پیادهسازی ارتباط بین پردازشی است. در این قسمت از مطلب، تمام توضیحات مربوط به این روش را در فهرست زیر بیان کردهایم.
- Pipe-ها نوع سادهای از حافظه اشتراکی هستند که به دو فرایند جدا از هم اجازه میدهد با یکدیگر ارتباط برقرار کنند.
- Pipe نوعی از روش «ارتباط دوطرفه غیرهمزمان» (Half Duplex) یا ارتباط فقط یکطرفه است که بین دو فرایند در ارتباط با هم برای پیادهسازی IPC استفاده میشود.
- یکی از فرایندها داده را برای ارسال به Pipe مینویسد و فرایند دیگر دادهها را از Pipe میخواند.
- استفاده از این ابزار مانند حالت پر کردن سطل با شیر آب است. عمل پُرکردن آب، فرایند همان نوشتن در Pipe است که توسط شیر آب انجام میشود و فرایند جمع آوری آب توسط سطل، همان عمل خواندن به صورت بازیابی اطلاعات از پایپ است.
- بسته به اینکه به Pipe نام یکتا اختصاص داده شده باشد یا نه میتوان از آن به صورت ناشناس و نام گذاری شده استفاده کرد.
- «پایپهای نامگذاری شده» (Named Pipes) نوعی از پایپ هستند که برای خود، نام یکتا دارند. با استفاده از چندین فرایند مختلف میتوان به این پایپها دسترسی داشت. پایپهای نامگذاری شده را میتوان برای برقراری ارتباط بین فرایندهایی بهکار برد که بر روی هاست یکسان قرار دارند و همچنین فرایندهایی که از چندین هاست مختلف در شبکه کامپیوتری یکسانی با هم ارتباط برقرار میکنند.
- از طرف دیگر، «پایپهای ناشناس» (Anonymous Pipes)، پایتهایی هستند که برای برقراری ارتباط بین فرایند والد و فرایندهای فرزند متعلق به خود بهکار برده میشوند. پایپهای ناشناس معمولا برای برقراری ارتباط یک طرفه بین فرایندها به کار برده میشوند. از آنجا که این نوع از پایپها دارای نام یکتا نیستند، فقط توسط فرایندهایی که آنها را ایجاد کردهاند، قابل دسترسی هستند.
در بخش زیر، برای پیادهسازی ارتباط بین پردازشی با استفاده از Pipe، شبهه کد سادهای را ارائه دادهایم. با کمک این شبه کد میتوان در زبانهای برنامه نویسی مختلف اقدام به پیادهسازی Pipe کرد.
- شروع
- در ابتدا هر پیام را در آرایه کاراکتری مانند char *msg=”Hello world” ذخیره میکنیم.
- آرایه کاراکتری دیگری را نیز تعریف میکنیم.
- با استفاده از تابع سیستمی pipe() اقدام به ایجاد Pipe میکنیم.
- با استفاده از تابع سیستمی fork() فرایند دیگری را ایجاد میکنیم.
- از تابع سیستمی fork() برای نوشتن پیام از فرایندی به فرایند دیگر، در فرایند پدر استفاده میکنیم.
- در فرایند فرزند، پیام رسیده شده را نمایش میدهیم.
- پایان
حافظه اشتراکی
«حافظه اشتراکی» (Shared Memory) یکی از روشهای پیادهسازی ارتباط بین پردازشی است. در این قسمت از مطلب تمام توضیحات مربوط به این روش را در فهرست زیر بیان کردهایم.
- حافظه اشتراکی به ناحیه خاصی از حافظه گفته میشود که قابل دسترسی برای چندین فرایند مختلف است. وجود این ناحیه به فرایندها کمک میکند که از طریق نوشتن و خواندن اطلاعات در بخش حافظه اشتراکی بین فرایندها با یکدیگر ارتباط برقرار کنند.
- حافظه اشتراکی روشی بسیار سریع و کارآمد است که فرایندها میتوانند برای برقراری ارتباط با یکدیگر بهکار ببرند. اما اگر فرایندها به دقت با یکدیگر همگامسازی نشده باشند، استفاده از این حافظه مشکل میشود.
دو نوع اصلی از حافظه اشتراکی وجود دارند که در پایین به صورت شفاف توضیح داده شدهاند.
- «حافظه اشتراکی ناشناس» (Anonymous Shared Memory): حافظه اشتراکی ناشناس را نمیتوان با هیچ فایل یا اشیاء سیستمی تجمیع کرد. این حافظه توسط سیستم عامل ایجاد شده و تنها توسط فرایندهای سازنده خودش در دسترس است.
- «حافظه اشتراکی نگاشت شده» (Mapped Shared Memory): حافظه اشتراکی نگاشت شده با فایل یا اشیاء سیستم یکپارچه میشود. این حافظه به وسیله نگاشت کردن فایل بر روی فضای آدرس یک یا چند فرایند مختلف، ایجاد شده است.
چندین فرایند متنوع میتوانند به فضای حافظه مشترکی دسترسی داشته باشند. به همین صورت، چندین فرایند با استفاده از این حافظه اشتراکی با یکدیگر تعامل میکنند. به این شکل که یکی به نوشتن داده در فضای حافظه میپردازد و سپس باقی فرایندها میتوانند دادههای نوشته شده را بخوانند. حافظه اشتراکی از کرنل سیستم استفاده نمیکند.
ارسال پیام
«ارسال پیام» (Message Passing) یکی از روشهای پیادهسازی ارتباط بین پردازشی است. در این قسمت از مطلب تمام توضیحات مربوط به این روش را در فهرست زیر بیان کردهایم.
- یکی دیگر از روشهای ارتباط بین پردازشی در سیستم عامل، «ارسال پیام» است. این تکنیک شامل تبادل پیام بین فرایندهای مختلف میشود. جایی که هر فرایند برای تطابق فعالیتهای خود و تبادل داده با دیگر فرایندها به ارسال و دریافت پیام میپردازد.
- فرایندهای میتوانند بدون استفاده از هیچ متغیر به اشتراک گذاشته شدهای با یکدیگر ارتباط برقرار کنند. بنابراین میتوان از روش ارسال پیام در محیطهای توزیع شده یا شبکههای کامپیوتری نیز استفاده کرد.
- در زمان پیادهسازی روش «ارسال پیام» هر فرایندی دارای شماره شناسایی یکتا است. به این شماره، ID فرایند گفته میشود. پیامها با استفاده از این شناساگر از فرایندی به فرایند دیگر ارسال میشوند. وقتی که فرایندی پیامی را ارسال میکند حتما در کنار محتویات پیام باید شماره ID گیرنده را نیز مشخص کند. سیستم عامل مسئول تحویل پیام ارسال شده به فرایند مقصد است. سپس گیرنده پیام به راحتی پیام را تحویل گرفته و دادههای درون آن را مطالعه میکند. در صورت نیاز پاسخی را نیز به پیام ارسال میکند.
ساختار IPC به صورت واضح در فرایندهایی بهکار برده میشود که به شکل همزمان با هم کار میکنند و در عین حال به دادههای یکدیگر نیز نیاز دارند. برای آشنا شدن با چنین فرایندهایی به صورت دقیقتر میتوانید مطلب راهنمای جامع چند نخی (Multi-Threading) در سیستم عامل را از مجله فرادرس مطالعه کنید.
مزایا و معایب روش ارسال پیام
هر رویکردی که برای پیادهسازی IPC به کار میرود دارای مزایا و معایب خاص خود است. تلاش کردیم تا مهمترین موارد را در این بخش بیان کنیم.
مزیت
روش «ارسال پیام» در حافظه اشتراکی شامل تعدادی مزیت بیشتر نسبت به سایر مکانیزمهای IPC است.
- اولین مزیت این است که به دلیل کپی کردن بسیار ساده از فضای آدرس فرایندی به فرایند دیگر، سرعت عملکرد بسیار زیادی دارد.
- نکته دوم اینجاست که این روش بسیار انعطافپذیر است. زیرا با کمک این روش هر نوع دادهای را میتوان بین فرایندهای مختلف به اشتراک گذاشت.
- نکته سوم هم این است که به دلیل نبود نیاز به پشتیبانی خاصی از طرف سیستم عامل، پیادهسازی این روش هم نسبت به سایر تکنیکهای IPC سادهتر است.
نقطه ضعف
البته استفاده از روش «ارسال پیام» برای IPC شامل معایبی هم هست.
- اولین نکته اینجاست که تحویل پیامها با نظم صحیح را نمیتوان تضمین کرد.
- نکته دوم اینکه مدیریت اندازه صف پیام مشکل است.
- و نکته آخر هم اینکه انتقال پیام به سایر سکوها میتواند دردسرساز شود. زیرا پیادهسازی حافظه اشتراکی بین سیستم عاملهای مختلف میتواند تفاوت زیادی داشته باشد.
صف های پیام
«صفهای پیام» (Message Queues) یکی از روشهای پیادهسازی ارتباط بین پردازشی است. در این قسمت از مطلب، تمام توضیحات مربوط به این روش را در فهرست زیر بیان کردهایم.
- صفهای پیام، شکل پیشرفتهتری از pipe-ها هستند.
- «صفهای پیام» به فرایندها کمک میکنند که به یکدیگر پیام ارسال کنند. همچنین برای برقراری ارتباط بین فرایندهایی که بر روی یک دستگاه قرار ندارند هم قابل استفادهاند.
- صفهای پیام درباره برقراری ارتباط بین فرایندهایی که باید از یکدیگر جدا باشند، انتخاب بسیار خوبی است.
- در «صف پیام» (Message Queue) ارتباط بین پردازشی، هر پیامی دارای اولیتی است که به آن اختصاص داده شده. به همین ترتیب هم پیامها با توجه به اولویتی که دارند از صف پیام فراخوانی میشوند. این مزیت به فرایندها کمک میکند که تحویل پیامهای مهم را اولویتبندی کنند. در نتیجه پیامهای بسیار ضروری هرگز توسط پیامهایی با اهمیت کمتر در صف بلوکه نمیشوند.
- «صف پیام» (Message Queue) روشی منعطف و مقیاسپذیر را برای ارتباط بین فرایندها فراهم کرده است. زیرا میتوان پیامها را به صورت غیرهمزمان ارسال و دریافت کرد. در نتیجه فرایندها میتوانند مراحل اجرایی خود را ادامه داده و همزمان هم منتظر دریافت پیام باشند.
- اصلیترین عیب روش صف پیام این است که این روش میتواند باعث بروز سربار عملیاتی نیز بشود. زیرا پیامها باید بین فضاهای آدرس کپی شوند. علاوه بر این سیستم عامل باید صف را مدیریت کرده و به صورت همگامسازی شده و ثابت برای تمام فرایندها نگهدارد.
برای انجام این کار لیستی را به پیامهای ذخیره شده در کرنل سیستم عامل متصل میکنیم. سپس صف پیام با استفاده از برچسب «شناساگر صف پیام» قابل شناسایی است.
در شبه کد زیر مراحل استفاده از صف پیام را با کمک کامپیوتر بیان کردهایم.
- شروع
- صف پیامی را ایجاد کرده یا به صف پیامی که از قبل وجود دارد متصل میشویم.
- دادههای خود را درون صف پیام مینویسیم.
- دادههای خود را از درون صف پیام میخوانیم.
- تمام عملیات مربوط به کنترل صف را بر بروی صف پیام اجرا میکنیم.
- پایان
ارتباط مستقیم
«ارتباط مستقیم» (Direct Communication) یکی از روشهای پیادهسازی ارتباط بین پردازشی است. در این قسمت از مطلب تمام توضیحات مربوط به این روش را در فهرست زیر بیان کردهایم.
در این روش، فرایندهایی که میخواهند ارتباط برقرار کنند باید فرستنده یا گیرنده را نامگذاری کنند.
- جفت فرایندهایی که قصد برقراری ارتباط با یکدیگر را دارند باید حداقل لینکی بین خود داشته باشند.
- لینکی که معمولا هم دوطرفه است، بین هر جفت از فرایندها راهاندازی میشود که درحال برقراری ارتباط با یکدیگر هستند.
- در«ارتباط مستقیم» (Direct Communication) فرایند ارسال کننده پیام، باید شماره شناساگر فرایند دریافت کننده را بداند. در این صورت است که ارسال پیام با مقصد مشخص، ممکن میشود. این شناساگر میتواند شماره ID فرایند، شماره «درگاه» (PORT) یا هر مشخصه شناسایی منحصر به فرد دیگری باشد. تا وقتی که ارسال کننده آن آدرس را دارد، میتواند پیامهای خود را به صورت مستقیم به دریافت کننده ارسال کند.
مزایا و معایب روش ارتباط مستقیم
هر رویکردی که برای پیادهسازی IPC به کار میرود دارای مزایا و معایب خاص خود است. تلاش کردیم تا مهمترین موارد را در این بخش بیان کنیم.
- فایده: مزیت اصلی «ارتباط مستقیم» اینجا است که این روش، مسیری بسیار ساده و سرراست را برای برقراری ارتباط بین فرایندها فراهم کرده است. زیرا فرایندها بدون نیازداشتن به استفاده از سامانههای ارتباطی واسطهای، میتوانند به دادههای یکدیگر به صورت مستقیم دسترسی داشته باشند.
- نقطه ضعف: اگرچه، ارتباطات مستقیم هم دارای محدودیتهایی هستند. این روش میتواند ارتباط قوی بین فرایندها ایجاد کند. در نتیجه بخاطر اینکه ارتباط بین فرایندها توسط خود آنها ایجاد شده است، تغییر دادن روش ارتباطی آنها در آینده سخت خواهد شد.
ارتباط غیرمستقیم
«ارتباط غیرمستقیم» (Indirect Communication) یکی از روشهای پیادهسازی ارتباط بین پردازشی است. در این قسمت از مطلب تمام توضیحات مربوط به این روش را در فهرست زیر بیان کردهایم.
- ارتباط غیر مستقیم در IPC روش ارتباطی است که در آن فرایندها به صورت صریح نام گیرنده یا فرستنده را نمیبرند. در عوض فرایندها با استفاده از واسطه اشتراکی مانند صف پیام یا صندوق پیام به برقراری ارتباط با یکدیگر میپردازند.
- در این رویکرد، هر جفت از فرایندهای ارتباط گیرنده باهم دارای صندوق پیام اشتراکی هستند.
- بین هر جفت از فرایندها لینکی - به صورت یکطرفه یا دوطرفه - ایجاد شده است.
- فرایندهای ارسال کننده، پیامها را در درگاه یا صندوق پیام فرایند گیرنده قرار میدهند. بعد از آن فراینده گیرنده پیامها را از درگاه یا صندوق پیام خوانده و سپس حذف میکند.
- در این روش، فرایندهای گیرنده و ارسال کننده پیام نیازی به دانستن شماره شناسه یکدیگر برای برقرار کردن ارتباط با هم نیستند.
مزایا و معایب روش ارتباط غیرمستقیم
هر رویکردی که برای پیادهسازی IPC به کار میرود، دارای مزایا و معایب خاص خود است. در این بخش از مطلب تلاش کردیم تا مهمترین مزایا و معایب روش ارتباط غیرمستقیم را بیان کنیم.
- مزیت: مزیت اصلی روش «ارتباط غیر مستقیم» اینجا است که در این تکنیک، روشی بسیار انعطافپذیرتر و مقیاسپذیرتر برای برقراری ارتباط بین فرایندها ایجاد میشود. زیرا فرایندها نیازی به دسترسی مستقیم به دادههای همدیگر ندارند.
- نقطه ضعف: در روش ارتباط غیر مستقیم، باز هم امکان رویدادن سربار اضافه در انجام محاسبات و مصرف منابع وجود دارد. زیرا دادهها باید بین فضاهای آدرس کپی شوند. به همینصورت مکانیزمهای ارتباطی هم باید توسط سیستم عامل مدیریت شوند. با این کار مطمئن میشویم که ارتباط بین فرایندها به صورت همزمان و پایدار برقرار میشود.
الگوریتم FIFO
الگوریتم FIFO یکی از روشهای پیادهسازی ارتباط بین پردازشی است. در این قسمت از مطلب تمام توضیحات مربوط به این روش را در فهرست زیر بیان کردهایم.
- روش FIFO از روی الگوریتم «اولین ورودی، اولین خروجی» (First In First Out | FIFO) اقتباس شده است. در این روش از صف پیام به شکلی استفاده میشود که همیشه اولین پیام رسیده، اولین پیام خارج شده از صف باشد. بنابراین همه پیامها با همان ترتیب وارد میشده به صف از صف هم خارج خواهند شد.
- این روش شامل استفاده از بافر FIFO است. این بافر به عنوان صف برای تبادل داده بین فرایندها کار میکند.
- از این روش برای برقراری ارتباط بین فرایندهایی استفاده میشود که در اتباط با یکدیگر نیستند.
- در روش FIFO، فرایندی به نوشتن دادهها در بافر FIFO میپردازد و فرایند دیگر دادهها را با همان ترتیب نوشته شدن از روی بافر میخواند.
- این روش کاملا دوطرفه است. فرایند P1 میتواند با فرایند P2 ارتباط برقرار کند و برعکس.
مزایا و معایب روش الگوریتم FIFO
هر رویکردی که برای پیادهسازی IPC به کار میرود، دارای مزایا و معایب خاص خود است. در این بخش از مطلب تلاش کردیم تا مهمترین مزایا و معایب روش الگوریتم FIFO را بیان کنیم.
- مزیت: مزیت اصلی روش FIFO در این است که روش سادهای را برای برقراری ارتباط بین فرایندها فراهم کرده. گویی که دادهها به ترتیب مبادله میشوند. در نتیجه نیازی نیست که فرایندها دسترسی خود را به بافر FIFO هماهنگ کنند.
- نقطه ضعف: هرچند روش FIFO هم میتواند باعث ایجاد محدودیتهایی شود. برای مثال، در صورت پر شدن بافر و وجود دادههایی که باید در دیسک نوشته شوند، یا اینکه بافر خالی شود و مجبور به خاندن داده از دیسک حافظه شویم، میتواند باعث کندی کارکرد کل سیستم شود.
آموزش سیستم عامل با کمک فرادرس
سیستم عامل یکی از مهمترین نرمافزارهایی است که بر روی هر دستگاه کامپیوتری نصب میشود. این نرم افزار وظیفه برقراری ارتباط بین همه اپلیکیشنهای کاربردی و سایر برنامههای سیستمی با سخت افزار کامپیوتر را دارد. علاوهبر این درباره مدیریت استفاده از CPU و تقسیم منابع بین برنامهها نیز مسئولیت دارد. به همین دلیل، بر آن شدیم تا در فرادس، سیستم عامل را از دیدگاه آکادمیک - برای دانشجویانی که باید دروس مربوطه را بگذرانند - و از دیدگاه علمی - برای توسعهدهندگانی که نیاز به تسلط بر سیستم عامل دارند - بررسی کرده و بهترین فیلمهای آموزشی را برای آن تولید کنیم. در پایین چند مورد مختلف از این فیلمها را معرفی کردهایم.
- فیلم آموزش پیکربندی پیشرفته سیستم عامل ویندوز و برنامه های کاربردی با فرادرس
- فیلم آموزش سیستم عامل به صورت جامع و کاربردی با فرادرس
- فیلم آموزش آشنایی با سیستم عامل ربات ها ROS با فرادرس
- فیلم آموزش سیستم عامل لینوکس Linux دوره مقدماتی با فرادرس
- فیلم آموزش نصب مجازی انواع سیستم عامل در نرم افزار VirtualBox با فرادرس
در صورت تمایل، با کلیک بر روی تصویر پایین وارد صفحه اصلی این مجموعه آموزشی شده و از فیلمهای بسیار بیشتر و متنوعتری نیز دیدن کنید.
چرا استفاده از ارتباط بین پردازشی ضروری است؟
نرمافزارهای کامپیوتری، محصولاتیاند که مهندس نرمافزار طراحی کرده و میسازد. مهندسی نرمافزار، دانش سیستماتیک و علمی درباره راهاندازی و نگهداری از نرمافزار است. مهندسی نرمافزار جزو دروس مقطع کارشناسی است که هم در کنکور کارشناسی ارشد و هم در آزمونهای استخدامی مطرح میشود. به همین دلیل فیلم آموزش مهندسی نرم افزار ۱ را از فرادرس معرفی کردیم تا با تماشای آن بر روی این مبحث مسلط شوید. لینک مربوط به این فیلم را در پایین نیز قرار دادهایم.
استفاده از ارتباط بین پردازشی در کامپیوترها و شبکههای کامپیوتری بسیار ضروری است. در حدی که نبود این مکانیزم باعث کندی بسیار یا حتی ناتوانی در اجرای برنامهها توسط کامپیوتر میشود. مهمترین دلایل وجود IPC را در پایین فهرست کردهایم.
- به اشتراک گذاری دادهها: IPC به فرایندها کمک میکند که به اشتراکگذاری دادهها با یکدیگر بپردازند. این مسئله برای انجام بسیاری از وظایف کامپیوتر مانند اشتراکگذاری فایلها بین سیستمهای مختلف، کاربا پایگاههای داده و دیگر منابع سختافزاری، حیاتی است.
- هماهنگی فعالیتها: IPC به فرایندها کمک میکند که فعالیتهای خود را با یکدیگر هماهنگ کنند. این توانایی برای انجام وظایفی مانند اجرای محاسبات توزیع شده، حیاتی است. «محاسبات توزیع شده» (Distributed Computing) به عملیاتی میگویند که در طی آن چندین پردازشگر مختلف برای حل کردن مسئلهای با یکدیگر همکاری میکنند.
- مدیریت منابع: IPC به فرایندها کمک میکند که استفاده از منابعی مانند حافظه، قطعات سختافزاری افزوده شده - مانند موس، مودم و غیره - و فایلها را مدیریت کنند. این مسئله برای اطمینان خاطر از استفاده کارآمد منابع ضروری است.
- دستیابی به توانایی ماژولار بودن: IPC به فرایندها این امکان را میدهد که به صورت مستقل از یکدیگر توسعه داده شده و نگهداری شوند. این مسئله به توسعه و نگهداری سیستمهای بزرگ و پیچیده کمک میکند.
- انعطافپذیری: IPC به فرایندها کمک میکند که بر روی هاستها یا کامپیوترهای مختلف در شبکه اجرا شوند. در نتیجه در سیستمهای بزرگ و پیچیده، انعطافپذیری و مقیاسپذیری بیشتری برای فرایندهای مختلف فراهم میشود.
جمعبندی
در این مطلب از مجله فرادرس درباره ارتباط بین پردازشی یا به صورت مختصر IPC صحبت کردیم. متوجه شدیم که IPC روشی برای برقراری ارتباط بین چندین فرایند یا «نخ» (Thread) محاسباتی مجزا با یکدیگر است. این مکانیزم عملیاتی برای سیستم عامل مزایایی مانند ماژولار بودن فرایندها، افزایش سرعت محاسبات و به اشتراکگذاری دادهها را فراهم میکند. روشهای مختلفی برای پیادهسازی مکانیزم IPC مانند استفاده از پایپ، ارسال پیام، صف پیام، حافظه اشتراکی، ارتباط مستقیم، ارتباط غیرمستقیم و صف FIFO وجود دارند.
بسیار مهم است که در بین فرایندهایی که از مکانیزم IPC استفاده میکنند، همگامسازی اتفاق بیافتد. این کار باعث حفظ ثبات دادهها میشود. دو روش مشهور برای انجام همگامسازی بین فرایندها استفاده از سمافور و «انحصار متقابل» (Mutual excusion) است.