در فرهنگ رایانه، وقفه یا انترراپت (به انگلیسی: Interrupt) یک سیگنال به ریزپردازنده است که به توجه و پاسخ سریع CPU نیاز دارد. هنگامی که یک وقفه رخ میدهد، پردازنده عملیات جاری خود را متوقف میکند تا به درخواست وقفه رسیدگی کند. ریزپردازندههای خانواده ۸۰۸۶ به وقفههای تولید شده به وسیله سختافزار و نرمافزار پاسخ میدهند که به ترتیب به آنها وقفههای سختافزاری، و وقفههای نرمافزاری گفته میشود.
وقفهها جزء مهمی از معماری کامپیوتر هستندو نحوه عملکرد آنها از ماشینی به ماشین دیگر ممکن است متفاوت باشد. وقفه راهکاری را فراهم میسازد تا اجرای دستورالعملهای جاری پردازنده موقتاً متوقف شده و دستورات سرویس دهی دیگری اجراء گردد و سپس از آن کنترل دوباره به برنامه وقفه داده شده باز گردد.
انواع وقفهها را میتوان به صورت زیر دسته بندی کرد:
- وقفههای برنامه (یاprogram check) که به دلیل اجرای بعضی دستورات رخ میدهند. مثلاً سرریز شدن محاسباتی تقسیم بر صفر, اجراء دستورالعمل غیر مجاز, رجوع به آدرس خرج از محدوده مجاز کاربر. به این وقفهها اغلب Trap یا تله گفته میشود.
- وقفههای زمان سنج(Timer) این وقفه به سیستم عامل امکان میدهد بعضی اعمال را به صورت مرتب در یک پریود زمانی خاص انجام دهد (مثل تنظیم ساعت, چک کردن سخت افزار و..).
- وقفههای I/O این وقفهها به وسیله کنترل کنندههای دستگاه I/O تولید میشوند تا کامل شدن طبیعی یک عمل یا بروز خطا در انجام عمل را نشان دهند.
- وقفههای نقص سخت افزار یا وقفههای Machine-check) مثل وقفهای که بر اثر خطای بیت توازن (parity) حافظه رخ میدهد یا وقفه نقص برق
- وقفه (Super Visor Call) که در واقع یک تقاضا از طرف برنامه کاربر جهت دریافت سرویس ویژهای از سیستم عالم است .
- وقفه Restart که با فشار دادن دکمه Reset ایجاد میشود .
در یک تقسیم بندی کلی میتوان وقفههای را سه دسته کرد:
وقفههای داخلی (trap) که بر اثر اجرای دستورات خود برنامه به صورت داخلی در CPU رخ میهند.
- وقفههای خارجی که از دستگاههای خارجی مثل دستگاههای ورودی یاخروجی ,DMA,تایمرها , صفحه کلید و خطاهای سخت افزاری ناشی میشوند.
- وقفههای نرم افزاری(یاهمان SVC) که بر اثر فراخوانی توابع سیستمی توسط برنامه رخ میدهند.
با اجرای مجدد برنامه , وقفههای داخلی به همان صورت قبلی دوباره رخ میدهند ولی وقفههای خارجی مستقل از دستورات برنامه و ناهمگام با برنامه میباشند.
اگر چند منبع همزمان تقاضاهایشان را از طریق یک خط وقفه به CPU اعلام کنند , آنگاه CPU با روش همه پرسی یا سرکشی(polling) منبع وقفه دهنده را تشخیص خواهد داد.)
وقفه ها
همانطوریکه در بحث مقدماتی ذکر شد، هدف از این مبحث تاکیدبر این نوع نگرش است که ارتباط ریزپردازنده با دستگاهای I/O مشابه روش متداول ارتباط با حافظه نیست و الزاما نیازمند روش دیگری است، که آن روش را وقفه نامیدیم.
وقفه، همانطوریکه از نامش پیداست، روشی است که در اجرای برنامه عادی و جاری ریزپردازنده وقفه به وجود می آورد و آن را بصورت موقت قطع می کند تا ریزپردازنده اقدام به اجرای یک برنامه دیگر نموده و پس از اتمام آن، کنترل اجرای برنامه توسط ریزپردازنده، مجددا” به برنامه ایی که قطع شده برگشته و اجرای آن را ادامه دهد. بنابراین مفهوم وقفه به هیچ وجه به معنی توقف کار ریزپردازنده نیست بلکه وقفه صرفا قطع برنامه جاری و رفتن به اجرای یک برنامه دیگر است.
وقفه ها جزء بسیار مهمی از معماری هر کامپیوتر هستند و البته نحوه عملکرد آنها از ماشینی به ماشین دیگر ممکن است متفاوت باشد. درمورد وقفه مباحث مفصلی در سایت میکرورایانه انجام شده است به فهرست مقالات سایت میکرورایانه مراجعه کنید. وقفه راهکاری را فراهم می سازد تا اجرای دستور العمل های جاری پردازنده موقتا متوقف شده و دستورات سرویس دهی دیگری اجرا گردند. پس از آن کنترل دوباره به برنامه وقفه داده شده باز خواهد گشت.
مثال هایی از انواع وقفه ها
– وقفه های در حین اجرای برنامه که در اثر اجرای دستور رخ می دهد. مثل وقفه تقسیم بر صفر که در اثر اجرای دستور تقسیم بر صفر رخ می دهد، یا اجرای دستور العمل با کد غیر مجاز، یا آدرس دهی به خارج از محدوده ی مجاز کاربر.
– وقفه های زمان سنج (Timer) این وقفه به سیستم عامل امکان می دهد بعضی اعمال را به صورت مرتب در یک پریودهای خاص زمانی انجام دهد. مثل تنظیم ساعت ، یا چک کردن سخت افزار و …
– وقفه های I/O این وقفه ها به وسیله کنترل کننده دستگاههای I/O تولید می شوند تا کامل شدن طبیعی اجرای یک برنامه (اتمام یک عمل توسط I/O مربوطه) و یا احیانا بروز خطا در حین اجرای آن عمل را نشان دهند.
– وقفه های نقص سخت افزار یا وقفه های (Machine Check) مثل وقفه ای که در اثر بروز خطای توازن رخ می دهد، یا وقفه ی نقص تغذیه سیستم.
– وقفه (Super Visor Call) که در واقع یک تقاضا از طرف برنامه کاربر جهت دریافت سرویس ویژه ای از سیستم عامل است.
دسته بندی وقفه ها
به صورت خیلی کلی می توان وقفه ها را به سه دسته اساسی تقسیم کرد:
– وقفه های داخلی: وقفه هایی است که در اثر اجرای دستورات در ریزپردازنده رخ می دهد (مثل وقفه تقسیم بر صفر).
– وقفه های خارجی :وقفه هایی است که در اثر وقوع یک اتفاق خارجی و از طرف دستگاههای سخت افزاری خارج از ریزپردازنده به وجود می آید.
– وقفه های نرم افزاری: وقفه هایی است که در اثر فراخوانی توابع سیستمی توسط برنامه رخ می دهد. در بعضی مواقع این نوع وقفه ها را در همان دسته بندی وقفه های داخلی قرار می دهند.
وقفه های نرم افزاری در اثر اجرای مجدد برنامه، دوباره به همان صورت قبلی رخ خواهد داد. در صورتی که وقفه های خارجی مستقل از دستورات برنامه است و ناهمگام با برنامه بوده و در اثر یک اتقاق خارجی رخ می دهد.
منابع
- نورتن، پیتر، (و سایر نویسندگان)، کتاب مرجع برنامهنویسان سیستمهای PC، مترجم: محمدحسین مختارانی، انتشارات ناقوس، ۱۳۷۳.
- http://fa.wikipedia.org/wiki/%D9%88%D9%82%D9%81%D9%87»