stringtranslate.com

Espacio de direcciones virtuales

En informática , un espacio de direcciones virtuales ( VAS ) o espacio de direcciones es el conjunto de rangos de direcciones virtuales que un sistema operativo pone a disposición de un proceso. [1] El rango de direcciones virtuales generalmente comienza en una dirección baja y puede extenderse hasta la dirección más alta permitida por la arquitectura del conjunto de instrucciones de la computadora y admitida por la implementación del tamaño del puntero del sistema operativo , que puede ser de 4 bytes para 32 bits o 8 bytes para versiones de sistema operativo de 64 bits . Esto proporciona varios beneficios, uno de los cuales es la seguridad a través del aislamiento de procesos , suponiendo que a cada proceso se le asigne un espacio de direcciones independiente .

Ejemplo

En la siguiente descripción, la terminología utilizada será particular del sistema operativo Windows NT , pero los conceptos son aplicables a otros sistemas operativos de memoria virtual.

Cuando se ejecuta una nueva aplicación en un SO de 32 bits , el proceso tiene un VAS de 4 GiB : cada una de las direcciones de memoria (de 0 a 2 32 − 1) en ese espacio puede tener un solo byte como valor. Inicialmente, ninguno de ellos tiene valores ('-' representa ningún valor). El uso o configuración de valores en dicho VAS provocaría una excepción de memoria .

 0 4 GiBEVA |----------------------------------------------|

Luego, el archivo ejecutable de la aplicación se asigna al VAS. Las direcciones en el proceso VAS se asignan a bytes en el archivo exe. El sistema operativo gestiona el mapeo:

 0 4 GiBVAS |---vvv----------------------------------------|mapeo |||aplicación de bytes de archivo

Las v son valores de bytes en el archivo asignado . Luego, se asignan los archivos DLL necesarios (esto incluye bibliotecas personalizadas y del sistema, como kernel32.dlly user32.dll):

 0 4 GiBVAS |---vvv--------vvvvvv---vvvv-------------------|mapeo ||| |||||| ||||usuario del kernel de la aplicación de bytes de archivo

Luego, el proceso comienza a ejecutar bytes en el archivo EXE. Sin embargo, la única forma en que el proceso puede usar o establecer valores '-' en su VAS es pedirle al sistema operativo que los asigne a bytes de un archivo. Una forma común de utilizar la memoria VAS de esta manera es asignarla al archivo de página . El archivo de página es un único archivo, pero se pueden asignar varios conjuntos distintos de bytes contiguos a un VAS:

 0 4 GiBVAS |---vvv--------vvvvvv---vvvv----vv---v----vvv--|mapeo ||| |||||| |||| || | |||archivo bytes aplicación kernel usuario system_page_file

Y diferentes partes del archivo de página se pueden asignar al VAS de diferentes procesos:

 0 4 GiBVAS 1 |---vvvv-------vvvvvv---vvvv----vv---v----vvv--|mapeo |||| |||||| |||| || | |||bytes de archivo aplicación1 aplicación2 usuario del kernel system_page_filemapeo |||| |||||| |||| || |VAS 2 |--------vvvv--vvvvvv---vvvv-------vv---v------|

En Microsoft Windows de 32 bits, de forma predeterminada, solo se ponen a disposición de los procesos 2 GiB para su propio uso. [2] Los otros 2 GiB son utilizados por el sistema operativo. En ediciones posteriores de 32 bits de Microsoft Windows, es posible ampliar el espacio de direcciones virtuales en modo usuario a 3 GiB, mientras que solo queda 1 GiB para el espacio de direcciones virtuales en modo kernel marcando los programas como IMAGE_FILE_LARGE_ADDRESS_AWARE y habilitando el /3GBinterruptor en el archivo boot.ini. [3] [4]

En Microsoft Windows de 64 bits, en un proceso que ejecuta un ejecutable vinculado con /LARGEADDRESSAWARE:NO, el sistema operativo limita artificialmente la parte del modo de usuario del espacio de direcciones virtuales del proceso a 2 GiB. Esto se aplica tanto a ejecutables de 32 como de 64 bits. [5] [6] Los procesos que ejecutan ejecutables vinculados con la /LARGEADDRESSAWARE:YESopción, que es la opción predeterminada para Visual Studio 2010 de 64 bits y versiones posteriores, [7] tienen acceso a más de 2 GiB de espacio de direcciones virtuales: hasta 4 GiB para Ejecutables de 32 bits, hasta 8 TiB para ejecutables de 64 bits en Windows hasta Windows 8 y hasta 128 TiB para ejecutables de 64 bits en Windows 8.1 y posteriores. [4] [8]

La asignación de memoria a través del malloc de C establece el archivo de página como el almacén de respaldo para cualquier nuevo espacio de direcciones virtuales. Sin embargo, un proceso también puede asignar explícitamente bytes de archivo.

linux

Para CPU x86 , Linux de 32 bits permite dividir los rangos de direcciones de usuario y kernel de diferentes maneras: usuario/kernel 3G/1G (predeterminado), usuario/kernel 1G/3G o usuario/kernel 2G/2G . [9]

Ver también

Notas

  1. ^ "¿Qué es un espacio de direcciones?". IBM . Consultado el 5 de mayo de 2024 .
  2. ^ "Espacio de direcciones virtuales". MSDN . Microsoft.
  3. ^ "Estructura LOADED_IMAGE". MSDN . Microsoft.
  4. ^ ab "Sintonización de 4 Gigabytes: BCDEdit y Boot.ini". MSDN . Microsoft.
  5. ^ "/LARGEADDRESSAWARE (Manejar direcciones grandes)". MSDN . Microsoft.
  6. ^ "Espacio de direcciones virtuales". MSDN . Microsoft.
  7. ^ "/LARGEADDRESSAWARE (Manejar direcciones grandes)". MSDN . Microsoft.
  8. ^ "/LARGEADDRESSAWARE (Manejar direcciones grandes)". MSDN . Microsoft.
  9. ^ "Núcleo de Linux - x86: división de memoria".

Referencias