Mecanismo de segmentación
Cuando se activa la segmentación una dirección virtual (llamada dirección lógica en la terminología de Intel) consta de una referencia al segmento de 16 bits y un desplazamiento de 32 bits. Dos bits de la referencia al segmento se utilizan para el mecanismo de protección, y los 14 bits restantes para especificar al segmento en cuestión (16K segmentos) .
Con una memoria segmentada, el espacio de memoria virtual total que ve el usuario es 246 = 64 Terabytes (TBytes). El espacio de direcciones físicas utiliza direcciones de 32 bits, con una capacidad máxima de 4 GBytes.
Existen dos formas de protección asociadas a cada segmento: el nivel de privilegio y el atributo de acceso.
Hay cuatro niveles de privilegio, desde el más protegido (nivel 0), al menos protegido (nivel 3). El nivel de privilegio asociado a un segmento de datos constituye su clasificación; mientras que el nivel de privilegio asociado a un segmento de programa constituye su acreditación (clearance).
Un programa en ejecución puede acceder a un segmento de datos sólo si su nivel de acreditación es menor (tiene mayor privilegio) o igual (igual privilegio) que el nivel de privilegio del segmento de datos.
La forma de utilizar los niveles de privilegio depende del diseño del sistema operativo. Lo usual es que el nivel de privilegio 1 lo utilice la mayor parte del sistema operativo, y el nivel 0 una pequeña parte del mismo, la dedicada a la gestión de memoria, la protección y el control del acceso. Esto deja dos niveles para las aplicaciones.
En muchos sistemas, las aplicaciones utilizan el nivel 3, dejándose sin utilizar el nivel 2. Los aplicaciones que implementan sus propios mecanismos de seguridad, como los sistemas de gestión de bases de datos, suelen utilizar el nivel 2.
Además de regular el acceso a los segmentos de datos, el mecanismo de privilegio limita el uso de ciertas instrucciones. Por ejemplo, las instrucciones que utilizan los registros de gestión de memoria, sólo pueden ejecutarse desde el nivel 0; y las instrucciones de E/S sólo pueden ejecutarse en el nivel determinado por el sistema operativo, que suele ser el nivel 1.
El atributo de acceso al segmento de datos especifica si se permiten accesos de lectura/ escritura o sólo de lectura. Para los segmentos de programa, el atributo de acceso especifica si se trata de acceso de lectura/ejecución o de sólo lectura.
El mecanismo de traducción de dirección para la segmentación hace corresponder una dirección virtual con una dirección lineal. Una dirección virtual consta de un desplazamiento de 32 bits y un selector de segmento de 16 bits.
El selector de segmentos consta de los siguientes campos:
• TI: Indica si la traducción va a utilizar la tabla de segmento global o local.
• Número de segmento: se utiliza como índice en la tabla de segmentos.
• RPL: Indica el nivel de privilegio del acceso.
Cada elemento de la tabla de segmentos consta de 64 bits, como muestra la siguiente figura:
Los campos son los siguientes:
• Base ( 32 bits): dirección de comienzo del segmento dentro del espacio lineal de direcciones
• Límite ( 20 bits): tamaño del segmento
• Nivel de privilegio(DPL) (2 bits)
• Bit de segmento presente(P) ( 1 bit): indica si el segmento está disponible en memoria principal
• Bit S (1 bit): determina si el segmento es del sistema
• Tipo (4 bits) determina el tipo de segmento e indica los atributos de acceso
• Bit de granularidad (G) (1 bit): indica si el campo límite se interpreta en unidades Bytes o 4KBytes
• Bit D/B (1 bit): indica si los operandos y modos de direccionamiento son de 16 ó 32 bits (en segmentos de código)
Fuente: Estructura de Computadores, Facultad de Informática, UCM