Bosh sahifa Wiki Page fault

Page fault

Page fault — protsessor virtual manzilga murojaat qilganda tegishli sahifa jadvallari amaldagi kirishni darhol ta’minlay olmasa yuz beradigan exceptiondir. U har doim xato emas: operatsion tizim demand paging, copy-on-write va fayl xaritalashni page fault orqali amalga oshiradi. Ruxsatsiz yoki mavjud bo‘lmagan manzilga kirish esa jarayonni tugatishi mumkin.

Fault ketma-ketligi

Memory management unit page table entryni tekshiradi. Present biti o‘chiq, permission mos emas yoki boshqa arxitektura sharti buzilgan bo‘lsa CPU kernel handlerga o‘tadi va faulting manzil hamda access turini beradi. Yadro manzil jarayonning qonuniy virtual memory regioniga tegishlimi va amal ruxsatlimi tekshiradi.

Qonuniy sahifa hali RAMda bo‘lmasa yadro fizik frame ajratadi, disk yoki fayldan ma’lumot o‘qiydi, page table’ni yangilaydi va buyruqni qayta bajaradi. Noto‘g‘ri pointer bo‘lsa Unixda SIGSEGV yoki SIGBUS, boshqa tizimda mos exception jarayonga yetkaziladi.

Minor va major fault

Minor fault disk I/O talab qilmaydi. Masalan, zero-filled sahifa ajratish, allaqachon page cache’da turgan fayl sahifasini xaritalash yoki copy-on-write uchun yangi frame yaratish. Major fault ma’lumotni saqlash qurilmasidan olib keladi va ancha sekin.

Major fault soni yuqori bo‘lsa memory pressure, sovuq cache yoki tasodifiy katta working set bo‘lishi mumkin. Bitta startupda ko‘p fault tabiiy, doimiy fault va disk thrashing esa muammo. Hisoblagich kontekst bilan talqin qilinadi.

Copy-on-write

forkdan keyin parent va child sahifalari read-only ko‘rinishda bo‘lishadi. Bir tomon yozganda protection fault keladi, yadro sahifani nusxalab yozuvchiga alohida frame beradi. Bu darhol barcha xotirani nusxalashdan qochadi. Biroq katta jarayon forkdan keyin ko‘p yozsa COW fault va memory sarfi keskin oshadi.

Memory-mapped fileda dirty sahifa keyin diskka yozilishi mumkin. Private mappingdagi o‘zgarish COW orqali faylga bormaydi, shared mapping esa fayl mazmunini o‘zgartirishi mumkin. Flush va crash consistency alohida boshqariladi.

Unumdorlik va diagnostika

Page fault handler kernel rejimiga o‘tish, frame topish va TLB yangilash xarajatiga ega. Disk I/O qo‘shilsa kechikish mikrosekunddan millisekundgacha ortishi mumkin. Prefault yoki memory locking real vaqt ishida kutilmagan faultni kamaytiradi, ammo fizik xotirani band qiladi.

Monitoring minor/major fault, resident set, swap, reclaim va I/O latencyni birga ko‘radi. Stack growth uchun guard page qonuniy ravishda yangi stack sahifasini ajratishi mumkin; limitdan oshsa stack overflow bo‘ladi. Core dump va fault address debuggerga xato pointer, instruction va access turini aniqlashga yordam beradi.

File-backed xatolar

Memory-mapped faylning sahifasi access paytida fayl hajmidan tashqarida qolsa oddiy demand paging bilan tuzatilmaydi. Masalan, boshqa jarayon faylni truncate qilsa mavjud mappingdagi murojaat SIGBUS keltirishi mumkin. Dastur mapping hayot sikli va fayl o‘lchamini muvofiqlashtiradi. Network filesystemdagi major fault server yoki tarmoq kechikishiga bog‘lanib, threadni uzoq to‘xtatishi mumkin. Real vaqt yoki request handler oldindan o‘qish va local copy ishlatishi ehtimol. Fault-around va readahead ketma-ket accessda qo‘shni sahifalarni olib keladi, random accessda esa ortiqcha I/O yaratishi mumkin. Profil access pattern bilan birga sozlanadi.

Bog‘liq tushunchalar

Virtual memory, Demand paging, Page table, Copy-on-write, TLB, Segmentation fault