File Mapping — fayl yoki fayl segmentini virtual xotira regioniga bog‘lash operatsiyasi va hosil bo‘lgan mapping obyektini boshqarish jarayoni. Atama memory-mapped file mexanizmining platformaviy API tomonini ta’kidlaydi.
API modeli
Mapping yaratishda file handle, offset, length, protection va sharing mode beriladi. OS region uchun virtual address rezerv qiladi, physical page’larni esa demand paging bilan keyin bog‘laydi.
Platforma farqi
Windowsda file-mapping object va mapped view ajratiladi; Unixda mmap call viewni bevosita yaratadi. Handle yopilishi mapping view’ni har doim darhol yo‘q qilmaydi; reference lifecycle platformaga xos.
Executable view
Executable mapping code loading va shared library uchun ishlatiladi. W^X siyosati bir regionni bir paytda writable ham executable qilmaslikni talab qiladi. Code signing ham qo‘llanishi mumkin.
Disk formati
Mapped view pointerlari file layout o‘zgarsa avtomatik semantic obyektga aylanmaydi. Struct padding, endianness va version disk formatida aniq belgilanadi. Native pointerlarni faylga saqlash yaroqsiz.
Address tanlash
Address tanlashda ASLR va fragmentation mavjud; fixed mapping mavjud regionni bosib yuborishi mumkin. Safe API system tanlagan addressni afzal ko‘radi.
Tekshiruv
Test mapping handle va view lifecycle’i, protection mismatch, sparse file, katta offset va processlararo sharingni tekshiradi. Resource leak ham kuzatiladi.
Amaliy nazorat
File Mapping bilan ishlaydigan tizim mapping object, view va protectionni 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 — view lifecycle yoki disk layout mismatch. 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 handle, sharing va unmap 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.
File mapping obyekti bilan undan hosil qilingan view bir xil narsa emas. Mapping backing store, maksimal hajm va himoya imkoniyatlarini belgilaydi; view esa process address space’idagi offset, uzunlik va amaldagi ruxsatlarni ifodalaydi. Windowsda offset allocation granularityga, POSIX mmapda esa odatda page size’ga tekislanadi. Kerakli interval tekislangan boshlanishdan map qilinib, foydalanuvchi pointeri ichki siljish bilan hisoblanadi. Unmap qilishdan avval boshqa threadlar viewdan foydalanmayotgani isbotlanishi lozim. Aks holda to‘g‘ri ko‘ringan handle yopilishi use-after-unmap xatosini keltiradi.
Bog‘liq tushunchalar
file handle, mapped view, virtual address, memory-mapped file, access protection, shared memory