وقفه در مقابل استثنا
در هر رایانه، در طول اجرای عادی یک برنامه، ممکن است رویدادهایی رخ دهد که می تواند باعث توقف موقت CPU شود. چنین رویدادهایی را وقفه می گویند. وقفه ها می تواند ناشی از نقص نرم افزاری یا سخت افزاری باشد. وقفه های سخت افزاری را وقفه (به سادگی) می گویند، در حالی که وقفه های نرم افزاری را Exception می نامند. هنگامی که یک وقفه (نرم افزار یا سخت افزار) افزایش می یابد، کنترل به یک زیر روال ویژه به نام ISR (روال سرویس وقفه) منتقل می شود که می تواند شرایط ایجاد شده توسط وقفه را کنترل کند.
وقفه چیست؟
اصطلاح وقفه معمولاً برای وقفه های سخت افزاری در نظر گرفته می شود.آنها وقفه های کنترل برنامه هستند که توسط رویدادهای سخت افزاری خارجی ایجاد می شوند. در اینجا خارجی به معنای خارجی برای CPU است. وقفه های سخت افزاری معمولاً از منابع مختلفی مانند تراشه تایمر، دستگاه های جانبی (صفحه کلید، ماوس و غیره)، پورت های ورودی/خروجی (سریال، موازی و غیره)، درایوهای دیسک، ساعت CMOS، کارت های توسعه (کارت صدا، ویدئو) می آیند. کارت و غیره). این بدان معناست که وقفه های سخت افزاری تقریباً هرگز به دلیل برخی رویدادهای مربوط به برنامه در حال اجرا رخ نمی دهد. برای مثال، رویدادی مانند فشار دادن کلید روی صفحهکلید توسط کاربر، یا زمانبندی تایمر سختافزار داخلی میتواند این نوع وقفه را ایجاد کند و میتواند به CPU اطلاع دهد که دستگاه خاصی به توجه نیاز دارد. در شرایطی مانند آن، CPU هر کاری را که انجام میداد متوقف میکند (یعنی برنامه فعلی را متوقف میکند)، سرویس مورد نیاز دستگاه را ارائه میکند و به برنامه عادی باز میگردد. هنگامی که وقفه های سخت افزاری رخ می دهد و CPU ISR را راه اندازی می کند، سایر وقفه های سخت افزاری غیرفعال می شوند (به عنوان مثال در ماشین های 80×86). اگر نیاز دارید که وقفه های سخت افزاری دیگری در حین اجرای ISR رخ دهد، باید این کار را به صراحت با پاک کردن پرچم وقفه (با دستورالعمل sti) انجام دهید.در ماشینهای 80×86، پاک کردن پرچم وقفه فقط بر وقفههای سختافزاری تأثیر میگذارد.
استثناها چیست؟
Exception یک وقفه نرم افزاری است که می تواند به عنوان یک روال خاص کنترل کننده شناسایی شود. استثنا را می توان به عنوان یک تله که به طور خودکار رخ می دهد شناسایی کرد (یک تله را می توان به عنوان انتقال کنترل شناسایی کرد که توسط برنامه نویس آغاز می شود). به طور کلی، هیچ دستورالعمل خاصی مرتبط با استثنا وجود ندارد (تله ها با استفاده از یک دستورالعمل خاص تولید می شوند). بنابراین، یک استثنا به دلیل یک شرایط استثنایی که در طول اجرای برنامه رخ می دهد رخ می دهد. به عنوان مثال، تقسیم بر صفر، اجرای یک اپکد غیرقانونی یا خطای مرتبط با حافظه می تواند باعث استثنا شود. هرگاه استثنایی مطرح شود، CPU به طور موقت برنامه ای را که اجرا می کرد به حالت تعلیق در می آورد و ISR را شروع می کند. ISR شامل کارهایی است که باید با استثنا انجام داد. ممکن است مشکل را اصلاح کند یا در صورت عدم امکان با چاپ یک پیغام خطای مناسب، برنامه را به آرامی لغو کند.اگرچه یک دستورالعمل خاص باعث استثنا نمی شود، یک استثنا همیشه توسط یک دستورالعمل ایجاد می شود. برای مثال، خطای تقسیم بر صفر تنها می تواند در حین اجرای دستور تقسیم رخ دهد.
تفاوت بین وقفه و استثنا چیست؟
وقفه ها وقفه های سخت افزاری هستند، در حالی که استثناها وقفه های نرم افزاری هستند. وقوع وقفههای سختافزاری معمولاً سایر وقفههای سختافزاری را غیرفعال میکند، اما این در مورد استثناها صادق نیست. اگر نیاز دارید که وقفههای سختافزاری را تا زمانی که یک استثنا ارائه نشود، مجاز نکنید، باید پرچم وقفه را به صراحت پاک کنید. و معمولاً پرچم وقفه بر روی رایانه بر وقفه های (سخت افزاری) بر خلاف استثناها تأثیر می گذارد. این بدان معنی است که پاک کردن این پرچم از استثناء جلوگیری نمی کند.