یک پردازنده پایپ‌لاین‌شده چگونه استثناها را مدیریت می‌کند

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

استثناهامدیریت استثناتشخیص استثنا در پایپ‌لاین

~3 دقیقه مطالعه · آخرین به‌روزرسانی ۱۵ شهریور ۱۴۰۵

استثنا چیست

یک Exception (که بسته به منبعش گاهی Interrupt نیز نامیده می‌شود) یک رویداد غیرمنتظره در حین اجرای دستور است که جریان معمولی یک برنامه نمی‌تواند به‌تنهایی آن را مدیریت کند، مانند تلاش برای اجرای دستوری با یک opcode نامعتبر، سرریز محاسباتی، یا تلاش برای دسترسی به یک آدرس حافظه که برنامه اجازه دسترسی به آن را ندارد.

چرا استثناها را نمی‌توان به‌سادگی نادیده گرفت

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

تشخیص استثناها در یک طرح پایپ‌لاین‌شده

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

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

شباهت با خطرهای کنترلی

مدیریت یک استثنا شباهت زیادی به مدیریت یک شاخه پیش‌بینی‌نادرست‌شده دارد، که پیش‌تر در این مجموعه پوشش داده شد: دستوراتی که پس از دستور استثناساز واکشی شده‌اند، اما در واقع نباید اجرا شوند، باید از پایپ‌لاین تخلیه شوند، و کنترل باید به مکان دیگری بپرد، در این مورد، آدرس exception handler به‌جای یک مقصد شاخه.

دستور استثناساز:      IF ID EX MEM WB
دستورات بعدی:             IF ID [پس از تشخیص استثنا تخلیه می‌شوند]
Exception handler:                     IF [به‌جای آن واکشی می‌شود]

حفظ اطلاعات کافی برای بازیابی

پیش از انتقال کنترل به exception handler، پردازنده باید ثبت کند کدام دستور مسئله را ایجاد کرده، معمولاً با ذخیره آدرس آن در یک رجیستر اختصاصی، تا handler، یا سیستم‌عاملی که به آن متکی است، بتواند تصمیم بگیرد بعداً چه کاری انجام دهد: خاتمه دادن به برنامه، تلاش مجدد برای دستور پس از رفع مسئله زیربنایی، یا انجام برخی اقدامات اصلاحی دیگر.

چرا مدیریت درست استثنا اهمیت دارد

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

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

اصول کش: حافظه کوچک و سریع چگونه پیش‌بینی می‌کند بعداً چه چیزی نیاز است

یک کش فقط به این دلیل کار می‌کند که برنامه‌ها تمایل دارند داده یکسان یا نزدیک به هم را به‌طور تکراری دسترسی کنند نه به‌صورت تصادفی. این مقاله اصل محلیت که کش را مؤثر می‌کند را توضیح می‌دهد، یک کش مستقیم‌نگاشت‌شده چگونه داده را با استفاده از یک آدرس مکان‌یابی می‌کند، و در یک hit کش در مقابل یک miss کش چه اتفاقی می‌افتد.

ادامه

سلسله‌مراتب حافظه: چرا کامپیوترها از چند نوع حافظه استفاده می‌کنند

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

ادامه

تصورات غلط رایج درباره طراحی پردازنده و تصویر کلی فصل چهارم

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

ادامه

پایپ‌لاین‌های دنیای واقعی: مقایسه ARM و Intel، و تسریع ضرب ماتریس

مفاهیم نظری پایپ‌لاین در پردازنده‌های تجاری واقعی شکل مشخصی به خود می‌گیرند، که بسته به اهداف طراحی‌شان از نظر عمق پایپ‌لاین و عرض صدور به‌طور گسترده متفاوت‌اند. این مقاله مقایسه می‌کند ARM Cortex-A53 و Intel Core i7 چگونه پایپ‌لاینینگ را متفاوت برای کارایی توان در مقابل کارایی خام پیاده‌سازی می‌کنند، سپس نشان می‌دهد موازی‌سازی سطح دستور چگونه ضرب ماتریس را در عمل تسریع می‌کند.

ادامه

موازی‌سموازی‌سازی سطح دستور: اجرای بیش از یک دستور به‌طور هم‌زمانازی سطح دستور: اجرای بیش از یک دستور به‌طور هم‌زمان

موازی‌سازی سطح دستور: اجرای بیش از یک دستور به‌طور هم‌زمان

ادامه

خطرهای کنترلی: مدیریت شاخه‌ها در یک پردازنده پایپ‌لاین‌شده

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

ادامه