پیش‌نویس:Vectored interrupt

"این مقاله در حال ترجمه از ویکی انگلیسی است

لطفا حذف نشود."

در علوم رایانه، وقفه برداری (Vectored Interrupt) یک تکنیک پردازشی است که در آن، دستگاهِ ایجادکننده وقفه، پردازنده را مستقیماً به «روتین سرویس وقفه» (Interrupt Service Routine - ISR) مناسب هدایت می‌کند. این روش در تضاد با سیستم وقفه نظرسنجی (Polled Interrupt) قرار دارد؛ سیستمی که در آن یک روتین سرویس وقفه واحد باید با بررسی تک‌تک منابع احتمالی وقفه، منبع اصلی ایجاد آن را مشخص کند که فرآیندی کند و نسبتاً پرزحمت است.

وقفه‌های برداری با اختصاص یک کد منحصربه‌فرد به هر دستگاه وقفه‌دهنده (که معمولاً طول آن بین ۴ تا ۸ بیت است) پیاده‌سازی می‌شوند. هنگامی که درخواست وقفه یک دستگاه از سوی پردازنده تأیید (Acknowledge) می‌شود، آن دستگاه کد منحصربه‌فرد خود را از طریق گذرگاه داده (Data Bus) به پردازنده ارسال می‌کند و به پردازنده اعلام می‌کند که باید کدام روتین سرویس وقفه را اجرا کند.

 پیاده‌سازی 

وقفه‌های برداری اغلب در ریزپردازنده‌ها پیاده‌سازی می‌شوند. حتی نخستین ریزپردازنده ۸ بیتی که به‌صورت تجاری عرضه شد، یعنی Intel 8008 در سال ۱۹۷۱، دست‌کم از هفت بردار وقفه پشتیبانی می‌کرد؛ هرچند نکته جالب این است که این پردازنده هیچ قابلیتی برای ذخیره وضعیت خود هنگام وقوع وقفه نداشت. در ادامه، چند نمونه از نحوه پیاده‌سازی وقفه‌های برداری در ریزپردازنده‌ها آورده شده است:

 Intel 8080 

پردازنده Intel 8080 که در سال ۱۹۷۴ معرفی شد، می‌توانست با سخت‌افزار کمینه از هفت بردار وقفه پشتیبانی کند، یا با استفاده از Intel 8259 این تعداد را تا ۶۴ بردار وقفه افزایش دهد.

در روش با حداقل سخت‌افزار، لازم است سخت‌افزار خارجی یک دستور تک‌بایتی RST (مخفف Restart) را که به دستگاه ایجادکننده وقفه مربوط است، روی گذرگاه قرار دهد. دستور Restart در واقع فراخوانی یکی از هشت مکان حافظه است:

0، 8، 16، 24، 32، 40، 48 و 56

و به این ترتیب، امکان دسترسی مستقیم به هفت روتین سرویس وقفه فراهم می‌شود.

(ممکن است مکان 0 قابل استفاده نباشد، زیرا با عمل Reset مشترک است.)

زمانی که از Intel 8259 استفاده می‌شود، می‌توان به‌جای دستور RST، دستور CALL را صادر کرد؛ در نتیجه وقفه می‌تواند به هر نقطه‌ای از حافظه هدایت شود. همچنین می‌توان حداکثر ۹ عدد 8259 را به‌صورت آبشاری (Cascaded) به یکدیگر متصل کرد تا در مجموع تا ۶۴ بردار وقفه فراهم شود.

 Zilog Z80 

پردازندهٔ Zilog Z80 که در سال ۱۹۷۶ معرفی شد، از روش‌های وقفهٔ پردازندهٔ 8080 پشتیبانی می‌کند و چند روش جدید نیز به آن‌ها افزوده است. در حالت ۲ (Mode 2)، این پردازنده از ۱۲۸ بردار وقفه پشتیبانی می‌کند. ثبات I در Z80 بایت بالاییِ آدرس پایهٔ یک جدول شامل ۱۲۸ ورودی از آدرس‌های روتین‌های سرویس وقفه را فراهم می‌کند. دستگاه ایجادکنندهٔ وقفه بایت پایینیِ ورودی مربوط به خود در این جدول را ارائه می‌دهد. سپس Z80 مقدار شمارندهٔ برنامه (PC) را در پشته ذخیره می‌کند و با استفاده از این دو بایت، آدرسی می‌سازد تا آدرس روتین سرویس وقفه را در PC بارگذاری کند و در نتیجه پرش به آن روتین انجام شود.

 Western Digital WD16 

پردازندهٔ WD16 که در سال ۱۹۷۶ معرفی شد از ۱۶ بردار وقفه پشتیبانی می‌کند. هنگامی که یک وقفهٔ برداری دریافت می‌شود، وضعیت پردازنده و شمارندهٔ برنامه (PC) در پشته ذخیره می‌شوند. در هنگام تأیید وقفه (interrupt acknowledge)، WD16 یک شمارهٔ وقفهٔ چهار بیتی را که توسط دستگاه ایجادکنندهٔ وقفه ارائه می‌شود دریافت می‌کند. آدرس جدول بردار وقفه از محل حافظهٔ 0x0028 خوانده می‌شود و شمارهٔ وقفه به آن افزوده می‌گردد تا به یکی از ۱۶ واژهٔ موجود در جدول اشاره کند. سپس یک جابه‌جایی (offset) واژه‌ای از جدول خوانده شده و به آدرس همان جدول افزوده می‌شود. نتیجه در PC بارگذاری می‌شود و باعث پرش به روتین سرویس وقفه می‌گردد.

 Intel 8086 

پردازندهٔ Intel 8086 که در سال ۱۹۷۸ معرفی شد از ۲۵۶ بردار وقفه پشتیبانی می‌کند. وقفه‌ها در این پردازنده به‌صورت فراخوانی‌های طولانی (long call) هستند که وضعیت پردازنده را نیز ذخیره می‌کنند. هر وقفه دارای یک شمارهٔ وقفهٔ ۸ بیتی است. از این شماره برای یافتن یک segment:offset در جدول بردار وقفهٔ ۲۵۶ عضوی استفاده می‌شود که در آدرس‌های 0 تا 0x3FF ذخیره شده است. هنگامی که هر نوع وقفه‌ای رخ دهد، ابتدا وضعیت پردازنده در پشته قرار می‌گیرد، سپس CS و IP نیز ذخیره می‌شوند. بعد از آن شمارهٔ وقفه در عدد چهار ضرب می‌شود تا آدرس اجرای جدید از جدول بردار وقفه به‌دست آید و در پردازنده بارگذاری شود. روتین‌های وقفه معمولاً با دستور IRET پایان می‌یابند.

 جستارهای وابسته 
 وقفه نظرسنجی
 روتین سرویس وقفه

 منابع