PDA

View Full Version : مرگ نخ توی ناحیه بحرانی



pswin.pooya
پنج شنبه 24 شهریور 1390, 20:37 عصر
داشتم IPC و همگام سازی آراکس رو می نوشتم که یه سوال جالب برام مطرح شد:

اگر یه نخ توی ناحیه بحرانی خودش که توسط یه قفل محافظت میشه بمیره تکلیف توی موارد زیر چیه؟

۱. موتکس ها
۲. سمافورها (راهنماها)
۳. قفلهای خواننده و نویسنده

اگر همه چی رو به حال خودش رها کنیم. توی موتکسها منجر به بمبست و توی سمافورها (به غیر از باینریها) منجر به از دست رفتن یک منبع و توی قفلهای خواننده و نویسنده (توی حالت نویسنده) منجر به بمبست میشه. تکلیف چیه؟

جواب دیگه آزاد کردن قفل با یک سیگنال یا با چیز مشابه هست. اما اینکار خطرناکه، چطور؟ بزارید بگم. فرض کنید. فرایند داره تغییراتی رو داخل یک سیستم بلادرنگ یه کارخونه پتروشیمی اعمال میکنه که اون مثلا شامل یک واحد افزایش فشار و ثبت اون هست حالا فرایند بعد از افزایش فشار خاتمه پیدا میکنه و سیستم عامل متوجه میشه و قفل رو باز میکنه فرایند دیگه وارد ناحیه میشه و متوجه کمبود فشار و در نتیجه افزایش اون (تا اینجا دو واحد افزایش ) و در نتیجه BOOOOOOOOOM. یا اگر به همون شکل قفل بمونه چی؟‌ (بازم BOOOOOOOOOOM)

نظر و یا راهکار شما چیه؟

joker
جمعه 25 شهریور 1390, 04:34 صبح
پیشنهاد»
یک نخ ناظر ایجاد کن ، و بالاترین اولویت را توی سطح سیستم عامل بهش بده ، کدنویسش را هم 100% مطمئن بشو که این یه نخ لااقل هیچ باگی توی اجرا نداشته باشه ، حالا این نخ وظیفه سرکشی مرتب به همه چیز را داره ، اگه جائی مشکلی دید ، مشکل را طبق تعریفی که براش کردی ، حل میکنه ( بستن پروسه = ریست کردن پروسه ،آزاد کردن حافظه - جایگزنی - نگهداری مقادیر و لاگ کردن اشکال -.....

pswin.pooya
جمعه 25 شهریور 1390, 12:28 عصر
یک نخ ناظر ایجاد کن ، و بالاترین اولویت را توی سطح سیستم عامل بهش بده ، کدنویسش را هم 100% مطمئن بشو که این یه نخ لااقل هیچ باگی توی اجرا نداشته باشه ، حالا این نخ وظیفه سرکشی مرتب به همه چیز را داره ، اگه جائی مشکلی دید ، مشکل را طبق تعریفی که براش کردی ، حل میکنه ( بستن پروسه = ریست کردن پروسه ،آزاد کردن حافظه - جایگزنی - نگهداری مقادیر و لاگ کردن اشکال -.....

اینکار رو سیگنالها انجام میدن. اگر هر پروسس سیگنال خاصی (مثلا تقسیم بر صفر) رو پشتیبانی کنه OS هندلری رو که خود پروسس تعریف کرده اجرا میکنه. و اگر پشتیبانی نکنه سیستم عامل هندلر پیش فرض خودش رو اجرا میکنه. من فرضم کنترل خطا نیست فرض من اینه که پروسس نابود شده ( به هر دلیلی - حتی فیزیکی). رفتار سیستم عامل توی این حالت باید چی باشه؟

FastCode
جمعه 25 شهریور 1390, 12:29 عصر
باید semaphore ها آزاد بشن.
توی سیستم های POSIX وقتی یک process یا ترد کارش رو درست انجام میده به کمک SIGNAL یا DBUS یا یه همچین چیزی به پروسه والد یا هر پروسه ای که منتظرشه پیغام میده که کارش تموم شده.
اگر این پیغام نیومده باشه یعنی پروسه نتونسته کارش رو درست انجام بده.