¿La memoria virtual es real o es solo un método para administrar la memoria?
0
No estoy seguro de si la memoria virtual es realmente un componente físico, o si las personas simplemente se refieren a él como un método para optimizar los procesos de memoria.
La memoria virtual es un concepto, pero para implementarla necesita una parte muy real del circuito de la CPU llamada MMU . Es una cosa considerable, que requiere espacio en el silicio, ya que tiene cachés, y se accede a través de una docena o dos de instrucciones dedicadas.
anrieff
Respuestas:
4
La memoria virtual es un concepto.
Como dice anrieff, los sistemas que admiten memoria virtual tendrán una MMU que realmente maneja la asignación. El procesador usará direcciones virtuales, que pueden ser cualquier dirección en el espacio de direcciones de 32 o 64 bits que admita. Las direcciones virtuales no están limitadas por la cantidad de memoria física.
Como mencioné en mi comentario, la memoria virtual no tiene que asignarse a nada. Hay dos conjuntos de tablas involucradas:
las tablas de páginas MMU , que pueden correlacionarse con la memoria física real o pueden no depender del bit "presente". Puede tener páginas que no están "presentes"; la MMU no sabe ni le importa lo que puedan contener, pero no están asignados a DRAM física real. Si intenta acceder a uno de estos, el sistema genera un error de página en el sistema operativo.
el sistema operativo realiza un seguimiento de la asignación de memoria a los procesos y a sí mismo, y asume la responsabilidad del manejo de fallas de página. Puede decidir qué hacer con las páginas que no están presentes mientras el proceso que accedió a la memoria está en pausa. Las posibles opciones incluyen:
Intercambio: la página se intercambia. Asigne un poco de DRAM real y lea desde el disco, luego regrese al proceso.
IO mapeado en memoria: similar, pero leyendo desde un archivo específico.
Espacio PCI / AGP: la solicitud pasa por el bus, por ejemplo, a una GPU en lugar de a la memoria principal.
Ceros: el sistema operativo mantiene lista una DRAM pre-puesta a cero o deja de escribir ceros en una página antes de dársela.
Inválido: finalmente, es completamente posible que el sistema operativo no regrese en absoluto y simplemente elimine el proceso que solicitó esa página. Un ejemplo común es la "sobrecompromiso" de la memoria de Linux: los procesos pueden solicitar y asignar más memoria que el espacio de intercambio DRAM + disponible. Esto está bien siempre que no lo usen. Si no todos lo usan y el sistema se queda sin memoria real, que comenzará a matar procesos para recuperar el sistema. Otras situaciones de crisis pueden incluir la memoria asignada de E / S a un archivo a través de la red que se ha ido, o cambiar en una unidad que ha fallado.
Puede asignar deliberadamente una página inutilizable (opción mmap PROT_NONE en Linux). Esto ocasionalmente es útil para encontrar ciertos tipos de errores.
No estoy 100% seguro, pero si IIRC, sobrecompromiso de Linux y OOM Killer son dos cosas diferentes: puede ser que el Proceso A solicitó la página que superó el límite de memoria física + intercambio; luego el asesino OOM entra en acción, pero puede decidir matar un proceso diferente, el Proceso B, y al final se sirve una página válida a A ("aquí está la página que solicitó; perdón por haber tenido que esperar, solo estábamos ocupados matando a otros clientes, para que podamos servirle ").
Respuestas:
La memoria virtual es un concepto.
Como dice anrieff, los sistemas que admiten memoria virtual tendrán una MMU que realmente maneja la asignación. El procesador usará direcciones virtuales, que pueden ser cualquier dirección en el espacio de direcciones de 32 o 64 bits que admita. Las direcciones virtuales no están limitadas por la cantidad de memoria física.
Como mencioné en mi comentario, la memoria virtual no tiene que asignarse a nada. Hay dos conjuntos de tablas involucradas:
las tablas de páginas MMU , que pueden correlacionarse con la memoria física real o pueden no depender del bit "presente". Puede tener páginas que no están "presentes"; la MMU no sabe ni le importa lo que puedan contener, pero no están asignados a DRAM física real. Si intenta acceder a uno de estos, el sistema genera un error de página en el sistema operativo.
el sistema operativo realiza un seguimiento de la asignación de memoria a los procesos y a sí mismo, y asume la responsabilidad del manejo de fallas de página. Puede decidir qué hacer con las páginas que no están presentes mientras el proceso que accedió a la memoria está en pausa. Las posibles opciones incluyen:
Intercambio: la página se intercambia. Asigne un poco de DRAM real y lea desde el disco, luego regrese al proceso.
IO mapeado en memoria: similar, pero leyendo desde un archivo específico.
Espacio PCI / AGP: la solicitud pasa por el bus, por ejemplo, a una GPU en lugar de a la memoria principal.
Ceros: el sistema operativo mantiene lista una DRAM pre-puesta a cero o deja de escribir ceros en una página antes de dársela.
Inválido: finalmente, es completamente posible que el sistema operativo no regrese en absoluto y simplemente elimine el proceso que solicitó esa página. Un ejemplo común es la "sobrecompromiso" de la memoria de Linux: los procesos pueden solicitar y asignar más memoria que el espacio de intercambio DRAM + disponible. Esto está bien siempre que no lo usen. Si no todos lo usan y el sistema se queda sin memoria real, que comenzará a matar procesos para recuperar el sistema. Otras situaciones de crisis pueden incluir la memoria asignada de E / S a un archivo a través de la red que se ha ido, o cambiar en una unidad que ha fallado.
Puede asignar deliberadamente una página inutilizable (opción mmap PROT_NONE en Linux). Esto ocasionalmente es útil para encontrar ciertos tipos de errores.
fuente