Выгружаются ли страницы ядра?

Что касается ядра Linux, удаляются ли страницы "Ядро"? Кроме того, когда страницы пространства пользователя когда-либо попадают в ZONE_NORMAL?

Ответ 1

Нет, память ядра не подлежит обмену.

Ответ 2

  • Страницы ядра не подлежат замене. Но он может быть освобожден.

  • Страницы UserSpace могут находиться в ZONE_NORMAL. Система Linux Может быть настроена либо на использование HIGHMEM, либо нет. Если ZONE_HIGHMEM настроен, тогда процессы пользовательского пространства получат свою память из процессов HIGHMEM else, которые будут получать память из ZONE_NORMAL.

Ответ 3

Да, при нормальных условиях страницы ядра (т.е. память, находящаяся в ядре для использования ядра) не могут быть заменяемыми, на самом деле, когда они обнаружены (см. исходный код обработчика страницы), ядро ​​будет явно сбой себя.

Смотрите это:

http://lxr.free-electrons.com/source/arch/x86/mm/fault.c

и функция:

1205 /*
1206  * This routine handles page faults.  It determines the address,
1207  * and the problem, and then passes it off to one of the appropriate
1208  * routines.
1209  *
1210  * This function must have noinline because both callers
1211  * {,trace_}do_page_fault() have notrace on. Having this an actual function
1212  * guarantees there a function trace entry.
1213  */
1214 static noinline void
1215 __do_page_fault(struct pt_regs *regs, unsigned long error_code,
1216                 unsigned long address)
1217 {

И обнаружение здесь:

1246          *
1247          * This verifies that the fault happens in kernel space
1248          * (error_code & 4) == 0, and that the fault was not a
1249          * protection error (error_code & 9) == 0.
1250          */
1251         if (unlikely(fault_in_kernel_space(address))) {
1252                 if (!(error_code & (PF_RSVD | PF_USER | PF_PROT))) {
1253                         if (vmalloc_fault(address) >= 0)
1254                                 return;
1255 
1256                         if (kmemcheck_fault(regs, address, error_code))
1257                                 return;
1258                 }

Но тот же обработчик ошибок страницы, который может обнаружить ошибку страницы, возникающую из несуществующей памяти usermode (все обнаружение аппаратного доступа к файлам всегда выполняется в ядре) будет явно извлекать данные из пространства подкачки, если он существует, или запустить процедуру распределения памяти для придать процессу больше памяти.

Итак, ядро ​​меняет местами структуры ядра/память/списки задач и т.д. во время приостановки и спящего режима программного обеспечения:

https://www.kernel.org/doc/Documentation/power/swsusp.txt

И на этапе возобновления он восстановит память ядра из файла подкачки.