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