2010-03-02 10 views
15

Tengo un programa que requiere mucha memoria, como 2/3 de toda la RAM física. Después de un tiempo de ejecución, mi sistema operativo comienza a cambiar el programa a hdd. Pero necesito que el programa responda muy rápido todo el tiempo, así que tengo que evitar la búsqueda de ese proceso.¿Cómo prevenir la búsqueda de un programa/proceso?

¿Cómo se puede evitar que el sistema operativo cambie un proceso?

¡Gracias por cualquier ayuda!

Respuesta

8

Al inicio del programa, llame a:

mlockall(MCL_CURRENT | MCL_FUTURE); 

(Si usted no tiene la fuente al programa, usted tiene que corromper el proceso con ptrace para hacer esto).

Tenga en cuenta que esto aumentará las posibilidades de que el proceso falle en las asignaciones de memoria.

+0

No creo que * puedas * "echar a perder" el proceso. No, a menos que tenga acceso a la tecnología de Tron. :) –

+2

"corromper" ing significa un proceso para conseguirlo bebido, partido con él, etc ... :) – dicroce

+0

creo que es una metáfora justo :) – caf

4

Utilice mmap() en lugar de malloc y utilice el indicador "MAP_LOCKED". (Funciona en Linux> 05/02/37)

+0

Tenga en cuenta que esto tendrá el mismo efecto (en relación con el intercambio) como el uso de mlock * *; por lo que se aplican las mismas advertencias. – sleske

+0

Aquí hay un enlace a una discusión @ kerneltrap con respecto a esta técnica: http://kerneltrap.org/node/7878 – dicroce

6

Bueno, hay mlock para la memoria de bloqueo (contando el kernel no puede ser intercambiado), pero que ha significado para cantidades relativamente pequeñas de memoria, y requeriría la modificación del programa.

La otra opción podría ser ajustar el "alboroto" de Linux, es decir, su tendencia a cambiar de página. Vea here para una discusión interesante. Eso no es posible por proceso, sin embargo.

No conozco ninguna solución por proceso para su problema.

Cuestiones relacionadas