Paging — virtual va fizik xotirani bir xil o‘lchamdagi sahifalarga bo‘lib boshqarish mexanizmi. Operatsion tizim har processning virtual sahifalarini fizik RAMdagi frame’lar yoki boshqa backing storage bilan xaritalaydi.
Paging processga uzluksiz virtual address space beradi, garchi uning fizik sahifalari RAMning turli joylarida bo‘lsa ham.
Mexanizm memory isolation, virtual memory, demand loading, shared library va swapning asosini tashkil qiladi.
Page va frame
Page — virtual address space’dagi blok.
Frame — fizik RAMdagi xuddi shu o‘lchamdagi blok.
Page table virtual page raqamini physical frame raqamiga bog‘laydi.
Masalan:
Virtual page 0x120 → Physical frame 0x8A
Page size
Keng tarqalgan base page hajmi:
4 KiB
Platformaga qarab boshqa o‘lcham bo‘lishi mumkin.
Katta sahifalar:
- 2 MiB;
- 1 GiB;
- platformaga xos huge page.
Katta page TLB bosimini kamaytiradi, lekin ichki fragmentatsiya va allocation murakkabligini oshiradi.
Virtual address
Virtual manzil ikki qismga bo‘linadi:
- virtual page number;
- page offset.
Page table page numberni fizik framega tarjima qiladi. Offset o‘zgarmaydi.
4 KiB page uchun offset 12 bit.
Page table
Har process yoki address space page table’ga ega.
Entry quyidagilarni saqlashi mumkin:
- physical frame;
- present;
- readable;
- writable;
- executable;
- user yoki kernel;
- accessed;
- dirty;
- copy-on-write;
- cache policy.
Ko‘p darajali page table bo‘sh address space uchun xotirani tejaydi.
MMU
Memory Management Unit CPUdagi address translation apparati.
CPU har memory access’da virtual manzilni tarjima qiladi.
Page table root registeri current process address space’ini ko‘rsatadi.
Context switchda bu qiymat o‘zgarishi mumkin.
TLB
Translation Lookaside Buffer yaqinda ishlatilgan address translationlarni cache qiladi.
TLB hit bo‘lsa page table’ni to‘liq yurish talab qilinmaydi.
TLB miss’da hardware yoki software page table walk bajaradi.
Ko‘p random sahifa TLB missni oshiradi.
Demand paging
Dastur executable yoki memory regioni e’lon qilinganda barcha sahifa darhol RAMga yuklanmaydi.
Process sahifaga birinchi marta murojaat qilganda page fault yuz beradi.
Kernel sahifani:
- executable fayldan;
- shared librarydan;
- zero-filled memory sifatida;
- swapdan
oladi.
Bu tez startup va RAMni tejashga yordam beradi.
Page fault
Page fault har doim xato emas.
Minor page fault
Kerakli data RAMda mavjud, faqat mapping yaratish yoki permission yangilash kerak.
Major page fault
Data disk yoki swapdan o‘qiladi.
Major fault ancha sekin.
Invalid fault
Process ruxsat berilmagan yoki xaritalanmagan manzilga murojaat qiladi. Segmentation fault signaliga olib kelishi mumkin.
Copy-on-write
Forkdan keyin parent va child bir xil fizik sahifalarni read-only bo‘lishadi.
Biri yozishga urinsa page fault yuz beradi va sahifa nusxalanadi.
Bu fork()ni tezlashtiradi.
Copy-on-write snapshot va memory mappingda ham ishlatiladi.
Anonymous memory
Faylga bevosita bog‘lanmagan xotira:
Yangi sahifa zero-filled bo‘lishi mumkin.
Memory bosimida anonymous sahifa swapga chiqariladi.
File-backed page
Executable, shared library va mmap fayl sahifalari file-backed.
Clean sahifa RAMdan tashlansa, kerak bo‘lganda fayldan qayta o‘qiladi.
Dirty private yoki shared mapping siyosatga ko‘ra faylga yozilishi yoki swapga ketishi mumkin.
Page cache
Kernel disk fayllarini page cache’da saqlaydi.
read() va mmap() bir xil cache sahifalaridan foydalanishi mumkin.
Available RAM file cache uchun ishlatiladi va processga kerak bo‘lsa bo‘shatiladi.
Shu sababli “free RAM kam” har doim muammo emas.
Dirty page
Process file-backed sahifani o‘zgartirsa dirty bo‘ladi.
Kernel uni keyinchalik diskka yozadi.
Dirty limit oshsa writer throttling yoki background writeback ishlaydi.
Quvvat uzilishida hali diskka yozilmagan data yo‘qolishi mumkin.
Page replacement
RAM yetishmasa kernel qaysi sahifani chiqarishni tanlaydi.
Ideal LRUni aniq yuritish qimmat.
Amaliy algoritmlar:
Clean file page tashlash anonymous sahifani swapga yozishdan arzonroq bo‘lishi mumkin.
Working set
Processning yaqin vaqtda faol ishlatayotgan sahifalari working set.
Working set RAMga sig‘sa performance yaxshi.
Sig‘masa doimiy page fault va thrashing yuz beradi.
Thrashing
Kernel sahifalarni chiqaradi, process esa tezda yana so‘raydi.
Natija:
RAM qo‘shish, workloadni kamaytirish yoki memory leakni tuzatish kerak.
Huge page
Katta page:
- TLB entry sonini kamaytiradi;
- page table hajmini kamaytiradi;
- katta memory workloadni tezlashtirishi mumkin.
Kamchiliklari:
- allocation qiyin;
- ichki fragmentatsiya;
- copy-on-write xarajati;
- memory compaction.
Transparent Huge Pages avtomatik birlashtirishga urinadi. Database’larda aniq siyosat talab qilinishi mumkin.
Page permission
Page table orqali W^X siyosati qo‘llanadi:
- writable;
- executable.
Xotira bir vaqtda yoziladigan va executable bo‘lmasligi xavfsizlikni oshiradi.
NX bit data sahifasidan kod bajarilishini cheklaydi.
ASLR
Address Space Layout Randomization executable, library, heap va stack joylashuvini tasodifiylashtiradi.
Paging va virtual address space bunga imkon beradi.
Bu exploitationni qiyinlashtiradi, ammo barcha xatoni yo‘q qilmaydi.
Shared memory
Bir fizik frame bir nechta process page table’iga map qilinishi mumkin.
Shared library code va IPC shared memory shunday ishlaydi.
Har process virtual manzili bir xil bo‘lishi shart emas.
NUMA
Ko‘p socketli serverda fizik page ma’lum NUMA node’da joylashadi.
CPU boshqa node memorysiga murojaat qilsa latency oshadi.
First-touch policy, memory binding va migration localityni boshqaradi.
Page table xavfsizligi
Kernel user page’larni kernel page’lardan permission bilan ajratadi.
Meltdown kabi zaifliklar hardware speculative execution va mapping modeliga ta’sir qilgan. Kernel page-table isolation kabi mitigationlar qo‘llangan.
Monitoring
Metrikalar:
- minor fault;
- major fault;
- resident set;
- virtual size;
- page cache;
- dirty page;
- swap;
- TLB miss;
- memory pressure;
- NUMA miss.
Virtual memory hajmi real RAM sarfiga teng emas.
Diagnostika
Paging muammosida:
- major fault tezligi;
- working set;
- RSS;
- swap-in/out;
- page cache;
- huge page;
- dirty writeback;
- NUMA;
- TLB;
- OOM log
tekshiriladi.
Bitta page fault oddiy holat; doimiy yuqori major fault performance muammosidir.
Bog‘liq tushunchalar
Virtual memory, Page, Frame, Page table, MMU, TLB, Page fault, Copy-on-write, Swap, Huge page, Page cache