تالار گفتمان مانشت
ناحیه بحرانی و انحصار متقابل!؟ - نسخه‌ی قابل چاپ

صفحه‌ها: ۱ ۲
ناحیه بحرانی و انحصار متقابل!؟ - csharpisatechnology - 12 آذر ۱۳۹۱ ۰۸:۰۲ ب.ظ

به نظرم اصلا این جملات چه ربطی به هم دارن؟
اینم شد سوال آخه!

ناحیه بحرانی و انحصار متقابل!؟ - esi - 12 آذر ۱۳۹۱ ۱۱:۴۶ ب.ظ

نتیجه کلی چی شد ؟
ناحیه بحرانی حاصل رقابت چند فرآیند بر روی یک منبع خاص هستند، قطعه کد دسترسی به اون منبع میشه ناحیه بحرانی ، پس کد برنامه شامل ناحیه بحرانی است و اون قسمت از کد رو میگیم ناحیه بحرانی، Critical Section که کلمه Section هم به یک قسمت از کد برنامه داره اشاره می کنه که اون قسمت حساس و بحرانی هستش. ناحیه بحرانی شامل دستوراتیه که داره به یک منبع دسترسی پیدا می کنه که چند تا فرآیند با هم میخوان به این منبع دسترسی پیدا کنن.
این منبع هر چیزی میتونه باشه و نه لزوما یک حافظه مشترک حتی CPU یه ناحیه بحرانی هستش اما راهکارش زمانبندی هستش، اگه یه نفر بتونه CPU رو بگیره و تا ابد ولش نکنه زمانبندی انحصار متقابل رو برآورده نکرده. پس هر منبعی می تونه باشه، باید کاری کرد که در هر لحظه فقط یک نفر بتونن از اون منبع استفاده کنن(در صورت تغییر پذیر بودن و داشتن رقبا برای اون منبع، مثلا فقط خواندنی ها که همزمان چند نفر می تونن بخونن و تغییری در منبع ایجاد نمیشه که نیاز به انحصار متقابل نداره، پس هدف حفظ حالت منبع برای فرآیندهای بعدی هست تا موثر از اون تغییرات نشن مثلا یکی پردازنده و رجیستراشو قفل نکنه چون بقیه هم از پردازنده و رجیستراش می خوان استفاده کنن یا نتیجه نامطلوب نگیرن مثل حافظه مشترک برای برداشت داده مشترک).
پس انحصار متقابل یک راهکار برای ایجاد ترتیب درسته دسترسی فرآیندها به منابع هستش. در مورد اون فضای مشترک هم تو کتاب استالینگز چندتا نکته نوشته، فضای مشترک بستگی به نحوه همکاری فرآیندها داره، اگه ۲ فرآیند مستقیما بخوان با هم در ارتباط باشن و از همدیگه هم باخبرن(توسط یه ربان نوشته شده است، مثل رابطه بین نخ برای چاپ مستند در word، نخ ذخیره داده ها در word، نخ بروز رسانی نمایش گرافیکی word، نخ برنامه اصلی و ....) در این حالت مسلما تنها راه ایجاد یک فضای مشترک هستش تا این نخ ها با هم در ارتباط باشه، در این حالت ناحیه بحرانی یه حافظه مشترکه.
ممکنه فرآیند ها(همون نخ ها بگیم بهتره چون واحد اجرایی هستن) از هم اطلاعی نداشته ولی با هم سر منبعی رقیب باشن، مثل CPU، گذرگا ها، یه I/O (مثل دوتا برنامه مستقل میخوان میخوان چاپ کنن).
پس منبع مربوط به ناحیه بحرانی می تونه هر چیزی باشه.
مسلم هم هست که بن بست ارتباط نزدیکی به انحصار متقابل داره، چون ممکنه الگوریتم انحصار متقابلی باعث ایجاد بن بست بشه و یا ممکنه نا خواسته بر اساس ترتیب اجرای فرآیند ها و تملک منابع بوسیله اونها بن بست رخ بده که بحث جدا و مشخصه.