وقفه برداری‌شده

در علوم کامپیوتر، وقفه برداری یک تکنیک پردازش است که در آن دستگاه وقفه‌زن، پردازنده را به روال سرویس وقفه مناسب هدایت می‌کند. این در تضاد با سیستم وقفه سرکشی شده است که در آن یک روال سرویس وقفه واحد باید با بررسی تمام منابع وقفه بالقوه، منبع وقفه را تعیین کند، که یک فرآیند کند و نسبتاً پر زحمت است. وقفه‌های برداری با اختصاص یک کد منحصر به فرد به هر دستگاه وقفه‌زن، معمولاً چهار تا هشت بیت، حاصل می‌شوند. هنگامی که وقفه یک دستگاه تأیید می‌شود، دستگاه کد منحصر به فرد خود را از طریق گذرگاه داده به پردازنده ارسال می‌کند و به پردازنده می‌گوید که کدام روال سرویس وقفه را اجرا کند.

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

 اینتل ۸۰۸۰ 
اینتل ۸۰۸۰ از سال ۱۹۷۴ می‌تواند با سخت‌افزار کم از هفت بردار یا با استفاده از اینتل ۸۲۵۹ تا ۶۴ بردار پشتیبانی کند.

روش سخت‌افزاری حداقلی مستلزم آن است که سخت‌افزار خارجی یک دستورالعمل تک‌بایتی RST (راه‌اندازی مجدد) مرتبط با دستگاه وقفه‌دهنده را روی گذرگاه مسدود کند. دستورالعمل راه‌اندازی مجدد، فراخوانی یکی از هشت مکان است: ۰، ۸، ۱۶، ۲۴، ۳۲، ۴۰، ۴۸ و ۵۶ که امکان دسترسی مستقیم به هفت روال سرویس وقفه را فراهم می‌کند. (مکان ۰ ممکن است قابل استفاده نباشد زیرا با تنظیم مجدد به اشتراک گذاشته شده است.)

هنگام استفاده از Intel 8259، می‌توان به جای RST، دستور CALL صادر کرد که به این ترتیب می‌توان وقفه را به هر مکانی در حافظه ارسال کرد. حداکثر نه 8259 را می‌توان به صورت آبشاری (cascaded) ایجاد کرد تا حداکثر 64 بردار وجود داشته باشد.
بندانگشتی|NEC D8259AC، کنترل‌کننده وقفه‌ای که در مادربرد اصلی کامپیوتر شخصی IBM استفاده می‌شد. همین تراشه را می‌توان با اینتل ۸۰۸۰ نیز استفاده کرد.

 زیلوگ Z80 
تراشه Zilog Z80 ساخت سال ۱۹۷۶ از روش‌های وقفه ۸۰۸۰ پشتیبانی می‌کند و چند روش خاص خود را نیز به آن اضافه کرده است. در حالت ۲، Z80 ​​از ۱۲۸ بردار پشتیبانی می‌کند. رجیستر Z80 I بایت بالای آدرس پایه را برای یک جدول ۱۲۸ ورودی از آدرس‌های روال سرویس فراهم می‌کند. دستگاه وقفه‌دهنده بایت پایین ورودی جدول خاص خود را فراهم می‌کند. Z80 شمارنده برنامه (PC) را وارد می‌کند و سپس با استفاده از این دو بایت، آدرسی را برای بارگذاری آدرس روال سرویس وقفه در PC تشکیل می‌دهد و باعث پرش می‌شود. 

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

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

 منابع