وقفه

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به ناوبری پرش به جستجو

در فرهنگ رایانه، وقفه یا انترراپت (به انگلیسی: Interrupt) یک سیگنال به ریزپردازنده است که به توجه و پاسخ سریع CPU نیاز دارد. هنگامی که یک وقفه رخ می‌دهد، پردازنده عملیات جاری خود را متوقف می‌کند تا به درخواست وقفه رسیدگی کند. ریزپردازنده‌های خانواده ۸۰۸۶ به وقفه‌های تولید شده به وسیله سخت‌افزار و نرم‌افزار پاسخ می‌دهند که به ترتیب به آن‌ها وقفه‌های سخت‌افزاری، و وقفه‌های نرم‌افزاری گفته می‌شود.

فرض کنید که قرار است بین هارد و سی پی یو ارتباط برقرار شودو هرگاه خواندن تمام شد cpu مطلع شود اگر یک بیت برای اینکار بگذاریم و cpu دائماً چک کند هزینه بر است اما وقفه نیاز به کنترل cpu ندارد و هر وقت خواندن تمام شد هارد یک وقفه برای cpu می‌فرستد.

انواع وقفه

۲۵۶ سطح الویت توسط پردازنده‌های ۸۰x۸۶ پشتیبانی می‌شود که می‌توان آن‌ها را به سه گروه کلی تقسیم کرد:

  • وقفه‌های داخلی سخت‌افزاری
  • وقفه‌های خارجی سخت‌افزاری
  • وقفه‌های نرم‌افزاری

وقفه‌های داخلی سخت‌افزاری (internal hardware-interrupts) به دلیل رخ دادن وضعیت معینی که درحین اجرای یک برنامه پیش آمده تولید می‌شوند (مانند تقسیم بر صفر).

وقفه‌هایی که در اثر خطا بوجود می‌آید تله (trap) هم نامیده می‌شود. تله باعث سقط برنامه می‌شوند.

این وقفه‌ها توسط سخت‌افزار اداره می‌شوند و امکان تغییر آن‌ها وجود ندارد. اما با وجودی‌که نمی‌توان آن‌ها را مستقیماً مدیریت کرد، این امکان وجود دارد که از اثر آن روی کامپیوتر به نحو مفیدی استفاده شود.

مثال. سخت‌افزار وقفه شمارنده ساعت کامپیوتر را چندبار در ثانیه فراخوانی می‌کند تا زمان را نگه دارد. می‌توان برنامه‌ای نوشت که مقدار شمارنده ساعت را خوانده آن را به شکل قابل درک کاربر به صورت ساعت و دقیقه تبدیل کند. وقفه‌های خارجی سخت‌افزاری

وقفه‌های خارجی سخت‌افزاری (external hardware-interrupts) خارج از CPU و توسط دستگاه‌های جانبی، مانند صفحه کلید، چاپگر، کارت‌های ارتباطی یا کمک پردازنده تولید می‌شوند.

دستگاه‌های جانبی با ارسال وقفه به CPU خواستار قطع اجرای برنامه فعلی شده و CPU را متوجه خود می‌کنند. آن‌ها به پایه (maskable interrupts) INTR یا (non maskable interrupts) NMI پردازنده متصل هستند.

وقفه‌های دستگاه‌ها می‌توانند از طریق مداری به نام PIC 8259A، که کارش منحصراً سروکار داشتن با این نوع وقفه هاست، به پردازنده ارسال شوند. مدار (programmable interrupt controller) PIC که توسط CPU کنترل می‌شود سیگنال‌هایش را روی پایه INTR قرار می‌دهد و امکان فعال و غیرفعال کردن وقفه‌ها و تغییر سطح الویت را تحت نظارت یک برنامه می‌دهد.

دستورات STI و CLI می‌توانند برای فعال و غیرفعال کردن وقفه‌هایی که روی پایه INTR ارسال می‌شوند بکار روند که البته روی وقفه‌های NMI تأثیری ندارد. وقفه‌های نرم‌افزاری

وقفه‌های نرم‌افزاری (software interruptions) در نتیجه دستورالعمل int در یک برنامه در حال اجرا تولید می‌شوند.

برنامه‌نویس می‌تواند با دادن دستور int یک وقفه نرم‌افزاری تولید کند. بدین طریق بلافاصله اجرای برنامه فعلی را متوقف می‌کند و CPU را به روتین وقفه هدایت می‌کند. برنامه‌نویس از طریق وقفه‌ها می‌تواند در برنامه با وسایل جانبی ارتباط برقرار کند. استفاده از وقفه‌ها باعث کوتاهتر شدن کد برنامه و درک آسانتر و اجرای بهتر آن می‌شود.

روتین‌های وقفه نرم‌افزاری بخشی از سیستم عامل هستند. از اینرو وقفه‌های نرم‌افزاری را می‌توان به دو گروه تقسیم کرد؛ وقفه‌های سیستم عامل DOS و وقفه‌های BIOS. وقفه‌های DOS آسانتر استفاده می‌شوند اما از وقفه‌های BIOS که قسمتی از سخت‌افزار هستند کندتر هستند.

DOS این نوع وقفه‌ها را برای اجرای (application programming interface) API خودش استفاده می‌کند. بیشتر سیستم عامل‌های جدید مانند Windows و Unix واسطه C-based را استفاده می‌کنند.

جستارهای وابسته[ویرایش]

منابع[ویرایش]

  • نورتن، پیتر، (و سایر نویسندگان)، کتاب مرجع برنامه‌نویسان سیستمهای PC، مترجم: محمدحسین مختارانی، انتشارات ناقوس، ۱۳۷۳.