موضوع مقاله: وقفه | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # وقفه | مقدمه: در فرهنگ رایانه، وقفه یک سیگنال به ریزپردازنده است که به توجه و پاسخ سریع CPU نیاز دارد. | ## بخش 1: وقفه | هنگامی که یک وقفه رخ می‌دهد، پردازنده عملیات جاری خود را متوقف می‌کند تا به درخواست وقفه رسیدگی کند. ریزپردازنده‌های خانوادهٔ ۸۰۸۶ به وقفه‌های تولید شده به وسیلهٔ سخت‌افزار و نرم‌افزار پاسخ می‌دهند که به ترتیب به آن‌ها وقفه‌های سخت‌افزاری، و وقفه‌های نرم‌افزاری گفته می‌شود. فرض کنید که قرار است بین دیسک سخت و CPU ارتباطی برقرار شود و هرگاه عملیات خواندن از روی دیسک تمام شد، CPU مطلع شود. اگر قرار بود یک بیت برای این کار در نظر بگیریم و CPU دائماً پایان عملیات خواندن را بررسی کند، سازوکاری هزینه برخواهد بود. اما نکتهٔ مهم اینجاست که وقفه نیاز به کنترل CPU ندارد و هر وقت عملیات خواندن (یا هر عملیات مشابهی) تمام شود، کنترل‌کنندهٔ دیسک سخت یک وقفه برای CPU می‌فرستد. اما با وجود آنکه نمی‌توان آن‌ها را مستقیماً مدیریت کرد، این امکان وجود دارد که از اثر آن روی کامپیوتر به نحو مفیدی استفاده شود. برای مثال سخت‌افزار وقفهٔ شمارندهٔ ساعت کامپیوتر را چندبار در ثانیه فراخوانی می‌کند تا زمان را نگه دارد. می‌توان برنامه‌ای نوشت که مقدار شمارندهٔ ساعت را خوانده و آن را به شکل قابل درک کاربر به صورت ساعت و دقیقه تبدیل کند. دستگاه‌های جانبی با ارسال وقفه به CPU خواستار قطع اجرای برنامه فعلی شده و CPU را متوجه خود می‌کنند. وقفه‌های دستگاه‌ها می‌توانند از طریق مداری به نام PIC 8259A، که کارش منحصراً سروکار داشتن با این نوع وقفه‌هاست، به پردازنده ارسال شوند. برنامه‌نویس از طریق وقفه‌ها می‌تواند در برنامه با وسایل جانبی ارتباط برقرار کند. استفاده از وقفه‌ها باعث کوتاه‌تر شدن کد برنامه و درک آسان‌تر و اجرای بهتر آن می‌شود. از این رو وقفه‌های نرم‌افزاری را می‌توان به دو گروه تقسیم کرد؛ وقفه‌های سیستم‌عامل DOS و وقفه‌های BIOS. وقفه‌های DOS آسان‌تر استفاده می‌شوند اما از وقفه‌های BIOS که قسمتی از سخت‌افزار هستند کندتر هستند. پاسخ پردازنده پردازنده سیگنال ماشهٔ وقفه را در طول هر چرخهٔ دستورالعمل نمونه‌برداری می‌کند و فقط در صورت ادعای سیگنال هنگام نمونه‌گیری، به ماشه پاسخ می‌دهد. صرف نظر از روش راه انداز، پردازنده پردازش را در مرز دستورالعمل بعدی پس از یک ماشهٔ شناسایی شده آغاز می‌کند، بنابراین اطمینان حاصل می‌کند که شمارنده برنامه (PC) در مکان شناخته شده‌ای ذخیره می‌شود. تمام دستورالعمل‌های قبلی که توسط رایانه شخصی به آن اشاره شده‌است، به‌طور کامل اجرا شده‌اند. هیچ دستورالعملی فراتر از آنچه توسط رایانهٔ شخصی به آن اشاره شده، اجرا نشده‌است، یا هرگونه دستورالعملی قبل از رسیدگی به وقفه لغو می‌شود. پیاده‌سازی سیستم interrupts ممکن است در سخت‌افزار به عنوان یک مولفه مشخص با خطوط کنترل اجرا شود، یا ممکن است در زیر سیستم حافظه ادغام شود. اگر در سخت‌افزار به عنوان یک مولفه مجزا اجرا شود، یک مدار کنترل‌کننده وقفه مانند کنترل‌کننده وقفه برنامه‌ریزی (IBM) PCM ممکن است بین دستگاه قطع کننده و پین قطع کننده پردازنده به چندین منبع قطع در یک یا دو خط پردازنده به‌طور چندگانه متصل شود. اگر به عنوان بخشی از کنترل‌کننده حافظه اجرا شود، وقفه‌ها در فضای آدرس حافظه سیستم ترسیم می‌شوند. IRQهای مشترک در صورت طراحی چندین دستگاه ممکن است یک خط وقفه لبه دار را به اشتراک بگذارند. خط قطع باید دارای مقاومت کششی یا کششی باشد تا در صورت عدم رانندگی فعال، به حالت غیرفعال خود که حالت پیش فرض آن است، برسد. دستگاه‌ها با کوتاه بردن خط به حالت غیر پیش فرض خط وقفه را سیگنال می‌دهند و در صورت عدم علامت وقفه، خط را شناور می‌کنند (آن را به‌طور فعال رانندگی نکنید). (این شبیه سیم کششی در بعضی از اتوبوس‌ها و واگن برقی است که هر مسافری می‌تواند بکشد تا به راننده اعلام کند که خواهان توقف است) با این وجود، ممکن است پالس‌های قطع از دستگاه‌های مختلف با هم ادغام شوند، اگر به موقع رخ دهند. برای جلوگیری از قطع وقفه، پردازنده باید در لبه عقب نبض ایجاد کند (به عنوان مثال اگر خط به بالا کشیده شود و پایین رانده شود، لبه در حال افزایش است). | ## بخش 2: وقفه | پس از شناسایی وقفه، پردازنده باید تمام دستگاه‌ها را از نظر سرویس مورد نیاز بررسی کند. وقفه‌های ایجاد شده در لبه مشکلی را ندارند که وقفه‌های ایجاد شده در سطح در به اشتراک گذاری دارند. سرویس دهی دستگاه با اولویت پایین می‌تواند خودسرانه به تعویق بیفتد، در حالی که قطع و وصل دستگاه‌های دارای اولویت بالا همچنان دریافت و سرویس می‌شوند. اگر دستگاهی وجود داشته باشد که پردازنده مرکزی از نحوه سرویس دهی آن اطلاع نداشته باشد، ممکن است وقفه‌های جعلی ایجاد کند، در سیگنالینگ وقفه دستگاه‌های دیگر اختلال ایجاد نمی‌کند. با این حال، از دست رفتن یک وقفه لبه دار آسان است - به عنوان مثال، هنگامی که وقفه‌ها برای یک دوره پوشانده می‌شوند - و مگر اینکه نوع خاصی از سخت‌افزار سخت افزاری وجود داشته باشد که رویداد را ضبط کند، بازیابی آن غیرممکن است. این مشکل باعث "قفل"‌های زیادی در سخت‌افزار اولیه رایانه شد زیرا پردازنده نمی‌دانست انتظار می‌رود کاری انجام دهد. سخت‌افزار مدرن تر اغلب دارای یک یا چند ثبت کننده وضعیت وقفه است که قفل درخواست‌ها را قطع می‌کند. کد دستوری لبه محور که به خوبی نوشته شده‌است می‌تواند این ثبت‌ها را بررسی کند تا اطمینان حاصل شود هیچ رویدادی از دست نرفته‌است. اتوبوس معماری صنعت استاندارد (ISA) از وقفه‌های ناشی از لبه استفاده می‌کند، بدون آنکه دستگاه‌ها قادر به اشتراک خطوط IRQ باشند، اما همه مادربردهای اصلی ISA شامل مقاومت‌های کششی بر روی خطوط IRQ خود هستند، بنابراین دستگاه‌های ISA خوش رفتار دارای خطوط IRQ هستند باید فقط خوب کار کند پورت موازی همچنین از وقفه‌های لبه فعال استفاده می‌کند. بسیاری از دستگاه‌های قدیمی تصور می‌کنند که آنها از خطوط IRQ به‌طور انحصاری استفاده می‌کنند و اشتراک گذاری آنها از نظر الکتریکی ایمن نیست. بعدی با اتوبوس است (همه به یک خط گوش دادن متصل هستند): کارتهای یک اتوبوس باید بدانند که چه زمانی باید صحبت کنند یا صحبت نکنند (یعنی اتوبوس ISA). گفتگو را می‌توان به دو روش آغاز کرد: با استفاده از قفل انباشته یا با دروازه‌های منطقی. گیت‌های منطقی انتظار دارند که یک جریان مستمر داده برای سیگنال‌های کلیدی کنترل شود. باتری‌ها فقط در مواقعی که قسمت از راه دور دروازه را بیش از حد آستانه تحریک می‌کند، باعث می‌شوند، بنابراین نیازی به سرعت مذاکره نیست. به‌طور کلی، ماشه روشی است که در آن تحریک تشخیص داده می‌شود: بالا رفتن لبه، افتادن لبه، آستانه (اسیلوسکوپ می‌تواند طیف گسترده‌ای از اشکال و شرایط را تحریک کند). راه اندازی وقفه‌های نرم‌افزاری باید در نرم‌افزار تعبیه شود (هم در سیستم‌عامل و هم در برنامه). برنامه "C" در هدر خود یک جدول ماشه (جدول توابع) دارد که هم برنامه و هم سیستم‌عامل آن را می‌دانند و به‌طور مناسب از آنها استفاده می‌کنند که مربوط به سخت‌افزار نیست. با این وجود این کار را با وقفه‌های سخت‌افزاری که به سی پی یو سیگنال می‌دهند اشتباه نگیرید (پردازنده از یک جدول توابع نرم‌افزار را درست مانند وقفه‌های نرم‌افزار اعمال می‌کند). با وجود تعداد زیادی دستگاه در یک خط، حجم کار در سرویس دهی به نسبت مربع تعداد دستگاه‌ها افزایش می‌یابد؛ بنابراین ترجیح داده می‌شود دستگاه‌ها به‌طور مساوی در خطوط وقفه موجود پخش شوند. کمبود خطوط وقفه در طراحی سیستم‌های قدیمی که خطوط وقفه رساناهای فیزیکی متمایز هستند، مشکلی است. وقفه‌های پیام دار، درصورتی که خط وقفه مجازی باشد، در معماری‌های سیستم جدید (مانند PCI Express) مورد پسند قرار گرفته و تا حد قابل توجهی این مشکل را برطرف می‌کند. برخی از دستگاه‌ها با رابط برنامه‌نویسی ضعیف طراحی شده هیچ راهی برای تعیین اینکه آیا آنها درخواست سرویس داده‌اند ارائه نمی‌دهند. اگر سرویس دهی نشود ممکن است قفل شود یا در غیر این صورت رفتار نادرستی از خود نشان می‌دهد. چنین دستگاه‌هایی نمی‌توانند وقفه‌های جعلی را تحمل کنند و همچنین اشتراک خط قطع را تحمل نمی‌کنند. با ارزان شدن منطق سخت‌افزار و ایجاد وقفه‌های قابل استفاده در سیستم‌های جدید، چنین دستگاه‌هایی بسیار نادرتر می‌شوند. سخت‌افزار نه تنها به دنبال لبه است، بلکه تأیید می‌کند که سیگنال وقفه برای مدت زمان مشخصی فعال است. | ## بخش 3: وقفه | از آنجا که NMIها به‌طور کلی رویدادهای مهم - یا حتی فاجعه بار - سیستم را نشان می‌دهند، با اجرای خوب این سیگنال سعی می‌شود با تأیید فعال بودن آن برای مدتی وقفه، معتبر باشد. در عوض، دستگاهی با ارسال یک پیام کوتاه از طریق برخی از رسانه‌های ارتباطی، معمولاً یک گذرگاه رایانه، درخواست خود را برای سرویس نشان می‌دهد. پیام ممکن است از نوعی باشد که برای وقفه‌ها اختصاص داده شده باشد، یا ممکن است از نوع قبلی مانند نوشتن حافظه باشد. وقفه‌های سیگنال شده پیام بسیار شبیه وقفه‌های لبه دار هستند، به این دلیل که وقفه یک سیگنال لحظه ای است تا یک وضعیت مداوم. به‌طور معمول، چندین وقفه علامت گذاری شده در پیام معلق با همان پیام (همان خط وقفه مجازی) مجاز به ادغام هستند، همان‌طور که وقفه‌های لبه ایجاد شده با فاصله نزدیک می‌توانند ادغام شوند. بردارهای وقفه با پیام می‌توان به اشتراک گذاشت، تا آنجا که می‌توان رسانه ارتباطی زمینه ای را به اشتراک گذاشت. هیچ تلاش اضافی مورد نیاز است از آنجا که هویت وقفه با الگویی از بیت‌های داده نشان داده می‌شود، و نیازی به هادی فیزیکی جداگانه نیست، می‌توان بسیاری از وقفه‌های متمایز را به‌طور مؤثر مدیریت کرد. پیام‌های وقفه را می‌توان از طریق یک گذرگاه سریال نیز منتقل کرد و نیازی به خطوط اضافی نیست. زنگ درب در تشابه دکمه ای که برای سیستم‌های رایانه ای اعمال می‌شود، اصطلاح زنگ در یا قطع زنگ در معمولاً برای توصیف مکانیزمی به کار می‌رود که به موجب آن یک سیستم نرم‌افزاری می‌تواند به دستگاه سخت‌افزاری رایانه سیگنال دهد یا به او اعلام کند که کارهایی برای انجام وجود دارد. به‌طور معمول، سیستم نرم‌افزاری داده‌ها را در برخی از مکان‌های حافظه شناخته شده و مورد توافق مشترک قرار می‌دهد و با نوشتن در یک مکان حافظه دیگر «زنگ خانه را» می‌زند. این مکان حافظه متفاوت اغلب منطقه زنگ در نامیده می‌شود و حتی ممکن است چندین زنگ در وجود داشته باشد که اهداف مختلفی در این منطقه داشته باشد. این عمل نوشتن به منطقه زنگ در حافظه است که «زنگ را به صدا درمی‌آورد» و به دستگاه سخت‌افزاری اطلاع می‌دهد که داده‌ها آماده و در انتظار هستند. این داده‌ها را معمولاً روی یک درایو دیسک سخت می‌نویسد، یا آنها را از طریق شبکه ارسال می‌کند، یا رمزگذاری می‌کند، و غیره اصطلاح قطع زنگ در معمولاً نام غلطی است. با این حال، منطقه زنگ در بعضی اوقات به عنوان یک منطقه نظرسنجی شده اجرا می‌شود، گاهی اوقات منطقه زنگ در به ثبت دستگاه‌های فیزیکی می‌رسد، و گاهی اوقات منطقه زنگ در به‌طور مستقیم به ثبت دستگاه‌های فیزیکی متصل می‌شود. هنگام نوشتن یا ثبت مستقیم دستگاه‌های فیزیکی، ممکن است در واحد پردازنده مرکزی دستگاه (CPU) وقفه واقعی ایجاد شود. وقفه‌های دربل را می‌توان با وقفه‌های پیام دار پیام مقایسه کرد، زیرا شباهت‌هایی به هم دارند. چند پردازنده IPI در سیستم‌های چند پردازنده ای، یک پردازنده ممکن است از طریق وقفه‌های بین پردازنده ای درخواست قطع را برای پردازنده دیگر ارسال کند کارایی وقفه‌ها سربار کم و تأخیر خوبی را در بار کم ایجاد می‌کنند، اما به میزان قابل توجهی با سرعت وقفه زیاد تخریب می‌شوند، مگر اینکه برای جلوگیری از چندین آسیب‌شناسی مراقبت شود. پدیده ای که در آن عملکرد کلی سیستم به دلیل مقادیر بیش از حد زمان پردازش صرف جابجایی با وقفه‌ها به شدت مانع می‌شود، طوفان وقفه نامیده می‌شود. هنگامی که سیستم تمام وقت خود را صرف پردازش وقفه‌ها می‌کند، به استثنای سایر کارهای مورد نیاز، اشکال مختلفی وجود دارد. در شرایط شدید، تعداد زیادی وقفه (مانند ترافیک بسیار بالای شبکه) ممکن است سیستم را کاملاً متوقف کند. برای جلوگیری از چنین مشکلی، یک سیستم‌عامل باید همان‌طور که برای اجرای فرایند برنامه‌ریزی می‌کند، برنامه وقفه در شبکه را برنامه‌ریزی کند. با استفاده از پردازنده‌های چند هسته ای، می‌توان با استفاده از مقیاس گیرنده سمت (RSS) هنگام استفاده از NICهای چند منظوره، به بهبود عملکرد اضافی در مدیریت وقفه دست یافت. با مسیریابی هر یک از این وقفه‌ها در هسته‌های مختلف، پردازش درخواست‌های وقفه ایجاد شده توسط ترافیک شبکه دریافت شده توسط یک NIC واحد را می‌توان در چندین هسته توزیع کرد. توزیع وقفه‌ها در هسته‌ها توسط سیستم‌عامل به صورت خودکار انجام می‌شود یا مسیریابی وقفه‌ها (که معمولاً به آن میل IRQ گفته می‌شود) می‌تواند به صورت دستی پیکربندی شود. یک اجرای کاملاً نرم‌افزاری توزیع ترافیک دریافت کننده، معروف به دریافت فرمان بسته (RPS)، بعداً در مسیر داده، به عنوان بخشی از عملکرد کنترل‌کننده وقفه، ترافیک دریافتی را بین هسته‌ها توزیع می‌کند. مزایای RPS نسبت به RSS شامل عدم نیاز به سخت‌افزار خاص، فیلترهای توزیع ترافیک پیشرفته تر و کاهش میزان وقفه‌های تولید شده توسط NIC است. | ## جمع‌بندی | دریافت فرمان هدایت جریان (RFS) با محاسبه محل کاربرد، رویکرد مبتنی بر نرم‌افزار را پیش می‌برد.