Bosh sahifa Wiki Paging

Paging

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:

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:

  • approximate LRU;
  • active/inactive list;
  • clock;
  • working set;
  • frequency va recency kombinatsiyasi.

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:

  • disk I/O yuqori;
  • CPU foydali ish kam;
  • response time katta;
  • system pressure.

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:

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