۰
subtitle
ارسال: #۱
  
سوال مبتدی بن بست-سمافور
سلام
سوال مبتدی در کتاب مقسمی مطرح هست به نام بن بست در سمافور
P0
wait (s)
wait (q)
.
.
.
signal (s)
signal (q)
P1
wait (q)
wait (s)
.
.
.
signal (q)
signal (s)
چرا بن بست رخ میدهد؟ میشه بفرمائید ایا صف انتظار هم تشکیل میشود و در هر مرحله چه میشود؟s,q=1
کی و چه وقت وارد ناحیه بحرانی میشن؟
راه حل مشکل اینه که
P0
wait (s)
wait (q)
P1
wait (s)
wait (q)
میشه بفرمائید ایا صف انتظار هم تشکیل میشود و در هر مرحله چه میشود؟
خیلی ممنون از لطف دوستان
سوال مبتدی در کتاب مقسمی مطرح هست به نام بن بست در سمافور
P0
wait (s)
wait (q)
.
.
.
signal (s)
signal (q)
P1
wait (q)
wait (s)
.
.
.
signal (q)
signal (s)
چرا بن بست رخ میدهد؟ میشه بفرمائید ایا صف انتظار هم تشکیل میشود و در هر مرحله چه میشود؟s,q=1
کی و چه وقت وارد ناحیه بحرانی میشن؟
راه حل مشکل اینه که
P0
wait (s)
wait (q)
P1
wait (s)
wait (q)
میشه بفرمائید ایا صف انتظار هم تشکیل میشود و در هر مرحله چه میشود؟
خیلی ممنون از لطف دوستان
۰
ارسال: #۲
  
RE: سوال مبتدی بن بست-سمافور
سلام .
برای قسمت اول این حالت رو در نظر بگیرید :
اول فرآیند P0 اجرا شده و فرمان Wait روی s اجرا میکنه
اگه همین لحظه وقفه بیاد و به فرآینده P1 بریم و اونم یه Wait روی q اجرا میکنه
دوباره این لحظه برگردیم به فرآیند P0 این فرآیند میخواد Wait روی q بزنه ولی چون سمافور q مقدارش صفر شده پس فرآیند P0 به حالت خواب میره .
در ادامه هم اگه به فرآیند P1 بریم اونم چون میخواد روی سمافور s فرمان Wait بزنه مث P0 به خواب میره و به این ترتیب هر دوی فرآیندها به صف انتظار منتقل و مسدود میشوند و به قول بعضی ها : خفته را خفته کی کند بیدار !!!!!!!!
اما برای قسمت دوم این مشکل پیش نمیاد مثلا اگه بخوایم مث قبلی پی بگیریم :
فرآیند P0 اجرا شده و یک Wait روی s اجرا میکنه
اگه این لحظه به فرآیند P1 سویچ کنیم چون این فرآیند هم میخواد رو سمافور s که توسط P0 قفل شده Wait بزنه پس مسدود میشه و تا زمانی که فرآیند P0 فرمان Signal رو که در پایان ناحیه بحرانیش هست نزنه اجاز بیدار شن نداره .
اگه حالات دیگه رو هم توی این کد اجرا کنیم می بینیم که به درستی کار میکنه و در هر لحظه یکی از فرآیندها در صف انتظار به سر میبره.
برای قسمت اول این حالت رو در نظر بگیرید :
اول فرآیند P0 اجرا شده و فرمان Wait روی s اجرا میکنه
اگه همین لحظه وقفه بیاد و به فرآینده P1 بریم و اونم یه Wait روی q اجرا میکنه
دوباره این لحظه برگردیم به فرآیند P0 این فرآیند میخواد Wait روی q بزنه ولی چون سمافور q مقدارش صفر شده پس فرآیند P0 به حالت خواب میره .
در ادامه هم اگه به فرآیند P1 بریم اونم چون میخواد روی سمافور s فرمان Wait بزنه مث P0 به خواب میره و به این ترتیب هر دوی فرآیندها به صف انتظار منتقل و مسدود میشوند و به قول بعضی ها : خفته را خفته کی کند بیدار !!!!!!!!
اما برای قسمت دوم این مشکل پیش نمیاد مثلا اگه بخوایم مث قبلی پی بگیریم :
فرآیند P0 اجرا شده و یک Wait روی s اجرا میکنه
اگه این لحظه به فرآیند P1 سویچ کنیم چون این فرآیند هم میخواد رو سمافور s که توسط P0 قفل شده Wait بزنه پس مسدود میشه و تا زمانی که فرآیند P0 فرمان Signal رو که در پایان ناحیه بحرانیش هست نزنه اجاز بیدار شن نداره .
اگه حالات دیگه رو هم توی این کد اجرا کنیم می بینیم که به درستی کار میکنه و در هر لحظه یکی از فرآیندها در صف انتظار به سر میبره.
۰
ارسال: #۳
  
