از نظر مجازی .
تمام کامپیوتر ها راهکاری را فراهم می کنند تا قطعات دیگر (مثل I/O و حافظه ) ،در کار عادی پردازنده وقفه ایجاد کنند .جدول زیر متداول ترین وقفه ها را نشان می دهد .
جدول : دسته بندی وقفه ها برنامه وقفه هایی که در اثر بعضی از شرایط حاصل از اجرایی یک دستور العمل ،مثل سرریز ، تقسیم بر صفر ، سعی در اجرای دستور العمل نامعتبر ماشین ، و خروج از فضای حافظه مجازی رخ می دهند .
تایمر وقفه ای که توسط تایمر موجود در پردازنده ایجاد می شود .
این وقفه موجب می شود سیستم عامل بعضی از اعمال را به طور منظم انجام دهد .
I/O وقفه ای که توسط کنترلگر I/O ایجاد می شود تا کامل شدن یک عملیات یا وجود خطاهایی را در انجام عملیات اعلان کند .
خرابی سخت افزار این وقفه در اثر خرابی های مثل خرابی منبع تغذیه یا خطای توازن در حافظه رخ می دهد .
وقفه ها ابتدا برای بهبود کارایی پردازنده ایجاد شدند .
به عنوان مثال ، اغلب دستگاه های I/O خیلی کندتر از پردازند ه اند .
فرض کنید پردازنده ای بر اساس الگوی چرخ داده هایی را به چاپگر ارسال می کند پس از هر عملیات نوشتن ، پردازنده باید متوقف شود و منتظر بماند تا چاپگر آمادگی خودش را اعلان کند .
مدت این انتظار ممکن است صدها یا هزاران برابر چرخه های دستور العملی باشد که با حافظه کار ندارند .
بدیهی است که زمان CPU به هدر می رود .
در این شکل ، برنامه کاربر در بین فراخوانی های دستورالعمل WRIT (جهت عمل نوشتن ) ،پردازش هایی را انجام می دهد .
مجموعه دستورات 1 و 2 و 3 فاقد I/O هستند فراخوانی WRITE منجر به اجرای برنامه I/O می شود که یک برنامه سودمند سیستم است وعمل I/O واقعی را انجام می دهد .
این برنامه I/O شامل سه بخش است : دنباله ای از دستور العمل ها که درشکل مشخص شد و عمل I/O واقعی را انجام می دهند این عملیات ممکن است داده های خروجی را در میانگیری ذخیره کند و پارامترهایی را برای فرمان دادن به دستگاه آماده نماید .
فرمان I/O واقعی ، بدون استفاده از وقفه ها ، وقتی این فرمان صادر می شود ، برنامه ممکن است منتظر دستگاه I/O بماند تا این دستگاه وظیفه اش را انجام دهد ( یا به طور متناوب ، وضعیت دستگاه I/O را کنترل نماید تا مشخص شود عمل I/O تمام شد یا خیر ).
دنباله ای از دستور العمل ها که در شکل با شماره 5 مشخص شد و عملیات را کامل می کند .
این عملیات ممکن است برچسبی را مقدار دهد که نشان دهنده موفقیت یا شکست آن باشد .
چون کامل شدن عمل I/O ممکن است مدت زیادی طول بکشد ، برنامه I/O منتظر می ماند تا عمل I/O کامل شود .
لذا برنامه I/O در نقطه فراخوانی WRITE به مدت زیادی منتظر می ماند .
وقفه ها و چرخه دستور العمل با استفاده از وقفه ها ، وقتی که عمل I/O در حال انجام است ،پردازنده می تواند دستور العمل های دیگری را اجرا کند .
جریان کنترل را در شکل در نظر بگیرید .
همانند قبل ،برنامه کار به نقطه ای می رسد که WRITE را فراخوانی می کند که یک فراخوان سبستم است .
برنامه I/O که به این روش فراخوانی شد .
فقط شامل کد آماده سازی و فرمان I/O واقعی است .
پس از اجرای این دستور العمل ها ،کنترل به برنامه کاربر بر می گردد .
در همین زمان ،دستگاه خارجی مشغول پذیرش داده ها از حافظه کامپیوتر و چاپ کردن آن است .
این عملیات I/O به طور همزمان با دستور العمل های برنامه کار در حال اجرا است .
وقتی دستگاه خارجی آماده ارائه خدمات شد ، یعنی آماده شد تا داده های بیشتری را از پردازنده بپذیرد ، قطعه I/O مربوط به آن دستگاه خارجی ، سیگنال درخواست وقفه را به پردازنده می فرستد .
پردازنده در پاسخ به این درخواست وقفه ، عمل برنامه فعلی را به تعویق می اندازد ، به برنامه ای می رود تا به آن دستگاه I/O خدمات دهد و پس از ارائه خدمات به آن دستگاه ،اجرای برنامه به تعویق افتاده را از سر می گیرد .
برنامه ای که در اثر وقوع وقفه اجرا می شود تا به آن دستگاه I/O خدمات دهد ،اداره کننده وقفه نام دارد از دیدگاه برنامه کاربر ،وقفه موجب می شود برنامه ای که در حال اجرا است به تعویق افتد .
وقتی پردازش وقفه کامل شد ، اجرای برنامه از سر گرفته می شود لذا برنامه کاربر نباید کد خاصی برای پشتیبانی از وقفه داشته باشد ، بلکه پردازنده و سیستم عامل ،مسئول به تعویق انداختن برنامه کاربر واز سرگیری آن پس از پردازش وقفه اند .
برای پشتیبانی از وقفه ها ، چرخه وقفه به چرخه دستور العمل اضافه می شود در چرخه وقفه ، پردازنده سعی می کند تا ببین آیا وقفه ای رخ داد یا خیر .
وقفه یا سیگنال وقفه مشخص می شود .
اگر هیچ وقفه ای رخ نداده باشد ، پردازنده به چرخه واکشی ادامه می دهد و دستورالعمل بعدی برنامه فعلی را واکشی می کند .اگر وقفه ای رخ داده باشد ،پردازنده اجرای برنامه فعلی را به تعویق می اندازد و روال اداره کننده وقفه را اجرا می کند و برنامه اداره کننده وقفه ، عموماً بخشی از سیستم عامل است .
این برنامه ، ماهیت و قفه را تعین کرده عمل مورد نیاز را انجام می دهد .
در مثالی که مطرح کردیم ،اداره کننده وقفه تعیین می کند کدام قطعه I/O وقفه را تولید کرد و ممکن است به برنامه ای برود که داده های بیشتری را در قطعه I/O می نویسد .
وقتی روال اداره کننده وقفه کامل شد ، پردازنده می تواند اجرای برنامه کاربر را از نقطه ای که به تعویق افتاد از سر گیرد .
بدیهی است که در این فرآیند ، سربارهایی وجود دارد دستور العمل های اضافی بایددر روال اداره کننده وقفه اجرا شوند تا ماهیت وقفه را تعیین کنند و سپس عمل مورد نظر را انجام دهند .
بااین وجود ،چون زمان زیادی انتظار تکمیل عمل I/O صرف می شود ، با استفاده از وقفه ها ، پردازنده با کارایی بیشتری استفاده می گردد.
برای این که قدر این کارایی را بدانید یک نمودار زمانی براساس جریان کنترل است زمان لازم برای عمل I/O نسبتاً کوتاه است ،به طوری که این زمان ، از زمان لازم برای کامل شدن اجرای دستور العمل های بین دو دستور العمل نوشتن در برنامه کاربر ، کمتر است .
در حالت عادی ،به ویژه برای دستگاه کندی مثل چاپگر ،زمان لازم برای عمل I/O خیلی بیشتر از زمان اجرای دنباله ای از دستور العمل های کاربر است ، در این حالت ، برنامه کار بر قبل از کامل شدن عمل I/O جدیدی آغاز گردد.
شکل بعدی تنظیم زمانی این وضعیت را با استفاده وقفه ها و بدون استفاده از وقفه ها نشان می دهد .
می بینیم که کارایی تا حدی بهبود می یابد ، زیرا در اثنای عمل I/O دستور العمل کاربر اجرا می شوند .
پردازش وقفه وقوع وقفه منجر به رویدادهایی در نرم افزار و سخت افزار پردازنده می شود دنباله ای از این رویدادها نشان می دهد وقتی دستگاه I/O ،یک عمل I/O را کامل می کند .
دنباله ای از رویدادهای سخت افزاری زیر رخ می دهد : 1 این دستگاه ، سیگنال وقفه را به پردازنده می فرستد.
2 پردازنده قبل از پاسخگویی به وقفه ،اجرای دستور العمل فعلی را به پایان میرساند 3 پردازنده وجود وقفه را بررسی می کند و می بیند که وقفه ای رخ داده است ووصول سیگنال وقفه را به دستگاه صادر کننده وقفه اعلام می کند ، این اعلام وصول به دستگاه اجازه می دهد تا سیگنال وقفه اش را حذف کند .
4 اکنون پردازنده باید آماده انتقال کنترل به روال وقفه شود .
ابتدا باید اطلاعات لازم را برای از سرگیری برنامه فعلی از نقطه وقوع وقفه ، ذخیره نماید .
حداقل اطلاعات لازم ،کلمه وضعیت برنامه (PSW) و محل دستور العمل بعدی (PC) است .
این اطلاعات را می توان در پشته کنترل سیستم ذخیره کرد.
5 اکنون پردازنده ، آدرس محل ورود به روال وقفه ای را که به این وقفه پاسخ می دهد ، درشمارنده برنامه (PC) قرار می دهد .
بسته به معماری کامپیوتر وطراحی سیستم عامل ، ممکن است برای هر نوع وقفه یک برنامه اداره کننده وقفه وجودداشته باشد یا برای هر دستگاه و هر وقفه چنین برنامه ای موجود باشد اگر بیش از یک روال اداره کننده وقفه وجود داشته باشد ، پردازنده باید تصمیم بگیرد کدام را فراخوانی کند .
این اطلاعات ممکن است در سیگنال وقفه اصلی وجودداشته باشد ، یا ممکن است پردازنده از دستگاه صادر کننده وقفه درخواست کند که این اطلاعات را در اختیارش قرار دهد .
وقتی شمارنده برنامه بار شد ، پردازنده به چرخه دستور العمل بعدی می رود که با چرخه واکشی دستور العمل شروع می شود .
چون واکشی دستور العمل توسط محتویات شمارنده برنامه تعیین می شود ،نتیجه اش این است که کنترل به برنامه اداره کننده وقفه منتقل می شود .
اجرای این برنامه منجر به عملیات زیر میگردد : 6 در این نقطه ،شمارنده برنامه و PSW برنامه ای که دچار وقفه شد ، در پشته سیستم ذخیره شده است .
اما ، اطلاعات دیگری وجود دارد که به عنوان بخشی از حالت برنامه در حال اجزا محسوب می شود .
به خصوص محتویات ثبات های پردازنده باید ذخیره شوند ، زیرا این ثبات ها ممکن است توسط روال اداره کننده وقفه استفاده شوند .
6ـ در این نقطه ،شمارنده برنامه و PSW برنامه ای که دچار وقفه شد ، در پشته سیستم ذخیره شده است .
بنابراین تمام این مقادیر و سایر اطلاعات مربوط به حالت برنامه باید ذخیره شوند .
معمولاً روان اداره کننده وقفه با ذخیره محتویات تمام ثبات ها شروع می شود .
سایر اطلاعات مربوط به حالت برنامه در حال اجرا که باید ذخیره شوند ، در این مثال ، برنامه کاربر پس از اجرای دستور العمل موجود در محل N دچار وقفه می شود .
محتویات تمام ثابت ها و آدرس دستور العمل بعدی (N+1) در پشته کنترل ذخیره می شود که در مجموع M کلمه است .
مقدار اشاره گر پشته عوض می شود تا به بالای پشته اشاره کند ومقدار شمارنده برنامه عوض می شود تا به روال اداره کننده وقفه اشاره کند .
7ـ اکنون اداره کننده وقفه شروع به پردازش وقفه می کند .
این عمل شامل بررسی اطلاعات وضعیت مربوط به عملیات I/O یا رویداد دیگری است که منجر به وقفه شده است .
علاوه بر این ، شامل ارسال فرمان های دیگر؛ اعلام وصول هایی به دستگاه I/O است .
8ـ وقتی پردازش وقفه کامل شد ،مقادیر ثبات ها که در پشته ذخیره شدند از پشته بازیابی شده در ثبات ها بار می شوند .
9ـ درمرحله آخر ، مقادیر PC,PSW از پشته بازیابی می شوند .
در نتیجه ، دستور العمل بعدی که اجرا می شود ،مربوط به برنامه ای است که به تعویق افتاد بود .
ذخیره تمام اطلاعات مربوط به برنامه ای که دچار وقفه شد ، برای از سرگیری آن مهم است .
علتش این است که وقفه روالی نیست که توسط برنامه فراخوانی شود ،بلکه وقفه در هر زمانی و در هر نقطه از اجرای برنامه می تواند رخ دهد وقوع آن قابل پیش بینی نیست .
وقفه های چندگانه تاکنون در مورد وقوع یک وقفه بحث کردیم .
اما ، فرض کنید چند وقفه بتواند رخ دهد .
به عنوان مثال ،ممکن است برنامه ای درحال دریافت داده ها از خط ارتباطی و چاپ نتایج باشد .
چاپگر هر وقت عمل چاپ را کامل کرد وقفه ای را صادر می کند .
کنترلگر خط ارتباطی ،هر وقت به یک واحد از داده های می رسد وقفه ای را صادر می کند .
بسته به نظام ارتباطی ، واحد داده ممکن است یک کاراکتر یا یک بلوک باشد .
در هر مورد ،ممکن است در اثنای پردازش وقفه چاپگر ، وقفه ارتباطی رخ دهد .
دو روش برای برخورد با وقفه های چندگانه وجود دارد یک روش این است که در اثنای پردازش یک وقفه سایر وقفه ها ازکار انداخته شوند .
معنای وقفه از کار افتاده این فاصله زمانی وقفه ای رخ دهد ، عموماً منتظر می ماند و پس از این که وقفه ها دوباره به کار انداخته شدند ، پردازنده وجود وقفه ها را بررسی می کند .
لذا وقتی برنامه کاربر در حال اجرا است و وقفه ای رخ دهد .
وقفه ها فوراً از کار انداخته می شوند .
پس از کامل شدن روال