وقفه

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

فرض کنید که قرار است بین دیسک سخت و CPU ارتباطی برقرار شود و هرگاه عملیات خواندن از روی دیسک تمام شد، CPU مطلع شود. اگر قرار بود یک بیت برای این کار در نظر بگیریم و CPU دائماً پایان عملیات خواندن را بررسی کند، سازوکاری هزینه برخواهد بود. اما نکتهٔ مهم اینجاست که وقفه نیاز به کنترل CPU ندارد و هر وقت عملیات خواندن (یا هر عملیات مشابهی) تمام شود، کنترل‌کنندهٔ دیسک سخت یک وقفه برای CPU می‌فرستد.

انواع وقفه 
۲۵۶ سطح اولویت توسط پردازنده‌های x86 پشتیبانی می‌شود که می‌توان آن‌ها را به سه گروه کلی تقسیم کرد:
 وقفه‌های داخلی سخت‌افزاری
 وقفه‌های خارجی سخت‌افزاری
 وقفه‌های نرم‌افزاری

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

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

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

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

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

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

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

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

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

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

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

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

پاسخ پردازنده 
پردازنده سیگنال ماشهٔ وقفه را در طول هر چرخهٔ دستورالعمل نمونه‌برداری می‌کند و فقط در صورت ادعای سیگنال هنگام نمونه‌گیری، به ماشه پاسخ می‌دهد. صرف نظر از روش راه انداز، پردازنده پردازش را در مرز دستورالعمل بعدی پس از یک ماشهٔ شناسایی شده آغاز می‌کند، بنابراین اطمینان حاصل می‌کند که
 شمارنده برنامه (PC) در مکان شناخته شده‌ای ذخیره می‌شود.
 تمام دستورالعمل‌های قبلی که توسط رایانه شخصی به آن اشاره شده‌است، به‌طور کامل اجرا شده‌اند.
 هیچ دستورالعملی فراتر از آنچه توسط رایانهٔ شخصی به آن اشاره شده، اجرا نشده‌است، یا هرگونه دستورالعملی قبل از رسیدگی به وقفه لغو می‌شود.
 حالت اجرای دستورالعمل‌های نشان داده شده توسط کامپیوتر مشخص است.

پیاده‌سازی سیستم 
interrupts ممکن است در سخت‌افزار به عنوان یک مولفه مشخص با خطوط کنترل اجرا شود، یا ممکن است در زیر سیستم حافظه ادغام شود.

اگر در سخت‌افزار به عنوان یک مولفه مجزا اجرا شود، یک مدار کنترل‌کننده وقفه مانند کنترل‌کننده وقفه برنامه‌ریزی (IBM) PCM ممکن است بین دستگاه قطع کننده و پین قطع کننده پردازنده به چندین منبع قطع در یک یا دو خط پردازنده به‌طور چندگانه متصل شود. در دسترس. اگر به عنوان بخشی از کنترل‌کننده حافظه اجرا شود، وقفه‌ها در فضای آدرس حافظه سیستم ترسیم می‌شوند.

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

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

اتوبوس معماری صنعت استاندارد (ISA) از وقفه‌های ناشی از لبه استفاده می‌کند، بدون آنکه دستگاه‌ها قادر به اشتراک خطوط IRQ باشند، اما همه مادربردهای اصلی ISA شامل مقاومت‌های کششی بر روی خطوط IRQ خود هستند، بنابراین دستگاه‌های ISA خوش رفتار دارای خطوط IRQ هستند باید فقط خوب کار کند پورت موازی همچنین از وقفه‌های لبه فعال استفاده می‌کند. بسیاری از دستگاه‌های قدیمی تصور می‌کنند که آنها از خطوط IRQ به‌طور انحصاری استفاده می‌کنند و اشتراک گذاری آنها از نظر الکتریکی ایمن نیست.

به سه روش می‌توان چندین دستگاه «مشترک یک خط» را مطرح کرد. اول با هدایت انحصاری (سوئیچینگ) یا اتصال انحصاری (به پین‌ها) است. بعدی با اتوبوس است (همه به یک خط گوش دادن متصل هستند): کارتهای یک اتوبوس باید بدانند که چه زمانی باید صحبت کنند یا صحبت نکنند (یعنی اتوبوس ISA). گفتگو را می‌توان به دو روش آغاز کرد: با استفاده از قفل انباشته یا با دروازه‌های منطقی. گیت‌های منطقی انتظار دارند که یک جریان مستمر داده برای سیگنال‌های کلیدی کنترل شود. باتری‌ها فقط در مواقعی که قسمت از راه دور دروازه را بیش از حد آستانه تحریک می‌کند، باعث می‌شوند، بنابراین نیازی به سرعت مذاکره نیست. هر کدام دارای سرعت و مزایای مسافت خود هستند. به‌طور کلی، ماشه روشی است که در آن تحریک تشخیص داده می‌شود: بالا رفتن لبه، افتادن لبه، آستانه (اسیلوسکوپ می‌تواند طیف گسترده‌ای از اشکال و شرایط را تحریک کند).

راه اندازی وقفه‌های نرم‌افزاری باید در نرم‌افزار تعبیه شود (هم در سیستم‌عامل و هم در برنامه). برنامه "C" در هدر خود یک جدول ماشه (جدول توابع) دارد که هم برنامه و هم سیستم‌عامل آن را می‌دانند و به‌طور مناسب از آنها استفاده می‌کنند که مربوط به سخت‌افزار نیست. با این وجود این کار را با وقفه‌های سخت‌افزاری که به سی پی یو سیگنال می‌دهند اشتباه نگیرید (پردازنده از یک جدول توابع نرم‌افزار را درست مانند وقفه‌های نرم‌افزار اعمال می‌کند).