سوال مبتدی بن بست-سمافور
سلام دوست عزیز
تشکر از پاسخ شما
ببنیدید این کد wait است.
wait (s)
s.value=s.value-1
if s.value <0 then begin
add this process to s.l
block
end
signal (s)
s.value=s.value+1
if s.value <=0 then begin
remove a process p from s.l
wakeup (p)
end
در حالت اول p0 اول s را صفر می کند سپس p1 بعد q را صفر میکند
طبق کد درصورتی به حالت بلاک میرود که کوچکتر از ۰ شود. اما این در هر ۲ حالت شده ۰ و به بلاک نمیره .
درسته؟ یعنی wait خط دوم هر پروسس اجرا میشود یا خیر؟
قسمت دوم
p0 ابتدا s را صفر کرده و به حالت بلاک نمیرود .چون شرط بلاک مگر کوچکتر از ۰ نمی باشد؟
تکلیف q چه میشود؟
ببخشید میدونم داغونم تو این مبحث
تشکر از پاسخ شما
ببنیدید این کد wait است.
wait (s)
s.value=s.value-1
if s.value <0 then begin
add this process to s.l
block
end
signal (s)
s.value=s.value+1
if s.value <=0 then begin
remove a process p from s.l
wakeup (p)
end
در حالت اول p0 اول s را صفر می کند سپس p1 بعد q را صفر میکند
طبق کد درصورتی به حالت بلاک میرود که کوچکتر از ۰ شود. اما این در هر ۲ حالت شده ۰ و به بلاک نمیره .
درسته؟ یعنی wait خط دوم هر پروسس اجرا میشود یا خیر؟
قسمت دوم
p0 ابتدا s را صفر کرده و به حالت بلاک نمیرود .چون شرط بلاک مگر کوچکتر از ۰ نمی باشد؟
تکلیف q چه میشود؟
ببخشید میدونم داغونم تو این مبحث
ارسال: #۴
  
