stringtranslate.com

modelos de memoria x86

En informática , los modelos de memoria x86 son un conjunto de seis modelos de memoria diferentes de la CPU x86 que funcionan en modo real y que controlan cómo se utilizan los registros de segmento y el tamaño predeterminado de los punteros.

Segmentación de la memoria

Se utilizan cuatro registros para hacer referencia a cuatro segmentos en la arquitectura de memoria segmentada x86 de 16 bits. DS ( segmento de datos ), CS ( segmento de código ), SS ( segmento de pila ) y ES (segmento adicional). Otro registro de 16 bits puede actuar como un desplazamiento en un segmento determinado, por lo que una dirección lógica en esta plataforma se escribe segmento : desplazamiento , normalmente en notación hexadecimal . En modo real, para calcular la dirección física de un byte de memoria, el hardware desplaza el contenido del registro de segmento apropiado 4 bits hacia la izquierda (multiplicando efectivamente por 16) y luego suma el desplazamiento.

Por ejemplo, la dirección lógica 7522:F139 produce la dirección física de 20 bits:

Tenga en cuenta que este proceso conduce a un alias de la memoria, de modo que cualquier dirección física determinada tiene hasta 4096 direcciones lógicas correspondientes. Esto complica la comparación de punteros a diferentes segmentos.

Tamaños de puntero

Los formatos de puntero se conocen como cercano , lejano o enorme .

 mov bx , palabra [ reg ] mov ax , palabra [ bx ] mov dx , palabra [ bx + 2 ]           
 les bx , dword [ reg ] mov ax , palabra [ es : bx ] mov dx , palabra [ es : bx + 2 ]        
 les bx , dword [ reg ] mov ax , word [ es : bx] add bx , 2 test bx , 0xfff0 jz lbl sub bx , 0x10 mov dx , es inc dx move es , dx lbl : mov dx , word [ es : bx ]                       

Modelos de memoria

Los modelos de memoria son:

Otras plataformas

En modo protegido, un segmento no puede ser a la vez escribible y ejecutable. [2] [3] Por lo tanto, al implementar el modelo de memoria Tiny, el registro del segmento de código debe apuntar a la misma dirección física y tener el mismo límite que el registro del segmento de datos. Esto anuló una de las características del 80286 , que garantiza que los segmentos de datos nunca sean ejecutables y que los segmentos de código nunca se puedan escribir (lo que significa que nunca se permite la modificación automática del código ). Sin embargo, en el 80386, con su unidad de gestión de memoria paginada es posible proteger páginas de memoria individuales contra escritura. [4] [5]

Los modelos de memoria no se limitan a programas de 16 bits. También es posible utilizar la segmentación en modo protegido de 32 bits (lo que da como resultado punteros de 48 bits) y existen compiladores de lenguaje C que lo admiten. [6] Sin embargo, la segmentación en modo de 32 bits no permite acceder a un espacio de direcciones más grande que el que cubriría un solo segmento, a menos que algunos segmentos no siempre estén presentes en la memoria y el espacio de direcciones lineal solo se use como caché en un espacio más grande. Espacio virtual segmentado. [ cita necesaria ] Permite una mejor protección para el acceso a varios objetos (las áreas de hasta 1 MB de largo pueden beneficiarse de una granularidad de protección de acceso de un byte, en comparación con la granularidad gruesa de 4 KiB que ofrece la paginación única) y, por lo tanto, solo se usa en especializados aplicaciones, como software de telecomunicaciones. [ cita necesaria ] Técnicamente, el espacio de direcciones "plano" de 32 bits es un modelo de memoria "pequeño" para el espacio de direcciones segmentado. Bajo ambos reinados, los cuatro registros de segmento contienen el mismo valor.

x86-64

En la plataforma x86-64 , existen un total de siete modelos de memoria, [7] ya que la mayoría de las referencias de símbolos tienen solo 32 bits de ancho y si las direcciones se conocen en el momento del enlace (a diferencia del código independiente de la posición ). Esto no afecta a los punteros utilizados, que siempre son punteros planos de 64 bits, sino sólo a cómo se pueden colocar los valores a los que se debe acceder mediante símbolos.

Ver también

Bibliografía

Referencias

  1. ^ "Conjunto de instrucciones Intel - LES". Páginas del conjunto de instrucciones Intel . Estambul Teknik Üniversitesi/ Intel . Consultado el 19 de octubre de 2015 .
  2. ^ "Manual del desarrollador de arquitecturas Intel 64 e IA-32: Vol. 3A". Intel. págs. 3–17 . Consultado el 13 de septiembre de 2011 .
  3. ^ "Manual del programador de arquitectura AMD64 Volumen 2: Programación del sistema" (PDF) . AMD. págs. 82–84 . Consultado el 13 de septiembre de 2011 .
  4. ^ "Manual del desarrollador de arquitecturas Intel 64 e IA-32: Vol. 3A". Intel. págs. 4–41 . Consultado el 13 de septiembre de 2011 .
  5. ^ "Manual del programador de arquitectura AMD64 Volumen 2: Programación del sistema" (PDF) . AMD. pag. 139 . Consultado el 13 de septiembre de 2011 .
  6. ^ "Abrir la versión 2 de referencia del lenguaje Watcom C" (PDF) . github.com/open-watcom . Abra Watcom . Consultado el 10 de enero de 2018 .
  7. ^ "Interfaz binaria de aplicación System V, suplemento de procesador de arquitectura AMD64, versión preliminar 0.99.7" (PDF) . págs. 33–35.