موضوع مقاله: خطای گذرگاه | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # خطای گذرگاه | مقدمه: در محاسبات، خطای گذرگاه خطایی است که توسط سخت‌افزار ایجاد شده و به یک سیستم عامل (سیستم عامل) اطلاع می‌دهد که پردازه ای در تلاش است تا به حافظه ای دسترسی پیدا کند که پردازنده از نظر فیزیکی نمی‌تواند آن را آدرس دهی کند: یک آدرس نامعتبر برای آدرس گذرگاه. | ## بخش 1: خطای گذرگاه | در استفاده مدرن در بیشتر معماری‌ها، این موارد بسیار نادرتر از خطاهای تقسیم‌بندی است که عمدتاً به دلیل نقض دسترسی حافظه رخ می‌دهد: مشکلات در آدرس منطقی یا مجوزها. SIGBUS همچنین می‌تواند ناشی از هرگونه خطای کلی دستگاه باشد که رایانه تشخیص می‌دهد، اگرچه خطای گذرگاه به ندرت به معنای شکسته شدن فیزیکی سخت‌افزار کامپیوتر است - به‌طور معمول به دلیل یک اشکال در نرم‌افزار ایجاد می‌شود. علل حداقل سه دلیل اصلی برای خطاهای باس وجود دارد: آدرس موجود نیست نرم‌افزار به CPU دستور می‌دهد تا آدرس حافظه فیزیکی خاصی را بخواند یا بنویسد. بر این اساس، پردازنده مرکزی این آدرس فیزیکی را روی گذرگاه آدرس خود قرار می‌دهد و از سایر سخت‌افزارهای متصل به پردازنده مرکزی می‌خواهد در صورت پاسخ دادن به این آدرس خاص، نتایج را برگردانند. اگر هیچ سخت‌افزار دیگری پاسخ ندهد، CPU یک ارور را برمی‌گرداند، حاکی از اینکه آدرس فیزیکی درخواست شده توسط کل سیستم رایانه ای شناسایی نشده‌است. تلاش برای دستیابی به آدرس حافظه مجازی تعریف نشده معمولاً به عنوان یک خطای تقسیم‌بندی به جای خطای گذرگاه در نظر گرفته می‌شود، اگرچه اگر MMU جدا باشد، پردازنده نمی‌تواند تفاوت را تشخیص دهد. دسترسی بدون تراز بیشتر پردازنده‌ها با بایت آدرس پذیر هستند، جایی که هر آدرس حافظه منحصر به فرد به یک بایت ۸ بیتی اشاره دارد. | ## بخش 2: خطای گذرگاه | اکثر پردازنده‌ها می‌توانند از هر آدرس حافظه به بایت‌های مشخصی دسترسی داشته باشند، اما به‌طور کلی نمی‌توانند به واحدهای بزرگتر (۱۶ بیت، ۳۲ بیت، ۶۴ بیت و غیره) دسترسی داشته باشند بدون اینکه این واحدها با یک مرز خاص تراز شوند (سیستم عامل x86 یک استثنا قابل توجه است به عنوان مثال، اگر دسترسی‌های چند بایت با ۱۶ بیتی تراز باشد، آدرس‌ها در ۰، ۲ ، ۴، ۶ و غیره، تراز شده در نظر گرفته می‌شوند و بنابراین قابل دسترسی هستند، در حالی که آدرس‌های ۱، ۳ ، ۵ و به همین ترتیب بدون تراز در نظر گرفته می‌شود و قابل دسترسی مستقیم نیستند، اگر دسترسی‌های چند بایت با۳۲ بیتی تراز باشند، آدرس‌های ۰، ۴ ، ۸، ۱۲ و غیره، تراز شده در نظر گرفته می‌شوند و بنابراین در دسترس هستند، و تمام آدرس‌های بین آنها بی تراز شناخته می‌شوند. تلاش برای دستیابی به واحدی بزرگتر از بایت در یک آدرس غیر تراز شده می‌تواند باعث خطای گذرگاه شود. برخی از سیستم‌ها بسته به معماری مورد استفاده ممکن است ترکیبی از این سیستم‌ها داشته باشند. با این حال، داده‌ها ممکن است از هر آدرس در حافظه بازیابی شوند، و بسته به دستورالعمل ممکن است یک بایت یا بیشتر باشند. پردازنده‌ها به‌طور کلی در تمام زمانها به داده‌ها در حد عرض کامل گذرگاه داده‌های خود دسترسی دارند. برای آدرس دهی به بایت‌ها، آنها به حافظه دربا عرض گذرگاه داده خود دسترسی پیدا می‌کنند سپس برای آدرس دهی به بایت‌های جداگانه، ماسک می‌زنند و تغییر مکان می‌دهند. سیستم‌ها این الگوریتم ناکارآمد را تحمل می‌کنند، زیرا این یک ویژگی اساسی برای اکثر نرم‌افزارها، به ویژه پردازش رشته‌است. | ## بخش 3: خطای گذرگاه | برخلاف بایت، واحدهای بزرگتر می‌توانند دو آدرس تراز را داشته باشند و بنابراین به بیش از یک بارگیری در گذرگاه داده نیاز دارند. پشتیبانی از پردازنده‌های مرکزی امکان‌پذیر است، اما این قابلیت به ندرت مستقیماً در سطح کد دستگاه مورد نیاز است، بنابراین طراحان پردازنده به‌طور معمول از اجرای آن اجتناب می‌کنند و در عوض برای دسترسی به حافظه غیرهمسطح خطاهای گذرگاه صادر می‌کنند. خطاهای صفحه بندی در freeBSD , Linux و Solaris وقتی صفحات حافظه مجازی را نمی‌توان صفحه بندی کرد، می‌توانند خطای گذرگاه را نشان دهند، به عنوان مثال زیرا ناپدید شده‌است (به عنوان مثال دسترسی به یک فایل نقشه‌برداری شده از حافظه یا اجرای یک تصویر باینری که هنگام اجرای برنامه کوتاه شده‌است)، یا به این دلیل که یک فایل نقشه‌برداری شده از حافظه که فقط ایجاد شده‌است، نمی‌تواند به صورت فیزیکی تخصیص یابد، زیرا دیسک پر شده. بخش غیرحضوری (x86) در x86 یک مکانیسم مدیریت حافظه قدیمی وجود دارد که به عنوان تقسیم‌بندی شناخته می‌شود. اگر برنامه، بخش انتخاب را با انتخاب بخش غیر موجود بارگیری کند (که تحت سیستم عامل سازگار با POSIX فقط با یک زبان اسمبلی قابل انجام است)، این استثنا ایجاد می‌شود. | ## جمع‌بندی | چاپ بیت‌های کم ارزش آدرس نشان می‌دهد که با مرز کلمه همخوانی ندارد ("dword" با استفاده از اصطلاحات x86).