مشکل در اشتراک گذاری خطوط وقفه 
چندین دستگاه که دارای یک خط وقفه هستند (از هر سبک تحریک کننده) همه با توجه به یکدیگر به عنوان منابع وقفه جعلی عمل می‌کنند. با وجود تعداد زیادی دستگاه در یک خط، حجم کار در سرویس دهی به نسبت مربع تعداد دستگاه‌ها افزایش می‌یابد؛ بنابراین ترجیح داده می‌شود دستگاه‌ها به‌طور مساوی در خطوط وقفه موجود پخش شوند. کمبود خطوط وقفه در طراحی سیستم‌های قدیمی که خطوط وقفه رساناهای فیزیکی متمایز هستند، مشکلی است. وقفه‌های پیام دار، درصورتی که خط وقفه مجازی باشد، در معماری‌های سیستم جدید (مانند PCI Express) مورد پسند قرار گرفته و تا حد قابل توجهی این مشکل را برطرف می‌کند.

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

ترکیبی 
برخی از سیستم‌ها از ترکیبی از سیگنالینگ با سطح و لبه استفاده می‌کنند. سخت‌افزار نه تنها به دنبال لبه است، بلکه تأیید می‌کند که سیگنال وقفه برای مدت زمان مشخصی فعال است.

یک استفاده متداول از وقفه ترکیبی برای ورودی NMI (وقفه غیرقابل پوشاندن) است. از آنجا که NMIها به‌طور کلی رویدادهای مهم - یا حتی فاجعه بار - سیستم را نشان می‌دهند، با اجرای خوب این سیگنال سعی می‌شود با تأیید فعال بودن آن برای مدتی وقفه، معتبر باشد. این روش ۲ مرحله ای به از بین بردن وقفه‌های کاذب بر روی سیستم کمک می‌کند.

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

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

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

از آنجا که هویت وقفه با الگویی از بیت‌های داده نشان داده می‌شود، و نیازی به هادی فیزیکی جداگانه نیست، می‌توان بسیاری از وقفه‌های متمایز را به‌طور مؤثر مدیریت کرد. این امر نیاز به اشتراک گذاری را کاهش می‌دهد. پیام‌های وقفه را می‌توان از طریق یک گذرگاه سریال نیز منتقل کرد و نیازی به خطوط اضافی نیست.

PCI Express، یک گذرگاه رایانه ای سریال، از وقفه‌های پیام دار به‌طور انحصاری استفاده می‌کند.

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

اصطلاح قطع زنگ در معمولاً نام غلطی است. شبیه وقفه است، زیرا باعث می‌شود کارهایی توسط دستگاه انجام شود. با این حال، منطقه زنگ در بعضی اوقات به عنوان یک منطقه نظرسنجی شده اجرا می‌شود، گاهی اوقات منطقه زنگ در به ثبت دستگاه‌های فیزیکی می‌رسد، و گاهی اوقات منطقه زنگ در به‌طور مستقیم به ثبت دستگاه‌های فیزیکی متصل می‌شود. هنگام نوشتن یا ثبت مستقیم دستگاه‌های فیزیکی، ممکن است در واحد پردازنده مرکزی دستگاه (CPU) وقفه واقعی ایجاد شود.

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

چند پردازنده IPI 
در سیستم‌های چند پردازنده ای، یک پردازنده ممکن است از طریق وقفه‌های بین پردازنده ای درخواست قطع را برای پردازنده دیگر ارسال کند

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

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

با استفاده از پردازنده‌های چند هسته ای، می‌توان با استفاده از مقیاس گیرنده سمت (RSS) هنگام استفاده از NICهای چند منظوره، به بهبود عملکرد اضافی در مدیریت وقفه دست یافت. چنین NICها صف‌های دریافتی متعددی را برای جدا کردن وقفه‌ها ارائه می‌دهند. با مسیریابی هر یک از این وقفه‌ها در هسته‌های مختلف، پردازش درخواست‌های وقفه ایجاد شده توسط ترافیک شبکه دریافت شده توسط یک NIC واحد را می‌توان در چندین هسته توزیع کرد. توزیع وقفه‌ها در هسته‌ها توسط سیستم‌عامل به صورت خودکار انجام می‌شود یا مسیریابی وقفه‌ها (که معمولاً به آن میل IRQ گفته می‌شود) می‌تواند به صورت دستی پیکربندی شود.

یک اجرای کاملاً نرم‌افزاری توزیع ترافیک دریافت کننده، معروف به دریافت فرمان بسته (RPS)، بعداً در مسیر داده، به عنوان بخشی از عملکرد کنترل‌کننده وقفه، ترافیک دریافتی را بین هسته‌ها توزیع می‌کند. مزایای RPS نسبت به RSS شامل عدم نیاز به سخت‌افزار خاص، فیلترهای توزیع ترافیک پیشرفته تر و کاهش میزان وقفه‌های تولید شده توسط NIC است. به عنوان یک نقطه ضعف، RPS سرعت وقفه‌های بین پردازنده (IPI) را افزایش می‌دهد. دریافت فرمان هدایت جریان (RFS) با محاسبه محل کاربرد، رویکرد مبتنی بر نرم‌افزار را پیش می‌برد. بهبود عملکرد بیشتر با پردازش درخواست‌های وقفه توسط همان هسته‌هایی که بسته‌های خاص شبکه توسط برنامه مورد نظر مصرف می‌شوند، حاصل می‌شود

جستارهای وابسته 
 فهرست وقفه رالف براون
 زبان اسمبلی

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

معماری رایانه
وقفه‌ها