RE: سوال مبتدی بن بست-سمافور
(۰۲ دى ۱۳۹۱ ۱۱:۳۴ ب.ظ)irpersian20 نوشته شده توسط: سلام دوست عزیز
تشکر از پاسخ شما
ببنیدید این کد wait است.
wait (s)
s.value=s.value-1
if s.value <0 then begin
add this process to s.l
block
end
signal (s)
s.value=s.value+1
if s.value <=0 then begin
remove a process p from s.l
wakeup (p)
end
در حالت اول p0 اول s را صفر می کند سپس p1 بعد q را صفر میکند
طبق کد درصورتی به حالت بلاک میرود که کوچکتر از ۰ شود. اما این در هر ۲ حالت شده ۰ و به بلاک نمیره .
درسته؟ یعنی wait خط دوم هر پروسس اجرا میشود یا خیر؟
خب تا اینجا که گفتین کد درسته و مشکل پیش نمیاد حالا از این به بعد هستش همون طوری که بالا هم گفتم مشکل پیش میاد .
۱/در حالت اول p0 اول s را صفر می کند سپس p1 بعد q را صفر میکند (تا اینجا که خودتون گفتین)
۲/دوباره P0 اجرا میشه و میخواد سمافور بعدی یعنی q رو Wait بزنه ولی میدونیم که q توسط فرآیند P1 صفر شده پس فرآیند P0 نمیتونه Wait بزنه و مسدود میشه یعنی قسمت IF دستور Wait سمافور q اجرا میشه
۳/ اگه دوباره به P1 برگردیم اونم میخواد روی s فرمان Wait بزنه که اینم توسط فرآیند P0 صفر شده و به این ترتیب P1 هم به حالت مسدود میره یعنی واسه اینم قسمت IF دستور Wait سمافور s اجرا میشه
(۰۲ دى ۱۳۹۱ ۱۱:۳۴ ب.ظ)irpersian20 نوشته شده توسط: قسمت دوم
p0 ابتدا s را صفر کرده و به حالت بلاک نمیرود .چون شرط بلاک مگر کوچکتر از ۰ نمی باشد؟
تکلیف q چه میشود؟
ببخشید میدونم داغونم تو این مبحث
خب واسه ی این حالتم ما میدونیم که مقدار اولیه s=q=1 هستش پس فرآیند P0 به راحتی یکی از s کم میکنه و میره دستور بعدیش در این خط نیز q رو یکی کم میکنه و به راحتی وارد ناحیه بحرانیش میشه. ولی بر عکس فرآیند P1 که میخواد این دو دستور رو اجرا کنه چون مقدار هر دو سمافور توسط فرآیند P0 مقدار ۰ دارن پس فرآیند P1 به حالت مسدود میره.
**** سمافور q,s قابلیت اجرای یک دستور Wait رو دارند (چون مقدار اولیه این دو سمافور ۱ است).
موضوعهای مرتبط با این موضوع... |
|||||
موضوع: | نویسنده | پاسخ: | بازدید: | آخرین ارسال | |
آموزش مکالمه زبان انگلیسی برای مبتدی ها + مکالمه وحشتناک واقعی | cyruskingsolomon | ۰ | ۱,۹۸۳ |
۲۸ فروردین ۱۴۰۰ ۰۲:۵۸ ب.ظ آخرین ارسال: cyruskingsolomon |
|
بن بست کامپیوتر ۹۵ | Hopegod | ۱۶ | ۱۴,۴۸۹ |
۰۱ اردیبهشت ۱۳۹۷ ۰۸:۴۹ ب.ظ آخرین ارسال: mahshid_dd |
|
بن بست | mmm1374 | ۱ | ۱,۸۶۵ |
۱۴ اسفند ۱۳۹۵ ۰۴:۱۸ ب.ظ آخرین ارسال: arash691 |
|
بن بست IT95 | Never.forget | ۱ | ۱,۸۵۲ |
۱۳ دى ۱۳۹۵ ۰۸:۵۸ ب.ظ آخرین ارسال: husen |
|
بن بست | irpersian20 | ۰ | ۱,۶۴۰ |
۳۱ اردیبهشت ۱۳۹۴ ۱۲:۵۵ ق.ظ آخرین ارسال: irpersian20 |
|
علت عدم بن بست در قفل گذاری درختی | --masumeh | ۱ | ۲,۶۳۹ |
۱۲ بهمن ۱۳۹۳ ۰۸:۳۸ ب.ظ آخرین ارسال: zibaziba |
|
سوال در مورد بن بست | tm.viper | ۱۳ | ۶,۹۲۹ |
۱۱ بهمن ۱۳۹۳ ۰۵:۵۹ ب.ظ آخرین ارسال: mostafa2012 |
|
بن بست مهندسی کامپیوتر ۹۱ | bluebaran | ۲ | ۲,۶۰۹ |
۱۰ بهمن ۱۳۹۳ ۰۶:۱۷ ب.ظ آخرین ارسال: bluebaran |
|
بررسی سوالی در رابطه با بن بست | gogooli | ۱ | ۱,۸۵۸ |
۰۹ بهمن ۱۳۹۳ ۰۶:۴۳ ب.ظ آخرین ارسال: tm.viper |
|
سوال ۷۶ سال ۸۵(بن بست) | gogooli | ۴ | ۲,۶۲۰ |
۰۶ بهمن ۱۳۹۳ ۰۷:۵۱ ب.ظ آخرین ارسال: gogooli |
Can I see some ID?
Feeling left out?
نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close