Fichero de Paginación (Parte 4-Commit Charge y Commit Limit)
Hola de nuevo, en el post anterior hemos visto que efectos provoca en los recursos del sistema cuando se compromete memoria, pero ¿que puede contribuir a comprometer memoria?.
La idea es que, a lo que definimos como Commit Limit, representa el total de direcciones virtuales que se pueden crear, su valor total corresponderá al total de memoria RAM que tenga la maquina mas el tamaño de tantos ficheros de paginación como tengamos. Como se puede ver en la imagen posterior la maquina tiene 16GB de RAM y un Commit Limit de 18,3GB por lo que podemos deducir que el tamaño de el o los ficheros de paginación en el caso de tener mas de uno, es de 2,3GB.
Cuando hablamos de Commit Charge estamos hablando del total de asignaciones “comprometidas” de deben mantenerse en RAM y en cualquier archivo de paginación existente. En muchas ocasiones se puede deducir que el principal contribuyente para que se consuman los recursos es el espacio de direcciones virtuales privadas de un proceso, pero no siempre es así. Windows también tiene un contador por proceso llamado en inglés process page file quota, (Cuota de fichero de paginación por proceso), esto representa la contribución privada de cada proceso a la carga de memoria comprometida, esto no identifica el uso actual del fichero de paginación pero si representa el máximo de fichero de paginación que utilizarían todos los procesos si completaran su cuota y estas asignaciones fueran llevadas a disco.
En resumen, los siguientes tipos de asignaciones de memoria son aquellos que contribuyen a la carga de memoria comprometida y en muchos casos a cubrir la cuota del fichero de paginación:
- Memoria comprometida privada (private commited memory) , como ya hemos comentado es lo mas común que este tipo de asignaciones hagan incrementar la carga.
- Ficheros Proyectados en memoria (Page-file-backed mapped memory) , esto es una porción de memoria virtual en la que se establece una correlación directa byte a byte con una parte de un archivo, se hace mediante la función MapViewOfFile y una de las ventajas es aumentar las prestaciones de lectura escritura, especialmente cuando se utilizan ficheros de tamaño reducido. Estas asignaciones no cargan la cuota de de fichero de paginación.
- Regiones mapeadas de memoria para Copy-on-Write, esta técnica permite que múltiples procesos puedan acceder a un mismo recurso, en el momento en que un proceso trata de escribir su parte, se crea una copia para prevenir que los cambios realizados por dicho proceso afecte al resto. Cuando el proceso crea su copia, las paginas cargadas en memoria son marcadas como Copy-on-Write. Estas asignaciones no cargan la cuota de de fichero de paginación.
- Pool de Memoria pagina y Memoria No Paginada, también otras asignaciones en el espacio del sistema que no están respaldadas por archivos explícitamente asociados. El pool de memoria no paginada cuenta en la carga aunque nunca sean escritas estas paginas. Estas asignaciones no cargan la cuota de de fichero de paginación.
- Pilas de Nucleo (Kernel stacks).
- Tablas de Páginas, la mayoría de las cuales son paginables, y no están respaldadas por archivos asignados. Incluso si no son paginables, ocupan RAM.
- Espacio para las tablas de páginas que aún no están asignadas, el espacio para estas tablas de páginas, aunque inexistentes, se carga para garantizar que las tablas de páginas se pueden crear cuando se necesitan.
- Asignaciones a memoria física.
Espero que esta información os sea de utiliza, en próximos post iremos viendo cual es la mejor forma de calcular el tamaño del fichero de paginación para mis sistemas.