الگوریتم FIFO در سیستم عامل – توضیح به زبان ساده


الگوریتم FIFO یکی از الگوریتمهای زمانبندی در سیستم عامل است که برای تقسیم منابع بین فرایندهای مختلف به کار برده میشود. این الگوریتم، منابع مورد نیاز را با همان نظمی که فرایندها به صف انتظار وارد میشوند، بین آنها تقسیم میکند. از این الگوریتم میتوان در تمام بخشهای نیازمند به زمانبندی در سیستم عامل استفاده کرد. کلمه FIFO سرنامی از واژههای عبارت «First in First Out» به معنای «اولین ورودی، اولین خروجی» است. همیشه در سیستم عامل چندین برنامه وجود دارند که به صورت موازی درحال انجام کار هستند. حتی با صرف نظر از برنامههای پشت صحنه، خود کاربران هم گاهی از چند اپلیکیشن به صورت همزمان استفاده میکنند. در چنین شرایطی وجود الگوریتم زمانبندی قدرتمند واقعا حیاتی است.
در این مطلب از مجله فرادرس به صورت خلاصه و کامل الگوریتم FIFO را بررسی کردهایم. در ابتدا با پیادهسازی FIFO شروع کرده و به مرور به بررسی مزایا و معایب، محدودیتها و کاربردهای آن در دنیای واقعی پرداختهایم. توسعهدهندگان با آشنایی و تسلط بر روش کار این الگورتیم ساده، میتوانند مهارت خود را برای طراحی الگوریتمهای پیچیدهتر افزایش دهند.
الگوریتم FIFO در سیستم عامل چیست؟
الگوریتم FIFO یا «اولین ورودی، اولین خروجی» (First in First Out)، یکی از الگوریتمهای مورد استفاده در سیستم عامل است. این الگوریتم برای مدیریت منابعی مانند زمان کار CPU، حافظه و عملیات ورودی خروجی بهکار برده میشود. ایده اصلی پشت سر الگوریتم FIFO بسیار ساده است. به این صورت که اولین فرایند به صف وارد شده، باید اولین فرایندی هم باشد که اجرا شده یا از آن خارج میشود. در حالی که سایر فرایندهای بعدتر وارد صف شده باید منتظر بمانند. در واقع اجرای فرایندها با همان ترتیبی است که به صف وارد شدهاند.
برای سادهکردن درک این الگوریتم، صف غذا در رستوران دانشگاه را در نظر بگیرید. اولین دانشجویی که به صف غذا رسیده، اولین کسی است که غذای خود را تحویل میگیرد و آخرین دانشجوی وارد شده به صف باید تا زمان انجام کار و ترک صف توسط افراد جلوتر از خود صبر کند.

