تصمیم گرفتم از اول سیستم عامل رو توضیح بدم بعدش برم سراغ ادامه کار
بحث وقفه خیلی مفصله اینجا اشاره کوچیک میکنم بش
از نظر مجازی تمامی کامپیوتر ها راهکارهایی را آماده میکنند که قطعات دیگر (مثل I/O و حافظه ) بتونند در کار عادی پردازنده وقفه ایجاد کنند.
دسته بندی متداول وقفه ها به صورت زیره:
-
برنامه : وقفه هایی که در اثر بعضی از شرایط حاصل از اجرای یک دستورالعمل مثل سر ریز و تقسیم بر صفر یا سعی در اجرای دستور العمل نا معتبر ماشین و یا خروج از فضای حافظه مجازی رخ میدن.
-
تایمر : وقفه ای که توسط تایمر موجود در پردازنده رخ میده که موجب این میشه که سیستم عامل بعضی از کاراشو نامظم انجام بده.
-
I/O : وقفه ای که توسط کنترلگر I/O ایجاد میشه و تا کامل شدن یک عملیات ویا وجود خطاهایی در انجام عملیات رو اعلان کنه .
-
خرابی سخت افزار : اینم که از اسمش مشخصه و زمانی رخ میده که مثلا خرابی تو منبع تغذیه یا خطای توازن در حافظه رخ بده.
وقفه ها اوایل برای بهبود کارایی پردازنده ایجاد شدند.
یه مثال :
اکثر دستگاههای I/O خیلی کندتر از پردازنده اند ، فرض کنید پردازنده بخواد بر اساس الگوی چرخه دستورالعمل داده هایی رو به چابگر ارسال کنه بعد از هر عملیات نوشتن پردازنده ، پردازنده باید متوقف شه تا چاپگر اعلام آمادگی کنه :)) مدت این انتظار ممکنه صدها یا هزاران برابر چرخه دستورالعملی باشه که با حافظه اصلا کار نداره مشخصه که زمان CPU به فنا میره.
قضیه به صورت همین شکلیه که پایین کشیدم :
قسمت الف --- تو شکل برنامه کاربر در بین فراخوانی های دستور العمل WRITE جهت عمل نوشتن پردازشهایی رو انجام میده.مجموعه دستورات 1 و 2 و3 فاقد I/O هستند فراخوانی WRITE منجر به اجرای برنامه I/O میشه که یه برنامه سومدمند سیستمه و عمل I/O واقعی سیستمه این برنامه از سه بخش تشکیل شده :
- دنباله ای از دستور العمل ها که در شکل با شماره 4 مشخص شد و عمل I/O واقعی رو انجام میدن این عملیات ممکنه داده های خروجی رو در میانگیری ذخیره کند و پارامترهایی رو برای فرمان دادن به دستگاه آماده کند.
- فرمان I/O واقعی بدون استفاده از وقفه ها . وقتی این فرمان صادر میشه برنامه ممکن است منتظر دستگاه بمونه تا این دستگاه وظیفش رو انجام بده یا متناوب چکش کنه ببینه تموم کرده یا نه
- دنباله ای از دستور العمل هاست که در شکل هم با شماره 5 مشخص شده و عملیات دستگاه رو کامل میکنه بنابراین برنامه I/O در نقطه فراخوانی WRITE به مدت زیادی منتظر میمونه.
قسمت ب--- همانند قبل برنامه کاربر به نقطه ای میرسد که WRITE را فراخوانی میکند که یک فراخوان سیستم است برنامه I/O که به این روش فراخوانی شد فقط شامل کد آماده سازی و فرما I/O واقعی است پس از اجرای این دستور العمل ها کنترل به برنامه کار بر باز میگردد در همین زمان دستگاه خارجی مشغول چذیرش داده هخا از حافظه کامپیوتر و چاپ کردن آن است این عملیات I/O به طور همزمان با دستور العمل های برنامه کاربر در حال اجراست .
قسمت ج --- در این حالت برنامه کاربر قبل از کامل شدن عمل I/O در افراخوانی اولین WRITE به دومین فراخوانی WRITE میرسد نتیجه اسن است که برنامه کاربر در آن نقطه متوقف میشودوقتی عمل I/O قبلی کامل شدممکن است Write جدید شروع شود و عمل I/O جدیدی آغاز گردد.