Bosh sahifa Wiki Bus Error

Bus Error

Bus Error — protsessor yoki operatsion tizim memory accessni address mavjud bo‘lsa ham fizik, alignment yoki backing-object muammosi sabab bajara olmaganda yuz beradigan fault.

Signal sabablari

Unixda SIGBUS ko‘pincha misaligned access, memory-mapped faylning truncate qilingan qismiga tegish yoki device mappingdagi hardware xatosi bilan bog‘liq. Platform tafsiloti farq qiladi.

Segfault bilan farqi

Segmentation fault odatda virtual mapping/permission, bus error esa mapping ortidagi accessni bajarish muammosini anglatadi. Biroq signal tasnifi architecture va OSga bog‘liq, mutlaq portable farq emas.

Mapped fayl

Mapped fayl page’i access paytida file size’dan tashqarida qolsa VMA mavjud, lekin backing page yo‘q. Bu SIGBUSning klassik misolidir. Concurrent truncation lifecycle protokoli talab qiladi.

Hardware

Machine-check yoki I/O device access ham bus fault berishi mumkin. Kernel error code va hardware statusni decode qiladi. User handler faqat async-safe minimal report yozadi.

Himoya

Packed data misalignmentini pointer cast bilan o‘qish o‘rniga memcpy va endian conversion ishlatiladi. File mappingdan oldin format length hamda update lock tekshiriladi.

Test

Test mapping truncate, unaligned target access, device removal va fault addressni qamraydi. Crash report signal bilan birga platform code’ni saqlaydi.

Amaliy nazorat

Bus Error bilan ishlaydigan tizim backing object va hardware statusni aniq lifecycle va version bilan yuritadi. Pointer, mapping, navbat yoki exception holati boshqa qatlamga uzatilganda ownership hamda permission shartlari yo‘qolmaydi. Debug rejimda manzil, obyekt identifikatori va state transition qayd etiladi; production log ASLR, maxfiy ma’lumot va raw pointerlarni ochib yubormaydigan shaklga keltiriladi. Eskirgan handle yoki metadata reuse qilinmasligi uchun generation, build-id yoxud reference hisobidan foydalaniladi.

Muhim xavf — truncate mapping yoki alignment trap. Bunday vaziyatda tizim taxmin bilan davom etmaydi: access fault, aniq error, konservativ fallback yoki nazoratli cleanup qo‘llanadi. Signal/fault kelgan nuqta har doim asl buzilish joyi emas; allocation, mapping va oxirgi ownership amallari trace’i tashxisga yordam beradi. Parallel accessda lock, atomic ordering va lifetime birgalikda tekshiriladi. Timeout yoki null check memory safetyning o‘rnini bosa olmaydi.

Sifat nazorati SIGBUS code va platform testi orqali bajariladi. Sinovlar normal holat bilan birga nol uzunlik, page boundary, alignment, juda katta offset, concurrent close/free, permission o‘zgarishi va platforma farqlarini qamraydi. Correctness avval etalon hamda invariant bilan tekshiriladi, keyin page fault, cache miss, contention, latency yoki xotira sarfi o‘lchanadi. Sanitizer, fault injection va malformed-input fuzzing topgan minimal holat doimiy regressiya testiga aylantiriladi.

SIGBUSning aniq sababi platformaga bog‘liq: tekislanmagan access, mavjud bo‘lmagan fizik backing yoki memory-mapped fayl chegarasidan tashqari sahifaga tegish tipik misollardir. Masalan, mapping turgan paytda fayl truncate qilinsa virtual manzil hanuz interval ichida ko‘rinsa ham unga backing qolmasligi mumkin. Shu jihat SIGSEGVdagi oddiy permission yoki unmapped-address holatidan farq qiladi. Tahlilda signal kodi, fault address, mapping offseti, faylning joriy hajmi va ISA alignment qoidasi tekshiriladi. Network filesystem va qurilma mappinglari qo‘shimcha I/O xatolarini shu yo‘l bilan yuzaga chiqarishi mumkin.

Bog‘liq tushunchalar

SIGBUS, alignment fault, memory-mapped file, segmentation fault, device memory, page fault