تالار گفتمان مانشت

نسخه‌ی کامل: سوال از فصل ورودی- خروجی، مبحث وقفه ها
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام به همه دوستان عزیزم

سوال مربوط به مبحث وقفه هاست، تست سراسری مهندسی کامپیوتر 74 هست. من این تست رو تو کتاب راهیان ارشد دیدم اما تو پوران هر چی گشتم به چشمم نخورد. به هر حال سیستم سوال و کلا حلش به نظرم کمی پیچیده اومد گفتم اینجا مطرح کنم تا شاید دوستان نخبه نظری در موردش داشته باشن.Wink

-یک پردازنده دارای چهار وقفه قابل پوشش به نام های INT1 و INT2 و INT3 و INT4 می باشد ه از لحاظ اولویت به ترتیت INT1 بیشترین اولویت و INT4 کمترین اولویت را دارد. در یک کاربرد از هر چهار پایه وقفه استفاده شده است. وقفه INT1 چهار بار و INT2 نیز 2 بار در ثانیه اتفاق می افتند. زمان اجرای روش های INT1 و INT2 و INT3 به ترتیب 25 و 50 و 100 میلی ثانیه است. ماکزیمم تاخیری که در اجرای INT3 ممکن است پیش آید کدام است (توجه داشته باشید که هر روتین وقفه تا به آخر اجرا می شود)؟
1) 20 میلی ثانیه 2)150 میلی ثانیه 3)175 میلی ثانیه 4)75 میلی ثانیه

جواب گزینه 3 اعلام شده. بچه‌ها لطفا تحلیل خودتون رو در مورد این جواب بگین.
فکر میکنم منظورش این بوده که اگه درخواست INT3 بشه ماکزیمم تاخیر اینه که INT1,INT2 نیز درخواست شده باشه و چون اولویت بیشتری داره باید صبر کنه تا اونها انجام بشن.
توی کتاب INT4 رو داده 100 نه INT3!

خوب توی پاسخ کتاب گفته شده وقفه 1 در هر 250 میلی ثانیه 1 بار و وقفه 2 در هر 500 میلی ثانیه 1 بار اجرا میشود. (واضحه چون 1 ثانیه میشه 1000 میلی ثانیه)
خط بعدش گفته 250=100+25+x
x=125-25=100 زمان اجرای وقفه سوم!

من فکر میکنم منظورش اینه که توی این 250 ثانیه 25 ثانیه اش میره واسه وقفه1 چون گفتیم یکبار انجام میشه.
واسه همین 25 رو ازش کم کرده ولی 250=100+25+x رو نفهمیدمBig Grin

در آخر هم گفته چون باید وقفه های 1 و2 قبل از 3 انجام بشن میشه 25+50+100=175
در ادامه صحبت های آفاق،وقفه سوم باید قبل از ۲۵۰ اجرابشه چون سر۲۵۰ میره واسه وقفه ۱و سر ۵۰۰ میره واسه وقفه دوم.ماکزیمم هم زمانیه که وقفه ای اول و دوم هردوزودتراز وقفه سوم اجرابشن.پس زمان اجرای هر سه روی هم باید کوچکتراز۲۵۰ باشه،چرا خود وقفه سوم هم هست؟چون اگ حتی وسط وقفه سوم دوباره وقفه اول بیاد،اجرای وقفه سوم متوقف و اجرای وقفه اول شروع میشه.
(28 آذر 1389 10:59 ق.ظ)sal_dovomi نوشته شده توسط: [ -> ]در ادامه صحبت های آفاق،وقفه سوم باید قبل از ۲۵۰ اجرابشه چون سر۲۵۰ میره واسه وقفه ۱و سر ۵۰۰ میره واسه وقفه دوم.ماکزیمم هم زمانیه که وقفه ای اول و دوم هردوزودتراز وقفه سوم اجرابشن.پس زمان اجرای هر سه روی هم باید کوچکتراز۲۵۰ باشه،چرا خود وقفه سوم هم هست؟چون اگه حتی وسط وقفه سوم دوباره وقفه اول بیاد،اجرای وقفه سوم متوقف و اجرای وقفه اول شروع میشه.