رفتار سیستم عامل هم به همین شکل است. اگر از الگوریتم FIFO در سیستم عامل استفاده شود، در زمان اجرای فرایندهای گوناگون، اولین فرایندی که به صف اجرا رسیده قبل از دیگران برای اجرا به منبع مورد نظر، دسترسی پیدا میکند. صف اجرا به خطی از فرایندهای منتظر دریافت منابع برای اجرا شدن میگویند.
الگوریتم FIFO در سیستم عامل، یکی از الگوریتمهای ساده و منصفانهای است که دسترسی همه فرایندها را به منابع مورد نیازشان تضمین میکند. با کمک این الگوریتم همه فرایندها دارای فرصت برابر برای استفاده از منابع سیستم هستند. بنابراین میتوانیم الگوریتم FIFO را شبیه به الگوریتم «اولین ورودی، اولین خدمت رسانی شده» (FIRST COME, FIRST SERVE | FCFS) نیز بدانیم. در واقع حتی در بعضی از منابع از نام FCFS نیز برای این الگوریتم استفاده میشود.
رایجترین زمان استفاده از این الگوریتم، وقتی است که زمان رسیدن فرایندها از قبل معلوم باشد، مانند سامانههای پردازش دستهای برنامهها. در چنین سامانههایی معمولا کارهای بسیار زیاد و شبیه به یکدیگری برای اجرا به سیستم عامل ارسال میشوند.
اگرچه در همه موارد ممکن، شاید نتوان FIFO را به عنوان کارآمدترین الگوریتم در نظر گرفت، زیرا این الگوریتم دو مسئله مهم زیر را در نظر نمیگیرد.
- اولویت اجرای فرایندها
- زمان مورد نیاز برای اجرای هر فرایند
اما الگوریتم FIFO، ساختار پایه برای بسیاری از الگوریتمهای زمانبندی پیچیده مورد استفاده در سیستم عاملهای مدرن را تشکیل میدهد.
چگونه طراحی الگوریتم را با فرادرس یاد بگیریم؟
در دنیای امروز، بسیاری از مسائل پیش آمده در مقابل توسعه انسان جنبه تکراری دارند. بهترین روش برای حل مسائلی که به صورت متداوم و تکراری با آنها روبهرو میشویم استفاده از الگوریتمها است. به غیر از آن، باید در نظر داشت که الگوریتمها به بخش جداییناپذیر از دنیای کامپیوتر هم تبدیل شدهاند. طراحی و نوشتن الگوریتم یکی از بخشهای مهم در علم کامپیوتر است. برای یادگیری طراحی الگوریتم، روشهای متنوعی وجود دارند. استفاده از فیلمهای آموزشی، یکی از بهترین روشها است.

فرادرس نیز به عنوان یکی از بهترین و بزرگترین تولیدکنندگان محتوای آموزشی فارسی، در همه زمینهها بخصوص طراحی الگوریتم، فیلمهای بسیار خوبی منتشر کرده است. از دانشجویان گرفته تا فعالین حوزه توسعه نرمافزار همه میتوانند از مشاهده این فیلمها منتفع شوند. در فهرست زیر، چند ویژگی فیلمهای آموزشی را نسبت به سایر متدها، مخصوصا در حوزه طراحی الگوریتم، بیان کردهایم.
- اولین مشکل روش آموزش حضوری، کمبود موسسات توانا به آموزش طراحی الگوریتم است.
- در صورت پیدا شدن چنان موسسههایی، دانشجویان باید نسبت به فیلمهای آموزشی، هزینه مالی بیشتری هم پرداخت کنند.
- کلاسهای حضوری دارای زمانبندی مشخص هستند. یعنی دانشجو مجبور به تنظیم زمان خود با موسسه است.
- و غیره
فرادرس، به صورت اختصاصی فیلمهای آموزشی زیادی را درباره آموزش و طراحی الگوریتم طراحی و منتشر کرده است که در ادامه چند مورد از آنها را معرفی میکنیم.
- فیلم آموزش مروری بر پیچیدگی محاسبات Computational Complexity از فرادرس
- فیلم آموزش طراحی الگوریتم همراه با حل مثال های عملی فرادرس
- فیلم آموزش حل روابط بازگشتی در سایت فرادرس
- فیلم آموزش روش تقسیم و حل در طراحی الگوریتم همراه با مرور و تست کنکور در وب سایت فرادرس
روش کار الگوریتم FIFO در سیستم عامل
یکی از کاربردهای این الگوریتم، مدیریت درخواستها برای دسترسی به حافظه اصلی و حافظه مجازی صفحهبندی شده است. مدیریت دیسک یکی از مطالب مهم بخصوص در حوزه آکادمیک است. برای تسلط بر این مبحث پیشنهاد میکنیم که فیلم آموزش رایگان مدیریت دیسک در سیستم عامل را همراه با مرور اجمالی و تست کنکور از فرادرس مشاهده کنید. همچنین، لینک مربوط به این فیلم را در پایین نیز قرار دادهایم.
سیستم عامل وظیفه اصلی برقراری ارتباطات بین نرمافزارهای کاربردی را با بخش سختافزاری کامپیوتر بر عهده دارد. یعنی اینکه سیستم عامل همه منابع مورد استفاده برای اجرای فرایندها را مدیریت میکند. در زمان کار کامپیوتر، وظیفه سیستم عامل است که مشخص کند کدام فرایند از کدام منبع و در چه زمانی استفاده کند. یکی از الگوریتمهای زمانبندی مورد استفاده سیستم عامل FIFO است. الگوریتم FIFO به معنی اولین ورودی، اولین خروجی است. این الگوریتم مشابه با روش کار صف در رستوران یا فروشگاه کار میکند.
سیستم عامل برای پیادهسازی الگوریتم FIFO از ساختار صف در ساختمان داده برای نگهداری فرایندها استفاده میکند. صف به صورت خطی است که فرایندها بر روی آن انتظار میکشند. به همان ترتیبی که فرایندها وارد صف شدهاند از آن خارج خواهند شد. نظم صف کاملا ثابت بوده و هیچ فرایندی خارج از نوبت خود به منبع مورد نیازش دسترسی پیدا نمیکند. فرایندها از انتهای صف به آن افزوده شده و در جلوی صف از آن حذف میشوند. به این مراحل به ترتیب «نوبتگرفتن» (Enqueueing) و «خروج از صف» (Dequeuing) گفته میشود.

