FLATMEM Eng oddiy xotira modeli - FLATMEM. Ushbu model qo'shni yoki asosan qo'shni jismoniy xotiraga ega NUMA bo'lmagan tizimlar uchun javob beradi.
FLATMEM xotira modelida butun jismoniy xotirani xaritalashtirgan global mem_map massivi mavjud. Ko'pgina arxitekturalar uchun teshiklar mem_map massivida yozuvlarga ega. Teshiklarga mos keladigan struktura sahifasi ob'ektlari hech qachon to'liq ishga tushirilmaydi.
Mem_map massivini ajratish uchun arxitekturaga xos sozlash kodi free_area_init() funksiyasini chaqirishi kerak. Shunga qaramay, barcha xotirani sahifa taqsimlovchisiga uzatuvchi memblock_free_all() ga qo'ng'iroq qilinmaguncha, xaritalash massividan foydalanish mumkin emas.
Agar arxitektura CONFIG_ARCH_HAS_HOLES_MEMORYMODEL opsiyasini yoqsa, u mem_map massivining haqiqiy jismoniy sahifalarni qamrab olmaydigan qismlarini bo'shatishi mumkin. Bunday holda, arxitekturaga xos pfn_valid() ilovasi mem_mapdagi teshiklarni hisobga olishi kerak.
FLATMEM yordamida PFN va struktura sahifasi o'rtasida konvertatsiya qilish juda oddiy: PFN - ARCH_PFN_OFFSET mem_map massivining indeksidir.
ARCH_PFN_OFFSET 0 dan boshqa manzildan boshlanadigan jismoniy xotiraga ega tizimlar uchun birinchi sahifa ramka raqamini belgilaydi.
DISCONTIGMEM DISCONTIGMEM modeli jismoniy xotirani Linux NUMA qo'llab-quvvatlashi kabi tugunlar to'plami sifatida ko'radi. Har bir tugun uchun Linux struct pglist_data (yoki qisqacha pg_data_t) bilan ifodalangan mustaqil xotira boshqaruvi quyi tizimini quradi. Boshqa narsalar qatorida, pg_data_t ushbu tugunga tegishli jismoniy sahifalarni xaritalashtirgan node_mem_map massiviga ega. pg_data_t ning node_start_pfn maydoni - bu tugunga tegishli birinchi sahifa ramkasining raqami.
Arxitekturani sozlash kodi pg_data_t ob'ektini va uning node_mem_mapini ishga tushirish uchun tizimdagi har bir tugun uchun free_area_init_node() ni chaqirishi kerak.
Har bir tugun_mem_map FLATMEM ning xotira_xaritasi kabi ishlaydi - tugundagi har bir jismoniy sahifa ramkasi node_mem_map massivida tizimli sahifa yozuviga ega. DISCONTIGMEM yoqilganda, struktura sahifasining bayroqlar maydonining bir qismi ushbu sahifani joylashtirgan tugunning tugun raqamini kodlaydi.
DISCONTIGMEM modelidagi PFN va struktura sahifasi o'rtasidagi konvertatsiya biroz murakkablashdi, chunki u qaysi tugun jismoniy sahifani va qaysi pg_data_t ob'ekti struktura sahifasini ushlab turishini aniqlashi kerak.
DISCONTIGMEM-ni qo'llab-quvvatlaydigan arxitekturalar PFN-ni tugun raqamiga aylantirish uchun pfn_to_nid() ni taqdim etadi. Qarama-qarshi konversiya yordamchisi page_to_nid() umumiydir, chunki u page->bayroqlarda kodlangan tugun raqamidan foydalanadi.
Tugun raqami ma'lum bo'lgandan so'ng, PFN tuzilma sahifasiga kirish uchun tegishli node_mem_map massivini indekslash uchun ishlatilishi mumkin va tuzilma sahifasining node_mem_map va node_start_pfn dan ofseti ushbu sahifaning PFNidir.