در این سریال در زمینه های سخت افزاری ، ما قبلاً به چرخه های اتوبوس خوانده شده و نوشتن نگاه کرده ایم. در این مقاله ما دسترسی مستقیم حافظه (DMA) و قطع کار را پوشش خواهیم داد. دانش در مورد DMA و قطع قطع می تواند در نوشتن کد که مستقیماً با دستگاه های IO رابط می شود مفید باشد (الگوی طراحی پورت سریال مبتنی بر DMA نمونه خوبی از چنین دستگاهی است).
ما در مورد موضوعات زیر بحث خواهیم کرد:
دسترسی مستقیم حافظه (DMA) | یک عمل معمولی DMA در اینجا شرح داده شده است. تعامل بین دستگاه اصلی CPU و DMA پوشش داده شده است. تأثیر DMA در حافظه نهان داخلی پردازنده نیز پوشش داده شده است. |
قطع دست زدن | رسیدگی به پردازنده وقفه های سخت افزاری در این بخش شرح داده شده است. |
چرخه تصدیق را قطع کنید | بسیاری از پردازنده ها به دستگاه سخت افزار قطع کننده اجازه می دهند تا خود را شناسایی کند. این سرعت کار را قطع می کند زیرا پردازنده می تواند مستقیماً از روال سرویس قطع برای دستگاه مناسب استفاده کند. |
الزامات هماهنگ سازی برای DMA و وقفه ها | طراحان نرم افزار باید در نظر داشته باشند که عملیات DMA را می توان در مرز چرخه اتوبوس آغاز کرد در حالی که وقفه ها فقط در مرز دستورالعمل ایجاد می شوند. |
دسترسی مستقیم حافظه (DMA)
- دستگاهی که مایل به انجام DMA است ، سیگنال درخواست اتوبوس پردازنده ها را ادعا می کند.
- پردازنده چرخه فعلی اتوبوس را تکمیل می کند و سپس سیگنال کمک هزینه اتوبوس را به دستگاه ادعا می کند.
- سپس دستگاه سیگنال Grant ACK BUS را ادعا می کند.
- این پردازنده در تغییر در حالت BUS GRANT ACK سیگنال را حس می کند و گوش دادن به داده ها و آدرس اتوبوس را برای فعالیت DMA شروع می کند.
- دستگاه DMA انتقال از منبع به آدرس مقصد را انجام می دهد.
- در طی این نقل و انتقالات ، پردازنده آدرس های موجود در اتوبوس را کنترل می کند و در صورت اصلاح هر مکان در طول عملیات DMA در پردازنده ذخیره می شود. اگر پردازنده آدرس ذخیره شده را در اتوبوس تشخیص دهد ، می تواند یکی از این دو عمل را انجام دهد:
- پردازنده ورود حافظه نهان داخلی را برای آدرس درگیر در عملکرد نوشتن DMA باطل می کند
- پردازنده هنگام شناسایی DMA ، حافظه پنهان داخلی را به روز می کند
- پس از اتمام عملیات DMA ، دستگاه با ادعای سیگنال انتشار اتوبوس اتوبوس را منتشر می کند.
- پردازنده از انتشار اتوبوس اذعان می کند و چرخه های اتوبوس خود را از نقطه ای که از آن خارج شده است از سر می گیرد.
قطع دست زدن
در اینجا ما توضیحات قطع را در سناریویی توصیف می کنیم که در آن سخت افزار از شناسایی دستگاهی که شروع وقفه کرده است ، پشتیبانی نمی کند. در چنین مواردی ، دستگاه های قطع کننده احتمالی باید در نرم افزار نظرسنجی شوند.
- یک دستگاه سیگنال قطع را در یک سطح قطع سخت ادعا می کند.
- پردازنده وقفه را ثبت می کند و منتظر است تا اجرای دستورالعمل فعلی را به پایان برساند.
- پس از اتمام اجرای دستورالعمل فعلی ، پردازنده با صرفه جویی در محتوای ثبت فعلی در پشته ، کنترل قطع را آغاز می کند.
- سپس پردازنده به حالت Supervisor تغییر می یابد و چرخه تصدیق قطع را آغاز می کند.
- هیچ دستگاهی به چرخه تأیید وقفه پاسخ نمی دهد ، بنابراین پردازنده بردار مربوط به سطح قطع را واگذار می کند.
- آدرس موجود در وکتور آدرس روال سرویس قطع (ISR) است.
- ISR تمام دستگاه ها را برای یافتن دستگاهی که باعث وقفه شده است ، نظرسنجی می کند. این کار با بررسی ثبت نام های وضعیت قطع در دستگاه هایی که می توانند باعث وقفه شوند ، انجام می شود.
- پس از قرار گرفتن در دستگاه ، کنترل به کنترل کننده مخصوص دستگاه قطع کننده منتقل می شود.
- پس از انجام روال خاص ISR کار خود ، ISR دستورالعمل "بازگشت از قطع" را اجرا می کند.
- اجرای دستورالعمل "بازگشت از وقفه" منجر به بازگرداندن وضعیت پردازنده می شود. پردازنده به حالت کاربر بازگردانده می شود.
چرخه تصدیق را قطع کنید
در اینجا ما توضیحات قطع را در سناریویی توصیف می کنیم که در آن سخت افزار از شناسایی دستگاهی که شروع وقفه کرده است ، پشتیبانی می کند. در چنین مواردی ، منبع دقیق وقفه در سطح سخت افزار قابل شناسایی است.
- یک دستگاه سیگنال قطع را در یک سطح قطع سخت ادعا می کند.
- پردازنده وقفه را ثبت می کند و منتظر است تا اجرای دستورالعمل فعلی را به پایان برساند.
- پس از اتمام اجرای دستورالعمل فعلی ، پردازنده با صرفه جویی در محتوای ثبت فعلی در پشته ، کنترل قطع را آغاز می کند.
- سپس پردازنده به حالت Supervisor تغییر می یابد و چرخه تصدیق قطع را آغاز می کند.
- دستگاه قطع کننده به چرخه تأیید قطع با شماره بردار برای وقفه پاسخ می دهد.
- پردازنده از شماره بردار به دست آمده در بالا استفاده می کند و بردار را می گیرد.
- آدرس موجود در وکتور آدرس روال سرویس قطع (ISR) برای دستگاه قطع کننده است.
- پس از انجام روال ISR کار خود را انجام داد ، ISR دستورالعمل "بازگشت از وقفه" را اجرا می کند.
- اجرای دستورالعمل "بازگشت از وقفه" منجر به بازگرداندن وضعیت پردازنده می شود. پردازنده به حالت کاربر بازگردانده می شود.
الزامات هماهنگ سازی برای DMA و وقفه ها
بسیاری از اوقات طراحان نرم افزار باید با ساختارهای داده ای که با دستگاه های وقفه یا DMA به اشتراک گذاشته می شوند ، همکاری کنند. این امر مستلزم انجام به روزرسانی های اتمی در مناطق بحرانی مشترک است.
هماهنگ سازی با وقفه ها
هنگامی که یک ساختار داده با ISR به اشتراک گذاشته می شود ، غیرفعال کردن وقفه برای اجرای به روزرسانی های منطقه بحرانی یک روش خوب است. به خاطر داشته باشید که غیرفعال کردن وقفه ها فقط باید به کدی که منطقه بحرانی را به روز می کند محدود شود. نگه داشتن وقایع غیرفعال برای مدت طولانی باعث افزایش زمان وقفه می شود.
گزینه دیگر استفاده از این واقعیت است که وقفه ها در مرزهای دستورالعمل پردازش می شوند. یک دستورالعمل واحد که خواندن و همچنین نوشتن را انجام می دهد می تواند برای انجام معامله اتمی استفاده شود. به عنوان مثال ، اگر پردازنده شما از افزایش حافظه مستقیم پشتیبانی می کند ، می توانید بدون وقفه در یک semaphore مشترک را افزایش دهید.
هماهنگ سازی با DMA
به اشتراک گذاری ساختار داده با دستگاه DMA مشکل است. این پردازنده می تواند یک عمل DMA را در مرز چرخه اتوبوس آغاز کند. این بدان معنی است که می توان یک عمل جدید DMA را در وسط اجرای دستورالعمل آغاز کرد (به خاطر داشته باشید که اجرای دستورالعمل شامل چندین چرخه اتوبوس است).
بهترین مکانیسم برای انجام به روزرسانی های بحرانی منطقه استفاده از چرخه اتوبوس Read-Myfy-Write است. با استفاده از این دستورالعمل ، به روزرسانی های اتمی می تواند در مناطق بحرانی انجام شود زیرا خواندن و نوشتن در یک چرخه ویژه اتوبوس به هم چسبیده اند.
گزینه دیگر غیرفعال کردن عملکرد DMA است. هنگام استفاده از این تکنیک ها باید از احتیاط شدید استفاده شود.