Bosh sahifa Wiki Virtual memory

Virtual memory

Virtual memory — har bir jarayonga uzluksiz va o‘ziga tegishli manzil fazosi ko‘rinishini beradigan xotira boshqaruv mexanizmidir. Operatsion tizim va protsessorning Memory Management Unit qismi virtual manzillarni RAMdagi fizik sahifalarga yoki vaqtincha diskdagi backing storagega xaritalaydi. Bu usul jarayonlarni bir-biridan himoya qiladi, xotirani moslashuvchan taqsimlaydi va fizik RAMdan katta adres fazosidan foydalanish imkonini beradi.

Sahifa jadvallari

Virtual fazo sahifalarga, fizik xotira frame larga bo‘linadi. Page table har virtual page uchun fizik frame, ruxsat, mavjudlik va boshqa flaglarni saqlaydi. Ko‘p darajali page table foydalanilmagan katta manzil oralig‘i uchun barcha entrylarni oldindan ajratmaslikka yordam beradi. 64 bitli tizimda jarayon nazariy adres fazosining faqat bir qismi amalda xaritalanadi.

Har memory accessda to‘liq jadvalni yurish qimmat bo‘lgani uchun Translation Lookaside Buffer yaqindagi tarjimalarni kesh qiladi. TLB miss page table walkni talab qiladi. Context switchda address-space identifier bo‘lmasa TLB entrylarining bir qismi tozalanishi mumkin. Huge page kamroq entry va TLB miss beradi, lekin internal fragmentation hamda allocationni murakkablashtiradi.

Page fault

Jarayon mavjud bo‘lmagan yoki hali RAMga keltirilmagan sahifaga murojaat qilsa page fault yuz beradi. Minor fault sahifa allaqachon xotirada bo‘lib, faqat mapping kerak bo‘lganda; major fault esa diskdan o‘qishni talab qilganda ishlatiladi. Ruxsatsiz yozish yoki xaritalanmagan manzil invalid fault bo‘lib, jarayon signal bilan tugatilishi mumkin.

Demand paging executable va fayl sahifalarini faqat ishlatilganda yuklaydi. Memory-mapped file orqali fayl qismi virtual manzilga ulanadi, read/write oddiy xotira amali ko‘rinishida bajariladi. Dirty sahifa keyin storagega yoziladi. fsync va mapping semantikasi durability uchun alohida hisobga olinadi.

Swap va bosim

RAM yetishmaganda kernel kam ishlatilgan anonymous sahifalarni swapga chiqarishi, fayl-backed clean sahifalarni tashlab keyin fayldan qayta olishi mumkin. Working set RAMdan katta bo‘lsa doimiy page in/out — thrashing yuz beradi va tizim keskin sekinlashadi. Swap RAMning tez o‘rnini bosmaydi; u qisqa bosimda crashni kechiktirishi mumkin.

Memory pressureda page reclaim, OOM killer yoki container limiti ishga tushadi. Process RSS, virtual size, page fault, swap I/O va pressure stall metrikalari birgalikda ko‘riladi. Katta virtual rezerv haqiqiy RAM sarfi bilan teng emas; overcommit siyosati allocation muvaffaqiyatli bo‘lib, keyingi write paytida xato berishiga olib kelishi mumkin.

Himoya va ulashish

Page entry read, write, execute va user/kernel ruxsatlarini belgilaydi. W^X siyosati sahifani bir vaqtda yoziladigan va bajariladigan qilmaslikka intiladi. Address Space Layout Randomization segmentlarni tasodifiy joylashtirib ekspluatatsiyani qiyinlashtiradi. Guard page stack overflow yoki buffer chegarasini aniqlaydi.

Fork paytida copy-on-write ota va bola jarayonga ayni fizik sahifalarni read-only ulashadi; biri yozganda nusxa yaratiladi. Shared memory esa jarayonlararo ayni frame ni ataylab xaritalaydi va sinxronlash talab qiladi. Virtual memory izolyatsiya vositasi bo‘lsa-da, cache timing kabi yon kanallarni to‘liq yo‘qotmaydi.

Amaliy kuzatuv

Xotira bosimini baholashda faqat “bo‘sh RAM” ko‘rsatkichi yetarli emas. Sahifa xatolari, swap kirish-chiqishi, resident set size va disk kechikishi birga ko‘riladi. Operatsion tizim bo‘sh xotirani kesh uchun ishlatishi normal holatdir; muammo faol sahifalar doimiy ravishda disk bilan almashib, dastur javob vaqti yomonlashganda yuzaga keladi.

Bog‘liq tushunchalar

Page table, TLB, Page fault, Swap, Memory-mapped file, Copy-on-write, MMU