سیستم عامل از الگوریتمها برای مدیریت صف استفاده میکند. با کمک الگوریتمها کارکرد درست افزوده شدن و خروج فرایندها از صف، تضمین میشود. روش کار الگوریتم FIFO را به صورت خلاصه در فهرست زیر بیان کردهایم.
- وقتی فرایند جدیدی از راه میرسد، با استفاده از عملیات صفبندی از صمت انتهای صف به آن وارد میشود.
- سپس سیستم عامل بررسی میکند که کدام فرایند در ابتدای صف قرار داد و آن فرایند را به منبع مورد نیاز برای اجرا ارسال میکند.
- وقتی که فرایند کار خود را با منبع به پایان رساند، با استفاده از عملیات Dequeuing از ابتدای صف حذف میشود.
- سپس فرایند بعدی در صف برای اجرا به منبع مورد نیاز خود ارسال میشود.
خلاصه موارد بیان شده در بالا این است که الگوریتم FIFO مانند خط یا صف کار میکند. به معنی اینکه اولین فرایند قرار گرفته در اولین جایگاه اجرا شده و سپس جای خود را به فرایند پشت سر میدهد. هر فرایندی که زودتر به صف برسد، زودتر هم از آن خارج میشود. سیستم عامل هم از ساختار داده صف مانندی برای نگهداری رد ترتیب فرایندها استفاده میکند. عملیات خواصی به نام Enqueue و Dequeue در سیستم عامل برای افزودن و حذف فرایندها از صف تعریف شدهاند.
مثالی برای استفاده از الگوریتم FIFO در سیستم عامل
مثالی را درباره استفاده از الگوریتم FIFO برای جایگزینی صفحات حافظه در زمان رویدادن خطای «Page Fault» در نظر بگیرید.
فرض کنیم که ۵ فریم برای صفحات و همچنین منابع صفحه با شمارهها 2, 3, 5, 2, 8, 9, 4, 5 را در اختیار داریم. باید درخواستهای دریافت شده را یک به یک بررسی کنیم. اگر صفحه مربوطه وجود داشت به درخواست رسیدگی شود و گرنه - رویدادن «خطا صفحه» (Page Fault) - اطلاعات مربوط به آن درخواست در فریم صفحه حافظه بارگذاری شده و به سراغ اجرای درخواست بعدی میرویم.
نکته: اولین باری که هر صفحهای مورد دسترسی قرار میگیرد، همیشه منجر به Page Fault - با اعلان Miss - میشود. زیرا هنوز اطلاعات درخواست شده از حافظه فیزیکی در صفحه بارگذاری نشدهاند. برای بارگذاری دادههایی که به صورت مکرر مورد نیاز میشوند در سیستم عامل از حافظه مجازی و تکنیک صفحه بندی در سیستم عامل استفاده میشود. به منظور آشنایی با مفهوم حافظه مجازی میتوانید مطلب راهنمای جامع حافظه مجازی (Virtual Memory) در سیستم عامل را در مجله فرادرس مطالعه کنید.

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

