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