Respuesta

10

No, la memoria del núcleo no se puede mover.

5
  1. Las páginas del núcleo no son intercambiables. Pero puede ser liberado.

  2. Las páginas UserSpace pueden residir en ZONE_NORMAL. Sistema Linux Se puede configurar para usar HIGHMEM o no. Si ZONE_HIGHMEM está configurado, los procesos de espacio de usuario obtendrán su memoria de HIGHMEM, de lo contrario los procesos de espacio de usuario obtendrán memoria de ZONE_NORMAL.

+1

¿Qué pasa con las páginas asignadas por los controladores? –

1

Sí, en circunstancias normales no son swappable, de hecho, una vez detectados páginas de núcleo (es decir, la memoria que reside en el núcleo para el uso del kernel) (ver el código fuente de manipulador de fallo de página), el núcleo se bloqueará de forma explícita en sí .

ver esto:

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

y la función:

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's 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 { 

y la detección aquí:

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     } 

Pero el mismo controlador fallo de página - que puede detectar fallo de página que surja desde memoria de modo de usuario inexistente (todo el hardware pagefault det La operación siempre se realiza en kernel) recuperará explícitamente los datos del espacio de intercambio, si existe, o iniciará una rutina de asignación de memoria para dar más memoria al proceso.

Ok, dicho esto, núcleo no intercambiar estructuras de núcleo/memoria/listas de tareas, etc., durante el software de suspensión e hibernación operación:

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

y durante la fase de reanudación será restaurar de nuevo la memoria del núcleo de intercambio archivo.

Cuestiones relacionadas