رویهمرفته، استفاده از الگوریتم FIFO، کار کامپیوتر را برای تصمیمگیری درباره زمان دسترسی فرایندها به منابع مورد نیازشان سادهتر میکند. استفاده از این الگوریتم روشی منصفانه برای انجام کارهاست، آموزش آن ساده است و به سادگی میتوان نتیجه اجرای کار را پیشبینی کرد.
مثال هایی از استفاده الگوریتم FIFO
FIFO یکی از روشهایی است که کامپیوتر برای ردیابی کارها و اجرای اولین فرایند رسیده بهکار میبرد.
در مثالهای زیر، روش کار این الگوریتم را در بخشهای مختلف سیستم عامل بیان کردهایم.
- در زمانبندی فرایندها برای اجرا: برای تصمیمگیری اینکه کدام وظیفه پردازنده را برای اجرا در اختیار بگیرد، کامپیوتر از FIFO استفاده میکند. اولین فرایندی که برای دسترسی به CPU درخواست داده باشد، اول از همه هم اجرا خواهد شد. برای مثال، اگر از کامپیوتر درخواست کردهایم که سندی را چاپ کرده و بعد از آن فایلی را کپی کند. در ابتدا کامپیوتر شروع به چاپ سند خواهد کرد، زیرا اولین کاری که درخواست شده چاپ سند بود.
- در مدیریت حافظه: کامپیوتر از FIFO برای بارگذاری برنامهها در حافظه هم استفاده میکند. این کار مانند قرار دادن مستندات درون پوشه است. سندی را که اول از همه در پوشه کاربرگ قرار دادید، اول از همه هم دیده میشود. به همین صورت کامپیوتر هم برنامهای را که اول از همه آمده در خاطر نگهمیدارد. آن برنامه باید قبل از دیگران بر روی حافظه بارگذاری شود.
- عملیات مربوط به ورود و خروج داده I/O: در این زمینه هم کامپیوتر از FIFO برای مدیریت هر چیز قابل تصوری استفاده میکند. کارهایی مانند نوشتن با کمک صفحه کلید یا ذخیره فایلها در هارد دیسک هم با کمک FIFO انجامپذیر است. بر اساس نظم درخواستهای ارسال شده، الگوریتم FIFO تصمیم میگیرد که کدام وظیفه در ابتدا انجام شود. مانند ارسال کردن ایمیلها است. اولین ایمیلی که ارسال شده، همان ایمیلی است که اول از همه خوانده میشود.
در نهایت، میبینم که FIFO یکی از روشهای ساده و منصفانهای است که کامپیوتر برای ردگیری کارها استفاده میکند. مخصوصا کارهایی که در بخشهای مختلف سیستم عامل باید به ترتیب اجرا شوند.
کاربردهای الگوریتم FIFO در دنیای واقعی
الگوریتم FIFO به طور وسیعی در بسیار از حوزههای کاربردی مربوط به دنیای واقعی بهکار گرفته میشود. با کمک این الگوریتم، میتوانیم منابع را به صورت موثری مدیریت کنیم. در این بخش از مطلب، چند مثال مختلف از کاربردهای FIFO را در موقعیتهای گوناگون ارائه کردهایم.
- زمانبندی بستههای داده در شبکه: دادهها در شبکههای کامپیوتری به صورت بستهبندی شده ارسال میشوند. اغلب اوقات برای مدیریت صف این بستهها از FIFO استفاده میشود. FIFO صف بستههای منتظر برای ارسال را به روش خودش مدیریت میکند. یعنی اینکه بستهها به همین ترتیبی که به صف وارد میشوند به همین ترتیب هم ارسال خواهند شد. در نتیجه با قطعیت میتوان گفت که با همه بستهها به صورت منصفانه رفتار میشود.
- زمانبندی دیسک: وقتی که چندین فرایند مختلف نیاز به دسترسی دیسک حافظه دارند، برای مدیریت درخواستها صف ایجاد میشود. در چنین شرایطی یکی از سادهترین الگوریتمها برای مدیریت دسترسی فرایندها به حافظه، FIFO است. اولین درخواست ارسال شده، اولین درخواستی است که مورد رسیدگی قرار میگیرد. در نتیجه به همه درخواستها با دید یکسانی نگاه میشود.
- زمانبندی پرینتر: وقتی که چندین وظیفه چاپ مختلف به دستگاه پرینتر ارسال میشوند، برای مدیریت درخواستهای ارسال شده، صف تشکیل خواهد شد. برای رسیدگی و مدیریت درخواستهای صفبندی شده هم بیشتر اوقات از الگوریتم FIFO در سیستم عامل استفاده میشود. در نتیجه اولین وظیفهای که در خواست دسترسی به پرینتر را دارد به هدف خود میرسد. در این روش نیز به همه وظایف پینتر به صورت عادلانه و مساوی هم نگاه میشود.
- اجرای صدا و ویدئو: دادهها به صورت مداوم در برنامههای مخصوص پخش صدا و ویدئو جاری هستند. در این نوع از اپلیکیشنها هم از الگوریتم FIFO برای مدیریت بافر حافظه استفاده میشود. البته این بافر دادههایی را ذخیره کرده است که برای پخش شدن توسط اپلیکیشن مورد نظر در صف انتظار هستند. اولین دادههایی که به بافر میرسند، اولین دادههایی هستند که در اپلیکیشن پخش میشوند. با کمک FIFO مطمئن میشویم که هیچ وقفه و تاخیری در پخش صدا و تصویر روی ندهد.

