Diferencia entre revisiones de «Modo protegido»

Contenido eliminado Contenido añadido
Sin resumen de edición
Sin resumen de edición
Línea 22:
== Niveles privilegiados ==
 
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 correse ejecuta en el anillo 0, y las aplicaciones del usuario corrense ejecutan 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 acceder 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 correrejecutar 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 volver al anillo 3 para ejecutar el servicio.
 
El procesador comprueba niveles de privilegio en las siguientes situaciones. Si el código que correse ejecuta 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 sólo se pueden ejecutar en el anillo 0: por ejemplo LGDT (Load Global Descriptor Table) (Carga Tabla Global de Descriptores), que puede redefinir segmentos arbitrariamente y por lo tanto vencer el mecanismo de protección. POPF (Pop [[registro de status|Flags]] desde la [[pila]]) siempre es permitido, pero sólo puede cambiar el campo IOPL desde el anillo 0.