الگوریتم شترمرغ

الگوریتم شترمرغ

تعریف الگوریتم شترمرغ

در این مطلب قرار است با الگوریتم شترمرغ (Ostrich Algorithm) آشنا بشوید. این الگوریتم مثل بسیاری دیگر از الگوریتم ها از محیط غیر کامپیوتری وارد دنیای کامپیوتر شده است. الگوریتم شترمرغ از دنیای اقتصاد وارد دنیای کامپیوتر شده است و در آنجا به این مسئله اثر شترمرغ می گویند.

یک جک خیلی خنده دار (الکی😂) در دنیای برنامه نویسی هست که میگه:

مدیر پروژه:این مشکل را با چه الگوریتمی حل کردی...

برنامه نویس: با الگوریتم شترمرغ 😂😂😂

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

سر خود را در شن فرو کنیم و وانمود کنیم که مشکلی وجود ندارد.

شاید این اصطلاح در زبان انگلیسی مانند ضرب المثل مثل کبک سرش را زیر برف کرده است در زبان فارسی باشد.

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

Ostrich Algorithm

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

deadlock چیست؟

در برنامه نویسی concurrent (همروند)، وقتی در هر گروهی از وظایف و کارهایی که قرار است انجام شود، یکی از اعضا منتظر اقدامی یا پیامی از سمت عضو دیگر از همان مجموعه (یا حتی خودش) باشد، اصطلاحا یک deadlock رخ داده است. Deadlock در سیستم های Multiprocessing، محاسبات موازی (Parallel Computing) و سیستم های توضیع شده، مشکل رایجی است.

حالا چه زمانی deadlock یا بن بست در سیستم عامل رخ می دهد؟ اگر بخواهم به ساده ترین حالت ممکن این موضوع را توضیح بدهم اینطور می شود که فرض کنید ما دو Process با نام های P1 و P2 داریم و دو منبع داریم با نام های S1 و S2. حالا بین این دو Process و این دو منبع رابطه ی زیر برقرار شده است:

P1 به سیستم عامل درخواست داده است که منبع S1 را در اختیار او قرار بدهد. از طرفی منبع S1 در اختیار P2 است و هنوز آزاد نشده است. پس P1 در صف انتظار برای S1 قرار می گیرد.

P2 در حال استفادها از S1 است و به سیستم عامل درخواست می دهد که S2 را در اختیار او قرار دهد، ولی در همین لحظه S2 در اختیار P1 است و باید P2 منتظر اتمام کار P1 باشد تا بتواند کار خودش را تمام بکند.

تصویر زیر همین نوشته های دو خط بالا را نشان می دهد که زمان وقوع یک deadlock را نمایش میدهد.

در یک سیستم ارتباطی، deadlockها نه به دلیل اختلال در منابع، بلکه به دلیل سیگنال‌های از دست رفته یا آنهایی که تاریخ اعتبارشان تمام شده است اتفاق می‌افتد.

حالا فرض کنید شما سیستم عاملی را با میلیون ها خط کد تولید کرده اید و deadlock ای را پیشبینی می کنید که ممکن است هر 10 سال یک بار پیش بیاید. آن یک بار هم با Restart کردن سیستم برطرف می شود. ولی ساعت ها و روزها از برنامه نویسان شما زمان می برد تا کدها را طوری تغییر بدهند که آن مشکل هر 10 سال یکبار هم پیش نیاید.

برای اطلاعات عمومی خدمتتون بگم که تعداد خط های کرنل سیستم عامل لینوکس امروز 27.8 میلیون خط کد است. برای اینکه در ذهن تان این میزان کد، قابل تجسم باشد اینطور در نظر بگیرید که هر صفحه از یک کتاب 50 خط اگر داشته باشد و هر کتاب 1000 صفحه ای باشد، فقط کرنل لینوکس در 556 جلد کتاب باید نوشته میشد.

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

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

با این تصویر سازی فوق العاده امکانات و عملیات های مختلف روی سیستم عامل را می بینیم. بگردید ببینید Ostrich Algorithm را پیدا می کنید.

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

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس


online-support-icon