Diferencia entre revisiones de «Modo protegido»

Contenido eliminado Contenido añadido
Sin resumen de edición
→‎Niveles privilegiados: Correcciones gramáticas
Línea 24:
En modo protegido, hay cuatro niveles de privilegio o [[anillo (seguridad de computador)|anillos]], numerados de 0 a 3. El código del [[Núcleo (informática)|núcleo]] (kernel) del sistema operativo, que necesita usar instrucciones privilegiadas corre en el anillo 0, y las aplicaciones del usuario corren normalmente en el anillo 3.
 
El sistema operativo puede asignar los anillos 1 y 2 a servicios de sistema, como [[Protocolo de red|protocolos de red]] o la gerencia de [[Ventana (informática)|ventanas]], que las aplicaciones pueden llamar. El hacer esto, le permite a los servicios accesaracceder directamente los datos de la aplicación, mientras que se protegen de éstas, así como el núcleo queda protegido de los servicios. Sin embargo, esto requiere, al sistema operativo, especificar la protección de memoria a nivel de segmento (porque en el 80386, la protección de nivel de página no puede distinguir entre los anillos 0, 1, y 2) y puede ser difícil si el sistema operativo necesita ser portable a procesadores que soporten solamente dos anillos. En lugar de ello, un sistema operativo puede alcanzar una protección equivalente o más fuerte al correr los servicios en el anillo 3 pero en un diferente [[espacio de dirección]]. Sin embargo, esto cuesta más, al tener una [[conmutación de contexto]] más compleja a la hora de la llamada, a menos que al servicio le sea dado un [[Task State Segment]] (segmento de estado de tarea) separado, el procesador primero debe cambiar al anillo 0 para cambiar el espacio de dirección, y después retornarvolver al anillo 3 para ejecutar el servicio.
 
El procesador comprueba niveles de privilegio en las siguientes situaciones. Si el código que corre no tiene suficientes privilegios, el resultado es generalmente una excepción que el sistema operativo puede manejar; pero también están las instrucciones que hacen los mismos chequeos sin levantar excepciones.
 
* Instrucción privilegiada. Algunas instrucciones solosólo se pueden ejecutar en el anillo 0: por ejemplo LGDT (Load Global Descriptor Table) (Carga DescriptorTabla Global de TablaDescriptores), que puede redefinir segmentos arbitrariamente y por lo tanto derrotarvencer el mecanismo de protección. POPF (Pop [[registro de status|Flags]] desde ella [[stackpila]]) siempre es permitido, pero solosólo puede cambiar el campo IOPL desde el anillo 0.
 
* [[Entrada/salida]]. El nivel de privilegio requerido para las instrucciones de IE/OS y para modificar el flag de [[interrupción]] es definido por medio del campo IOPL del registro EFLAGS. Incluso si el nivel actual de privilegios no es suficiente, todavía puede serpermitir permitido IE/OS a puertos específicos vía el mapa de bits de permisos de I/O en el segmento de estado de tarea (no soportado por el 80286).
 
* Cargar un registro de [[segmento de memoria|segmento]], ''far jumps'' y llamadas a subrutinas. Cada segmento tiene un descriptor que definadefine el ''descriptor privilege level'' (DPL) (nivel de privilegio del descriptor) requerido para usar ese segmento. El valor del selector cargado en un registro de segmento también codifica un ''requestor's privilege level'' (RPL) (nivel de privilegio del solicitante), que debe ser fijado con la instrucción ARP, para marcar los selectores recibidos desde código menos privilegiado. El procesador hace diferentes comprobaciones para accesos de los datos, la conmutación delde la stackpila, transferencias de control directas, y transferencias de control indirectas por medio de una puerta.
 
* Retornando a código menos privilegiado. El procesador limpia todos los registros de segmentos que contengan selectores que codifican en el nuevo nivel de privilegio que no hubieran podido cargarse allí por sí mismos.