risposta

10

No, la memoria del kernel non è possibile.

5
  1. Le pagine del kernel non sono scambiabili. Ma può essere liberato.

  2. Le pagine Spazio utente possono risiedere in ZONE_NORMAL. Sistema Linux Può essere configurato per utilizzare HIGHMEM o meno. Se ZONE_HIGHMEM è configurato, i processi dello spazio utente recupereranno la memoria da HIGHMEM altrimenti i processi dello spazio utente recupereranno memoria da ZONE_NORMAL.

+1

E le pagine assegnate dai driver? –

1

Sì, in circostanze normali non sono intercambiabili, infatti, una volta rilevate le pagine del kernel (vale a dire, la memoria residente nel kernel per l'utilizzo del kernel) (vedere il codice pagefault fonte handler), il kernel in modo esplicito in crash se stessa .

vedere questo:

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

e la funzione:

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 { 

e la rilevazione qui:

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     } 

Ma lo stesso gestore pagefault - in grado di rilevare pagefault derivanti dalla memoria usermode inesistente (tutti i parametri di default delle pagine hardware) sempre nel kernel) recupera esplicitamente i dati dallo spazio di swap se esiste, oppure avvia una routine di allocazione della memoria per dare al processo più memoria.

Ok, detto questo, il kernel fa scambiare le strutture del kernel/memoria/tasklists etc durante il software di sospensione e ibernazione funzionamento:

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

E durante la fase di ripresa si ripristinerà indietro la memoria del kernel da scambio file.