En el direccionamiento de memoria para arquitecturas de computadoras Intel x86 , los descriptores de segmento son una parte de la unidad de segmentación, que se utiliza para traducir una dirección lógica a una dirección lineal. Los descriptores de segmento describen el segmento de memoria al que se hace referencia en la dirección lógica. [1]
El descriptor de segmento (de 8 bytes de longitud en 80286 y posteriores) contiene los siguientes campos: [2]
- Una dirección base de segmento
- El límite del segmento que especifica el tamaño del segmento.
- Byte de derechos de acceso que contiene la información del mecanismo de protección
- Bits de control
Estructura
El descriptor de segmento x86 y x86-64 tiene el siguiente formato: [3]
Dónde se encuentran los campos:
- Dirección base
- Dirección de memoria inicial del segmento. Su longitud es de 32 bits y se crea a partir de los bits 16 a 31 de la parte inferior y los bits 0 a 7 de la parte superior, seguidos de los bits 24 a 31.
- Límite de segmento
- Su longitud es de 20 bits y se crea a partir de los bits de la parte inferior 0 a 15 y los bits de la parte superior 16 a 19. Define la dirección del último dato accesible. La longitud es uno más que el valor almacenado aquí. La interpretación exacta de esto depende del bit de granularidad del descriptor de segmento.
- G=Granularidad
- Si está claro, el límite se expresa en unidades de bytes, con un máximo de 2 20 bytes. Si se establece, el límite se expresa en unidades de páginas de 4096 bytes, con un máximo de 2 32 bytes.
- D/B
- D = Tamaño de operando predeterminado: si está claro, se trata de un segmento de código de 16 bits; si está configurado, se trata de un segmento de 32 bits.
- B = Grande: si se configura, el tamaño máximo de desplazamiento para un segmento de datos se incrementa a 32 bits 0xffffffff. De lo contrario, es el máximo de 16 bits 0x0000ffff. Básicamente, tiene el mismo significado que "D".
- L=Largo
- Si se configura, este es un segmento de 64 bits (y D debe ser cero) y el código en este segmento utiliza la codificación de instrucciones de 64 bits. "L" no se puede configurar al mismo tiempo que "D", es decir, "B". (Bit 21 en la imagen)
- AVL=Disponible
- Para uso de software, no para uso de hardware (Bit 20 en la imagen con la etiqueta A)
- P=Presente
- Si está claro, se genera una excepción de "segmento no presente" en cualquier referencia a este segmento.
- DPL=Nivel de privilegio del descriptor
- Nivel de privilegio (anillo) necesario para acceder a este descriptor
- S=Segmento del sistema
- Si está claro, se trata de un segmento del sistema; si es 1, se trata de un segmento de código/datos.
- Tipo
- Si el bit 11 está activado, se trata de un descriptor de segmento de código. Si está desactivado, se trata de un descriptor de segmento de datos/pila, en el que "D" se reemplaza por "B", "C" se reemplaza por "E" y "R" se reemplaza por "W". De hecho, se trata de un caso especial del campo de tipo de 2 bits, en el que el bit 12 anterior desactivado como "0" se refiere a más descriptores de sistema internos, para LDT, LSS y puertas.
- C=Conforme
- El código de este segmento puede llamarse desde niveles menos privilegiados.
- E=Expandir hacia abajo
- Si está claro, el segmento se expande desde la dirección base hasta la base + límite. Si está configurado, se expande desde el desplazamiento máximo hasta el límite, un comportamiento que se usa generalmente para pilas.
- R=Legible
- Si está claro, el segmento se puede ejecutar, pero no leer.
- W=Escribible
- Si está claro, el segmento de datos se puede leer, pero no escribir.
- A=Accedido
- Este bit se establece en 1 por hardware cuando se accede al segmento y se borra por software.
Véase también
Referencias
- ^ Bovet, DP y Cesati, M. (2000). Entendiendo el núcleo de Linux (Primera edición) . O'Reilly & Associates, Inc.
- ^ Tabak, Daniel (1995). Microprocesadores avanzados . Mcgraw Hill Publishers. pág. 149. ISBN 9780070628434.
- ^ Manual del programador de la arquitectura AMD64, volumen 2: Programación del sistema (PDF) (Informe técnico). 2013. pág. 80. Archivado desde el original (PDF) el 18 de febrero de 2018.
- Tabak, Daniel (1991). Microprocesadores avanzados . McGraw Hill and Co. ISBN 9780070628076.
- Hall, Douglas. Microprocesadores e interfaces . McGraw Hill Publications.
Lectura adicional
- Robert R. Collins (agosto de 1998). "El caché de descriptores de segmentos". Diario del Dr. Dobb .
Enlaces externos
- Manual de referencia del programador Intel 80386: traducción de segmentos