Fichero de Paginación (Parte 2, La Memoria Virtual)
Hola de nuevo, una vez que ya sabemos cómo nuestra maquina utiliza la memoria, debemos conocer como los procesos ven esa memoria, cada proceso ve un espacio de memoria virtual asignado a el mismo, para cada proceso, este espacio de memoria recibe el máximo que se puede asignar. Los Sistemas de 32-bits pueden direccionar un máximo de 4GB, cada proceso de 32-bits puede utilizar un máximo de 2GB por defecto. En sistemas de 64-bits anteriores a Windows Server 2012 R2 o Windows 8.1, se puede direccionar hasta 16TB, en máquinas desde estas versiones o posteriores se puede llegar a direccionar hasta 256TB dependiendo si el procesador soporta una instrucción determinada, por lo que los procesos de estos sistemas podrán direccionar 8TB y 128TB respectivamente. Con respeto a la parte de kernel, cada proceso puede acceder esta parte de la memoria cuando hace una transición a modo kernel mediante lo que conocemos como una llamada al sistema, la cuestión está en que todo lo que escriba ahí, va a afectar a todos los procesos, ya que es memoria compartida.
Como he comentado antes, cada proceso ve la totalidad del espacio de memoria virtual que este puede direccionar, eso no significa que un proceso de 32-bits este consumiendo 2GB y uno de 64-bits este consumiendo 8 o 128TB respectivamente, el Virtual Memory Manager es quien mapea las direcciones de memoria virtual a direcciones de memoria física siempre que sea necesario. Aunque la teoría indica que un proceso pudiera utilizar el máximo de memoria virtual que este puede ver, la realidad es que en Windows lo procesos empiezan a caerse cuando llegan aproximadamente al 80% de la misma, hay varios factores que influyen en esto como por ejemplo la fragmentación de la memoria.
Para poder comprender cuantos procesos “caben” en la memoria, es importante tener claro una serie de conceptos. Como ya se ha comentado, un proceso divide la información que maneja en pequeños trozos o páginas, una página puede estar en cualquiera de los siguientes estados:
- Libre, esta será una página que nunca ha sido utilizada o que ya no está en uso, podríamos también crear una subcategoría en este tipo de páginas y decir que existen dos subtipos, aquellas que están a cero y las que no, pero al fin y al cabo son paginas libres.
- Reservada, una página de memoria que se asigna para ser utilizada. Esta memoria será asignada a un proceso, pero este no la utilizará ni la comprometerá. Esta memoria en realidad no puede almacenar datos o código, aunque de vez en cuando los procesos pueden realizar reservas de grandes bloques de memoria virtual para que en el caso de ser necesario puedan utilizar espacios de direccionamiento contiguos.
- Comprometida, esta es una página de memoria que está siendo utilizada por el proceso, la particularidad de este estado es que la pagina al estar siendo utilizada ya está alojada o bien en memoria principal (RAM) o bien en memoria secundaria (disco), por lo que ya está consumiendo recursos de la máquina. Cuando un proceso compromete una región de memoria virtual, el sistema va a garantizar que se puede mantener la información del proceso en esa región, esto podría significar que al estar consumiendo recursos existe la posibilidad de llegar al límite de la maquina (Commit Limit).
También podemos hablar del concepto de Página Tocada, esta es una página que está siendo utilizada por el proceso en este mismo instante, esta página siempre estará albergada en memoria principal (RAM), esto básicamente es lo que se conoce como el working set del proceso con alguna salvedad.
Bien, según esta información, aquellas páginas que están comprometidas son aquellas que me consumen los recursos de la máquina, para poder ver cuanta memoria comprometida tienen todos los procesos que corren en una maquina podemos utilizar las herramientas que se datallan a continuación.:
Administrador de Tareas, anterior a Windows Vista y Server 2008 podíamos ver estos datos en el apartado Commit Charge, además de esto teníamos información sobre la utilización del fichero de paginación y su histórico.
A partir de Windows Vista y Server 2008.
A partir de Windows server 2012.
Nosotros podemos saturar la memoria comprometida con diferentes herramientas, Testlimit o incluso NotmyFault, podemos hacer llegar a la maquina a su límite de memoria que todos los procesos pueden comprometer, esta sería la suma total de la memoria física y del fichero de paginación tal y como se ve en la imagen siguiente, simplemente tenemos que tener en cuenta una cosa, si tenemos establecido el fichero de paginación de forma que este gestionada por el sistema, el fichero de paginación podría crecer hasta agotar el espacio en disco.