Bosh sahifa Wiki Memory-Mapped File

Memory-Mapped File

Memory-Mapped File — faylning bir qismi virtual address space’ga sahifalar sifatida bog‘lanib, dasturga oddiy xotira load/store orqali fayl kontenti bilan ishlash imkonini beradigan mexanizm.

Sahifalash

Mapping file offseti page granularityga moslanadi; requested logical range ichki delta bilan olinadi. Access qilingan sahifa page fault orqali storage’dan page cache’ga yuklanadi.

Shared va private

Shared mappingdagi write page cache’ni dirty qiladi va keyin faylga yoziladi. Private mapping copy-on-write ishlatadi: o‘zgarish processga xos anonymous page’da qoladi va original faylni o‘zgartirmaydi.

Fayl hajmi

Mapping fayl hajmidan tashqariga tegsa platformaga qarab bus error yoki access fault kelishi mumkin. Fayl mapping vaqtida truncate qilinsa mavjud pointer xavfli bo‘ladi. Lifecycle contract zarur.

Flush va durability

msync yoki flush dirty sahifalarni yuboradi, lekin durability uchun filesystem va device flush qoidalari ham kerak. Memory ordering disk persistence ordering bilan aynan bir xil emas.

Qo‘llanish

Katta fayl random access, shared data va zero-copyga yaqin I/O uchun qulay. Biroq page fault latency unpredictable; hard real-time yo‘lda sahifalarni oldindan fault qilish talab qilinadi.

Sinov

Test shared/private, file resize, unaligned logical offset, concurrent writer, flush va process crash holatlarini qamraydi. Fayl hash hamda visible bytes solishtiriladi.

Amaliy nazorat

Memory-Mapped File bilan ishlaydigan tizim VMA, file offset va dirty pageni 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 qilingan backing yoki durabilityni noto‘g‘ri talqin qilish. 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 shared/private mapping va crash 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.

Mapping yaratish faylning o‘sha paytdagi hajmini muzlatib qo‘ymaydi. Boshqa process faylni qisqartirsa, ilgari yaroqli ko‘ringan sahifaga murojaat fault bilan tugashi mumkin; shu sababli hajm va mapping lifecycle’i kelishilgan protokol bilan boshqariladi. msyncga o‘xshash chaqiriq dirty sahifalarni yozishni so‘raydi, biroq elektr uzilishiga chidamli tranzaksiya uchun fayl va katalog metadata’sini ham tegishli tartibda sync qilish talab etilishi mumkin. Mappingni ketma-ket skanerlash, tasodifiy o‘qish va oddiy read bilan ishlash turli page-fault profiliga ega; tanlov real access pattern bilan o‘lchanadi.

Bog‘liq tushunchalar

mmap, virtual memory, page cache, copy-on-write, file I/O, page fault