درسته فقط به این دقت نکردین ‌: توجه داشته باشید که هر روتین وقفه تا به آخر اجرا می شود" پس اگه در حین وقفه سوم وقفه اول فراخوانی بشه وقفه سوم تا آخر اجرا میشه.
من فکر میکنم اون 100 که جمع شده زمان اجرای وقفه 4 است چون برای مثال وقفه 4 داره اجرا میشه و ما درخواست وقفه 3 و 1 و 2 رو میدیم اونوقت باید صبر کنیم تا وقفه 4 تموم بشه وقفه 1 و2 هم انجام بشه که میشه 175

اما راهی که کتاب رفته رو نمیفهمم!
حق با آفاق هست. می گیم هر 250 میلی ثانیه وقفه 1 اجرا می شه. پس در طول این 250 میلی ثانیه ما می تونیم اجرای وقفه 2 یا 3 یا 4 رو داشته باشیم. بنابراین 250= 100+50+x. x زمان اجرای وقفه 3 هست. خب با این حساب x=100 .

حالا میریم سراغ ماکزیمم تاخیر. واضحه که قبل از وقفه 3 وقفه های 1 و 2 قطعا اجرا می شن پس داریم:
INT3= 100 + 25 +50=175

جواب همینه منتها کتاب با یه عدد اشتباه تو معادله اولی هممونو گیج کرده. ممنون بچه‌ها که وقت گذاشتین و فکر کردین. با خوندن جوابای شما من به نتایج بالا رسیدم.
نه!
این که توی اون 250 ms وقفه 2 اجرا میشه اصلا معلوم نیست.چون ممکنه توی 250ms بعدی اجرا بشه. کلا گفته هر ثانیه 2 بار اجرا میشه نگفته در فواصل معین!

راهش اینه:
ما میگیم ماکزیمم تاخیر وقتی اتفاق می افته که وقفه 4 در حال اجرا باشه (وقفه 4 رو در نظر گرفتیم چون اون اولویتش از وقفه 3 کمتره) به محض اجرای وقفه 4 ما درخواست وقفه 3 رو میدیم و بعد از اون وقفه 1 و 2 پس باید صبر کنیم تا وقفه 4 اجرا بشه و همچنین وقفه 1و2 که میشه 100+25+50=175

چرا میگم جواب کتاب اشتباهه چون اولا اومده خود زمان اجرای وقفه 3 رو هم جمع زده که اصلا درست نیست.ثانیا فقط خواسته به 175 برسه و بیخود چمع و تفریق کرده!
این مربوط به کنترل وقفه‌ها به روش موازی است دقت کنید که در این روش ما یه انکدر اولویت داریم که به وسیله یک ثبات ماسک که دقیقا به اندازه‌ی ورودی های انکدر اولویت(یا همون تعداد وقفه هاست) توجه کنید که در انکدر اولویت تا وقتی ورودی های اولویت دار یک هستند اهمیتی به ورودی های پایین‌تر نمی دهد،در این روش ماINT1 رو به ورودی اول انکدر و INT2 به ورودی دوم و INT3 به ورودی سوم وINT4 به ورودی چهارم وصل می کنیم پس با توجه به خصوصیت انکدر تا وقتی درخواست برای INT1 و INT2 وجود داره به درخواست INT3 نمی دهد ولی یه نکته‌ی دیگه هم هست یه وقفه وقتی در حال اجرا است نمیتونه دوباره درخواست وقفه بده یا بعبارتی دیگه مثلا دوبار پشت سرهم اجرای INT1 رو نمیتونیم داشته باشیم پس با توجه به نکات بالا بدترین حالت برای به تعویق افتادن INT3 به شکل زیر است:
INT1 INT2 INT1 INT2 INT1
که پس از اجرای بالا INT3 میتونه اجرا بشه پس 3*25+2*50
لینک مرجع