درنهایت، میبینیم که الگوریتم FIFO یکی از ابزارهای با ارزش و مورد استفاده در بسیاری از اپلیکیشنهای دنیای واقعی است. زیرا استفاده از این الگوریتم تضمین میکند که منابع به صورت منصفانه و موثری به درخواستهای مرتبط با آنها اختصاص داده شوند.
آشنایی و آموزش الگوریتم های مدرن در فرادرس
برای درک بیشتر الگوریتمها و کاربردهای آنها، بهتر است که با چند مورد از الگوریتمهای مدرن و پیشرفته آشنا شویم. الگوریتمهای معرفی شده از بین موارد کاربردی و رایج در دنیای کامپیوتر و مهندسی انتخاب شدهاند. وبسایت آموزشی فرادرس به عنوان بزرگترین تولید کننده فیلمهای آموزشی در کشور، فیلمهای متنوع و با کیفیتی را درباره آموزش انواع الگوریتمها تولید کرده است. فرادرس با توجه به دو حوزه برنامهنویسی کاربردی و آکادمیک، فیلمهای آموزشی خود را تولید میکند. یعنی اینکه، مشاهده این فیلمها هم برای افراد شاغل در حوزه توسعه برنامههای کامپیوتری مفید است و هم برای دانش آموزانی که در مسائل تحصیلی نیاز به کمک دارند.
در ادامه چند مورد از آنها را مشاهده میکنید.
- فیلم آموزش الگوریتم کلونی زنبور عسل در پایتون، از مفاهیم تا پیاده سازی با فرادرس
- فیلم آموزش مقدماتی پیاده سازی مسائل بهینه سازی در پایتون با فرادرس
- فیلم آموزش الگوریتم گروه میگوها و پیاده سازی در متلب MATLAB با فرادرس
- فیلم آموزش الگوریتم بهینه سازی گرگ خاکستری GWO و پیاده سازی در متلب با فرادرس
- فیلم آموزش بهینه سازی سبد سهام در پایتون با روش های هوشمند درباره پورتفولیو مالی در فرادرس

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