ناحیه بحرانی و انحصار متقابل!؟ - نسخهی قابل چاپ صفحهها: ۱ ۲ |
ناحیه بحرانی و انحصار متقابل!؟ - sara_m - 16 آبان ۱۳۹۱ ۱۰:۵۹ ق.ظ
خسته نباشید از این دو جمله کدوم درسته؟ ۱-ناحیه بحرانی نتیجه انحصار متقابله ۲- انحصار متقابل نتیجه ناحیه بحرانیه من خودم میگم دومی درسته. دلیل: چون برای از بین بردن ناحیه بحرانی بود که ما روش انحصار متقابل رو تو الگوریتم های دیگه پیاده سازی کردیم اما تو کتابی که م دارم چیز دیگه ای گفته!! لطفا راهنمایی کنید ممنون |
ناحیه بحرانی و انحصار متقابل!؟ - azad_ahmadi - 16 آبان ۱۳۹۱ ۱۲:۴۴ ب.ظ
این دو جمله رو باید به دانشجوهای رشته ادبیات فارسی بدن (چون بیشتر ساختار جمله تاثیر میزاره تا مفهوم همزمانی پردازش ها). انحصار متقابل راهی برای عدم ورود همزمان چند فرایند به داخل ناحیه بحرانی هست. ناحیه بحرانی، جاییه که یک متغییر مشترک بین چند فرایند به اشتراک گذاشته میشه تا هر کدام از فرایند ها به ترتیب به اون دسترسی پیدا کنند (میتونه متغییر نباشه و یک آرایه یا یک بافر یا هر چیز دیگه ای باشه). ------------------------------------------------------------------------------------------------ جمله اول رو می تونیم اینطور تعبیر کنیم که اگه انحصار متقابل رعایت بشه نتیجه میشه که ناحیه بحرانی از ورود چند فرایند بصورت همزمان محافظت میشه. (در این صورت جمله درست خواهد بود). اما جمله دوم با توجه به جمله بندی باید گفت که ناحیه بحرانی، راهکار که نیست تا نتیجه ش بشه انحصار متقابل. موفق باشی. |
ناحیه بحرانی و انحصار متقابل!؟ - white bird - 16 آبان ۱۳۹۱ ۰۳:۴۷ ب.ظ
به نظر منم جمله دوم درسته تا اول چون تو جمله دوم میگه ناحیه بحرانی علت پیدایش انحصار متقابله ولی جمله اول غلطه ناحیه بحرانی نتیجه انحصار متقابله اگه انحصار متقابل برقرار باشه که دیگه ناحیه بحرانی معنا نداره |
RE: ناحیه بحرانی و انحصار متقابل!؟ - sara_m - 16 آبان ۱۳۹۱ ۰۴:۳۶ ب.ظ
(۱۶ آبان ۱۳۹۱ ۱۲:۴۴ ب.ظ)azad_ahmadi نوشته شده توسط: جمله اول رو می تونیم اینطور تعبیر کنیم که اگه انحصار متقابل رعایت بشه نتیجه میشه که ناحیه بحرانی از ورود چند فرایند بصورت همزمان محافظت میشه. (در این صورت جمله درست خواهد بود). خسته نباشید تا اینجا شد که اگر ناحیه بحرانی از ورود همزمان چنر فرآیند به داخل ناحیه بحرانی جلوگیری کنه انحصار متقابله پس نتیجه اینکه : انحصار متقابل از : ناحیه بحرانی + عدم دسترسی همزمان چند فرآیند به ناحیه ---->انحصار متقابل پس اینطوری گزینه دو درسته چون نتیجه بالا شده انحصار متقابل -------------------------------------------------------------------------------------------------------------------------------------------- حالا این فکر من هستش یکی بگه اشتباهه!اگه آره ؟ خوب چرا؟!! |
RE: ناحیه بحرانی و انحصار متقابل!؟ - narges_r - 16 آبان ۱۳۹۱ ۰۵:۳۹ ب.ظ
(۱۶ آبان ۱۳۹۱ ۱۲:۴۴ ب.ظ)azad_ahmadi نوشته شده توسط: ناحیه بحرانی، جاییه که یک متغییر مشترک بین چند فرایند به اشتراک گذاشته میشه تا هر کدام از فرایند ها به ترتیب به اون دسترسی پیدا کنند (میتونه متغییر نباشه و یک آرایه یا یک بافر یا هر چیز دیگه ای باشه). من فکر میکنم این جمله شما اشتباه هست! ناحیه بحرانی یک متغییر مشترک بین چند فرایند نیست، ممکن هست متغییر مشترکی وجود داشته باشه که دسترسی مشترک تمام فرایندها به اون متغییر مشترک باعث ایجاد ناحیه بحرانی نشه! اما ناحیه بحرانی قسمتی از برنامه هر فرایند هست، درواقع عامل ایجاد ناحیه بحرانی متغییر مشترک نیست بخشی از برنامه فرایندهاست که باعث میشه شرط انحصار متقابل نقض بشه در حقیقت یک عامل رقابت زا برای تمام فرایندها وجود داره که برای رعایت شرط انحصار متقابل تنها یک فرایند در هر لحظه اجازه داره در ناحیه بحرانی خودش باشه برای سوال مطرح شده هم میشه گفت جایی که شرط انحصار متقابل باید رعایت بشه اونجا جاییه که ناحیه بحرانی وجود داره یعنی ناحیه بحرانی حاصل از انحصار متقابله پس جمله اول درسته درواقع جایی که لازم به رعایت انحصار متقابل برای عامل مشترکی نباشه اونجا ناحیه بحرانی ای وجود نداره پس ناحیه بحرانی از لزوم رعایت انحصار متقابل ایجاد میشه فکر میکنم اینکه فکر میکنید جمله دوم درسته در نتیجه اینه که فکر میکنید ناحیه بحرانی رو یک عامل مشترک ایجاد میکنه... |
ناحیه بحرانی و انحصار متقابل!؟ - sara_m - 16 آبان ۱۳۹۱ ۰۶:۴۵ ب.ظ
آها...یعنی در فرآوندهایی که نیاز است انحصار متقابل باشد ناحیه بحرانی داریم. پس در واقع وجود نیاز به شخص شخیص انحصار متقابل باعث شده ناحیه بحرانی ایجاد شه نه؟ گفتم در ادامه همین تاپیک و مرتبط با موضوع یه مثال رو حل کنیم: مثال: n فرآروند دارای شناسه های بین صفر تا n-1 هستند و نیاز به دسترسی مشترک به ناحیه بحرانی یک کد دارند.برای حل این مساله به کمک سمافور چند سمافور لازم است؟ while (true){ while(turn!=pid); cr; turn=(turn+1)%n; remainder _________________________________________________ پاسخ:n سمافور لازم هست!! من خودم میگم که این کد بین n تا فرآیند مشترک است و ناحیه بحرانی داره و نیاز به انحصار متقابل هر فرآیندی که به این کد دسترسی دارد است ما از روش سمافور میخوایم استفاده کنیم پس میایم به ازای هر فرآروند یک سمافور تعریف میکنیم.ها؟!درسته؟!! اصلا کسی میدونه این چه تعداد رو چطور تعیین میکنن؟ |
ناحیه بحرانی و انحصار متقابل!؟ - narges_r - 16 آبان ۱۳۹۱ ۱۰:۱۶ ب.ظ
برای رعایت شرط انحصار متقابل با استفاده از سمافور ، ما یک سمافور تعریف میکنیم تا این سمافور وظیفه کنترل ورود و خروج کلیه فرایندها به یک ناحیه بحرانی رو اجرا کنه یعنی اگر یک ناحیه بحرانی برای چندین فرایند یکسان باشه ما نیاز به یک سمافور داریم در حقیقت به ازای هر ناحیه بحرانی یا به ازای رعایت هر شرط انحصار متقابل ما یک سمافور تعریف میکنیم من فکر میکنم چون در صورت سوال عنوان شده "دسترسی مشترک به ناحیه بحرانی یک کد" پس نیاز به یک سمافور هست نه nتا اگر برای یک ناحیه بحرانی برای هر فرایند یک سمافور تعریف کنیم up و down ها نمیتونن با هم در ارتباط باشن و فرایندی که از ناحیه بحرانی میخواد خارج بشه نمیتونه فرایند بلوکه شده برای ورود به ناحیه بحرانی رو بیدار بکنه اگر کتاب پارسه دکتر حقیقت رو دارید صفحه ۲۰۲ کتاب مطالعه کنید بطور کامل جواب سوالتونو داده |
RE: ناحیه بحرانی و انحصار متقابل!؟ - azad_ahmadi - 16 آبان ۱۳۹۱ ۱۰:۳۱ ب.ظ
(۱۶ آبان ۱۳۹۱ ۱۰:۵۹ ق.ظ)sara_m نوشته شده توسط: ۱-ناحیه بحرانی نتیجه انحصار متقابله این جمله یعنی اگه انحصار متقابل رعایت بشه، ناحیه بحرانی محافظت میشه. (۱۶ آبان ۱۳۹۱ ۱۰:۵۹ ق.ظ)sara_m نوشته شده توسط: ۲- انحصار متقابل نتیجه ناحیه بحرانیه این جمله "علت" رو ناحیه بحرانی فرض کرده و "معلول" رو انحصار متقابل. درصورتی که نباید اینطور باشه، ببینید؛ باید انحصار متقابل دسترسی به ناحیه بحرانی رو کنترل کنه، نه اینکه ناحیه بحرانی نتیجه ش بشه انحصار متقابل. (در هرصورت بنظر من هر دو جمله اشتباهن ولی جمله دومی اشتباه تره). |
RE: ناحیه بحرانی و انحصار متقابل!؟ - javadem - 16 آبان ۱۳۹۱ ۱۰:۳۹ ب.ظ
(۱۶ آبان ۱۳۹۱ ۰۶:۴۵ ب.ظ)sara_m نوشته شده توسط: گفتم در ادامه همین تاپیک و مرتبط با موضوع یه مثال رو حل کنیم: من فکر میکنم منظورش مقدار اولیه بوده و برای اینکه n فراین بتونن با هم وارد ناحیه بحرانی بشن باید شمارنده سمافور رو با n مقدار دهی کنیم. وگر نه به نظر منم باید یک سمافور تعریف شه. در مورد جمله ها من فکر میکنم اگه به اصل انحصار متقابل فکر کنیم ، انحصار متقابل یکی از عوامل بنبست و قبل از اون ناحیه بحرانی است. اما اینکه همتون در مورد راه کار حمله به انحصار متقابل صحبت میکنید و نمیدونم . شاید من اشتباه دارم فکر میکنم ولی فکر میکنم که انحصار متقابل باعث ناحیه بحرانی هست! |
RE: ناحیه بحرانی و انحصار متقابل!؟ - azad_ahmadi - 16 آبان ۱۳۹۱ ۱۰:۴۶ ب.ظ
(۱۶ آبان ۱۳۹۱ ۰۶:۴۵ ب.ظ)sara_m نوشته شده توسط: آها...یعنی در فرآوندهایی که نیاز است انحصار متقابل باشد ناحیه بحرانی داریم. در فراروند هایی که باید به ناحیه بحرانی دسترسی داشته باشند، باید انحصار متقابل رعایت شود. (۱۶ آبان ۱۳۹۱ ۰۶:۴۵ ب.ظ)sara_m نوشته شده توسط: آها...یعنی در فرآوندهایی که نیاز است انحصار متقابل باشد ناحیه بحرانی داریم. همونطور که خانم narges گفتند، نیاز به یک سمافور با مقدار اولیه ۱ هست. فرایند اول که بخواد وارد بشه یک down بر روی سمافور انجام میده و بعد از اون هر فرایندی که بیاد بلوکه خواهد شد. فرایند اولی، وقتی کارش تموم بشه یک up رو بر روی سمافور انجام میده و اگه فرایندی در صف بلوکه وجود داشته باشه بیدار می شه و روند اجرا شدنش انجام میشه. "" پس نیاز به یک سمافور با مقدار اولیه ۱ هست"" موفق باشی. |
RE: ناحیه بحرانی و انحصار متقابل!؟ - javadem - 16 آبان ۱۳۹۱ ۱۱:۰۲ ب.ظ
(۱۶ آبان ۱۳۹۱ ۱۰:۴۶ ب.ظ)azad_ahmadi نوشته شده توسط:(16 آبان ۱۳۹۱ ۰۶:۴۵ ب.ظ)sara_m نوشته شده توسط: آها...یعنی در فرآوندهایی که نیاز است انحصار متقابل باشد ناحیه بحرانی داریم. اما داخل صورت سوال گفته که دسترسی مشترک به ناحیه بحرانی اما اگر از یک سمافور و مقدار اولیه ۱ استفاده بشه ورود به ناحیه بحرانی به صورت هم زمان ممکن نیست!!! تو این زمینه باهاتون مخالفم چون باید شمارنده n باشه!!! اما در مورد سوال اصلی. من نظری دادم و اونم این بود که اصل انحصار متقابل (که به معنی ناتوانی یک منبع در سرویس دهی به همه فرایندها است) یکی از عوامل ایجاد ناحیه بحرانیست! نظر شما چیه؟ |
RE: ناحیه بحرانی و انحصار متقابل!؟ - azad_ahmadi - 16 آبان ۱۳۹۱ ۱۱:۲۰ ب.ظ
(۱۶ آبان ۱۳۹۱ ۱۱:۰۲ ب.ظ)javadem نوشته شده توسط:(16 آبان ۱۳۹۱ ۱۰:۴۶ ب.ظ)azad_ahmadi نوشته شده توسط:(16 آبان ۱۳۹۱ ۰۶:۴۵ ب.ظ)sara_m نوشته شده توسط: آها...یعنی در فرآوندهایی که نیاز است انحصار متقابل باشد ناحیه بحرانی داریم. دسترسی مشترک، یعنی ناحیه بحرانی که در اینجا همون متغیر turn هست، طوری بین فرایند ها به اشتراک گذاشته بشه که همه فرایند ها بتوانند از این متغیر مشترک استفاده کنند( و این الزاما به این معنی نیست که همه باهم در یک زمان واحد از اون متغیر turn استفاده کنند زیرا در این صورت انحصار متقابل رعایت نشده است). اگر مقدار سمافور برابر n باشد، همه فرایند ها می توانند وارد ناحیه بحرانی شوند، چرا که فرایند اول، یک down رو روی سمافور اجرا می کنه و مقدار شمارنده سمافور رو یکی کم می کنه و وارد ناحیه بحرانی میشه( در اینجا مقدار شمارنده سمافور برابر n-1 شده)، فرایند بعدی همین عمل رو انجام میده، و... تا زمانی که آخرین فرایند بیاد و یک down رو بر روی سمافور انجام بده و وارد ناحیه بحرانی بشه( در اینجا مقدار شمارنده سمافور برابر با ۰ هست). از این لحظه به بعد هر فرایند دیگری که بخواهد وارد ناحیه بحرانی شود بلوکه خواهد شد(چون مقدار شمارنده سمافور کوچکتر از ۰ میشود). --------- باز اگه مشکل داشتین در خدمت هستم. موفق باشی. |
RE: ناحیه بحرانی و انحصار متقابل!؟ - javadem - 16 آبان ۱۳۹۱ ۱۱:۳۵ ب.ظ
(۱۶ آبان ۱۳۹۱ ۱۱:۲۰ ب.ظ)azad_ahmadi نوشته شده توسط: دسترسی مشترک، یعنی ناحیه بحرانی که در اینجا همون متغیر turn هست، طوری بین فرایند ها به اشتراک گذاشته بشه که همه فرایند ها بتوانند از این متغیر مشترک استفاده کنند( و این الزاما به این معنی نیست که همه باهم در یک زمان واحد از اون متغیر turn استفاده کنند زیرا در این صورت انحصار متقابل رعایت نشده است). نه دوست من این turn خودش یه متغیر هست که نذاره که همه فرایند ها به صورت همزمان وارد Cr شن . فکر میکنم sara_m به اشتباه این قطعه کد رو گذاشتن چون اگه از سمافور استفاده کنیم دیگه نیازی به نوبت دهی به فرایند ها نیست. خوب بریم سر نظر شما که میگید سمافور رو اونطور استفاده میکنیم. من اول یه توضیح بدم که سمافور رو چرا استفاده میکنیم.چون فکر کنم شما یه خورده تو این زمینه اشتباه میکنید. ما سمافور رو استفاده میکنیم که فرایندها نتونند به طور همزمان وارد ناحیه بحرانی بشن(ناحیه بحرانی قسمتی از کد برنامه است که در صورت استفاده مشترک فرایند ها از این قسمت امکان بنبست وجود داره) . اما گاهی اوقات تشخیص میدیم که مثلا ۵ فراین میتونن به طور همزمان از اون قسمت کد استفاده کنن و بنبست رخ نده ، در این صورت شمارنده سمافور را ۵ میدیم که این ۵ فرایند همروند و همزمان وارد شن. خوب حالا شما که میگید استفاده مشترک از ناحیه بحرانی یعنی ورود یک به یک (نه همزمان) از ناحیه بحرانی، اونوقت ورود همزمان به ناحیه بحرانی چه اسمی داره؟ |
ناحیه بحرانی و انحصار متقابل!؟ - narges_r - 17 آبان ۱۳۹۱ ۰۱:۳۱ ق.ظ
ناحیه بحرانی ناشی از متغییر مشترک نیست بلکه ناشی از قطعه کد در فرایندهاست که انحصار متقابل رعایت نمیکنه و اون فرایند مشترک فقط رقابت زاست شرط انحصار متقابل هم زمانی رعایت میشه که از بین تمام فرایندهایی که برای یک منبع یکسان یا هر عامل مشترک رقابت زایی که دارای ناحیه بحرانی هستند، در هرلحظه تنها یک فرایند مجاز است در ناحیه بحرانی خودش باشه ممکنه یک منبع یا یک عامل بین فرایند ها مشترک باشه اما دسترسی همزمان به اون شرط انحصار متقابلو رعایت بکنه درواقع قطعه کدی که اجازه دسترسی همزمان فرایندها به اون عامل مشترک میده ناحیه بحرانی محسوب نمیشه اما اگر اون عامل مشترک رقابت زا باشه پس قطعه کد فرایندها که اجازه دسترسی به اون عامل مشترک میده ناحیه بحرانی محسوب میشه و برای اینکه شرط انحصار متقابل رعایت بشه در هر لحظه تنها یک فرایند میتونه به اون عامل مشترک دسترسی داشته باشه درضمن بن بست ربطی به انحصار متقابل نداره، بن بست مربوط به شرط انتظار محدود میشه مثلا الگوریتم سومین تلاش ببینید، در این الگوریتم شرط انحصار متقابل رعایت میشه اما بن بست رخ میده، درواقع شرط انحصار متقابل رعایت شده اما شرط انتظار محدود رعایت نشده |
RE: ناحیه بحرانی و انحصار متقابل!؟ - javadem - 17 آبان ۱۳۹۱ ۰۹:۵۴ ق.ظ
(۱۷ آبان ۱۳۹۱ ۰۱:۳۱ ق.ظ)narges_r نوشته شده توسط: درضمن بن بست ربطی به انحصار متقابل نداره، بن بست مربوط به شرط انتظار محدود میشه من با این حرف شما موافق نیستم. ببینید عامل رقابت زا یعنی یه عاملی که نتونه همزمان به همه ی فرایند های درخواست کننده تعلق بگیره ، و باعث رقابت فرایند ها بشه(این همون شرط انحصار متقابل هست). این رقابت ممکنه به بنبست ختم بشه(اگر شرط های دیگه بنبست رخ بده!) . اگر انحصار متقابل نباشه بنبست منبع هم در کار نیست( که البته ناحیه بحرانی هم مربوط به بنبست هست!). پس من مخالفم که انحصار متقابل به بنبست مربوط نیست. این الگوریتمی که شما فرمودید برای این نوشته شده که از یه عامل رقابت زا حفاظت کنه! درسته که شرط انحصار متقابل رو برای ناحیه بحرانی(به این معنی که فقط یک فرایند بتونه وارد ناحیه شه!)رعایت شده اما خود این الگوریتم یک عامل رقابت زا ایجاد کرده که به شرح زیر هست: متغیر flag 0 ,1 رو ۲ منبع بدونید که پردازه های a و b میخوان بدست بگیرن. اما این دو منبع اگر در اختیار هر یک از پروسه ها باشن قابل پس گرفتن نیستن(هیچ فرایندی به flag فرایند دیگه برای تغییر دسترسی نداره!) خوب حالا که هر فرایند منبع مخصوص به خودش رو گرفت در حلقه while در خواست منبع دیگر رو میده (یعنی مثلا پروسه ۱ درخواست فلگ ۰ رو میکنه که false شه) حالا اگر منبع در اختیار پروسه دیگر بود(مثلا پروسه ۱ درخواست فلگ صفر رو داده اما فلگ true هست و این یعنی الان در اختیار پروسه خودشه.) پروسه درخواست کننده صبر میکنه تا اون پروسه فلگ رو صفر کنه. حالا فرض کنید که پروسه دیگر هم منتظر باشه این پروسه باشه که فلگش رو صفر کنه! نتیجه حلقه بینهایت(بنبست) رخ داده! حالا این دقیقا همون چیزی بوده که این الگوریتم میخواسته ازش حفاظت کنه. درسته که این کار رو برای ناحیه بحرانی انجام داده(اختصاص ناحیه بحرانی به فقط یک فرایند یا همون انحصار متقابل) اما خودش یک ناحیه بحرانی جدید ساخته که تمام شروط بنبست رو داره بجز انتظار چرخشی که اونم میتونه با یک تعویض متن در جای خواصی از الگوریتم رخ بده و بنبست بشه!!!!!!!! شروط لازم برای بنبست: ۱- شرط انحصار متقابل ۲- شرط hold and wait ۳ - شرط نداشتن تخلیه پیش هنگام(non preemption) ۴ - شرط انتظار چرخشی همه این شروط با هم باید اتفاق بیافتند تا بنبست رخ بده! انتظار محدود مربوط به بنبست نیست ، یکی از اهداف الگوریتم های محافظ ناحیه بحرانیست و به این معنیست که یک فرایند به مدت نا معلوم منتظر ورود به ناحیه بحرانی نباشه. ممکنه بنبست رخ نده و یک فرایند به مدت نا معلوم منتظر ورود به ناحیه بحرانی باشه . مثلا قبل از این که نوبتش بشه فرایندی که داخله از ناحیه بحرانی خارج شه و سریعا بخواد دوباره وارد ناحیه بحرانی بشه و الگوریتم نتونه جلوشو بگیره که صف رو رعایت کنه. به این پدید همونطور که میدونید قحطی میگن!!! |