2009-04-28 8 views

Respuesta

8

Depende. El grupo No paginado debe reservarse para la memoria que debe permanecer en la RAM, de modo que si está haciendo algo crítico que se vería afectado por una página de memoria desde el funcionamiento del disco, utilice no paginado.

Ver here para obtener más información.

En cuanto a this (aunque se trata de C++ en lugar de C) parecería que por defecto los globales se pueden ubicar en cualquiera de los #pragma. También en p22 de vemos cómo hacer esto. Finalmente, this discuss, vemos que el segmento de datos debe ser no pagagable por defecto.

+0

pregunta No.my es algo como si declara una variable global en el controlador de dispositivo, que se utilizará la memoria, es decir, paginado de memoria de grupo o de la memoria de bloque no paginado? (Local la variable usará memoria de grupo no paginado). – Navaneeth

+0

no será depende. , será un grupo paginado o no paginado. – Navaneeth

+2

#pragma data_seg ("PAGE") int foo; #pragma data_seg ("NONPAGE") int barra; - foo aquí es paginable, y la barra no es paginada. El valor predeterminado no es paginado si no le da un pragma. – SecurityMatt

2

Las variables globales en un controlador de modo kernel se asignan desde NonPagedPool.

También puede usar la extensión del dispositivo (cuando llama a IoCreateDevice), siempre se asigna desde la memoria NonPaged.

espero que esto ayude, Martin

+1

Esto no es verdad. Los controladores Kernel en Windows son archivos PE con varias secciones y, a diferencia de los programas normales en modo usuario, los controladores KM normalmente tienen * dos * secciones de datos, una que está paginada y otra no paginada (y ocasionalmente una tercera que se descarta después el controlador KM se ha inicializado). En su código puede elegir si su variable (o su función) está paginada o no paginada mediante el uso de los pragmas alloc. – SecurityMatt

Cuestiones relacionadas