Я новичок в Linux, и меня всегда смущала разница между пространством ядра и пространством пользователя.
В настоящее время я изучаю управление памятью и хотел бы знать, является ли виртуальный адрес страницы пользовательский процесс принадлежит пространству пользователя или пространству ядра при замене?
(как в 64-разрядной версии Linux
Диапазон виртуальных адресов состояния пользователя: 0x0000000 000000-0x00007FFFFFFFFFFFF
Диапазон виртуальных адресов состояния ядра: 0xFFFF8000000000-0xFFFFFFFFFFFFFFFFFFFF)
linux-6.5.1/mm/memory.c
mm_account_fault()
if (major) {
struct major_page_fault_hash_entry *temp = NULL;
unsigned long pfn = virt_to_pfn(address);
printk("[%lu][%lu]", pfn, address);
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, regs, address);
}
linux-6.5.1/mm/swap_state.c
bool add_to_swap(struct folio *folio)
long pages_number = folio_nr_pages(folio);
unsigned long start_pfn = folio_pfn(folio);
for (int i = 0; i < pages_number; i++) {
struct page *current_page = pfn_to_page(start_pfn + i);
unsigned long current_virt_addr = (unsigned long)page_to_virt(current_page);
printk("[%lu][o][%lu]\n",start_pfn + i, current_virt_addr);
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... ge-in-user