¿Cómo se implementa realmente el modo protegido en la CPU?

1

Sé lo que es el modo real y protegido de la ejecución de la CPU. ¿Pero cómo implementa la CPU el modo protegido? AFAIK cpu hace todo lo que el programa le dice que haga. ¿Dónde se implementa el comportamiento en modo protegido? ¿OS juega algún papel en esto?

    
pregunta humble_wolf 21.08.2018 - 20:54
fuente

2 respuestas

4

Hay un bit en un registro que indica si la CPU está actualmente en modo kernel o en modo de usuario. El código del programa no puede modificar este bit directamente: tiene que usar instrucciones especiales que hacen más que solo cambiar este bit. Ciertas instrucciones solo pueden usarse en modo kernel; intentar usarlos en el modo de usuario en lugar de eso activa una trampa .

Mientras el procesador se ejecuta en modo kernel, puede cambiar al modo de usuario en cualquier momento. Pero mientras el procesador se ejecuta en modo usuario, solo hay algunas formas de cambiar al modo kernel: con la llamada al sistema instrucción, debido a una interrupción, oa través de una trampa. En todos los casos, el procesador no solo cambia al modo kernel, sino que también salta a una dirección en la memoria que solo puede configurarse mediante el código del kernel. Esto asegura que el código de modo de usuario no pueda ejecutar lo que quiera en modo kernel. El modo de usuario solo puede llamar a unos pocos puntos de entrada específicos en el código del kernel, y el código del kernel en estos puntos de entrada puede configurar su entorno de procesamiento con cuidado y validar sus entradas.

Todo esto sería inútil si el código de usuario pudiera modificar el contenido de la memoria que contiene el código o los datos del núcleo. No puede debido a la unidad de gestión de memoria (MMU) . Una de las funciones de la MMU es limitar a qué memoria se puede acceder en un momento dado. La memoria se puede marcar como accesible solo para el kernel, y el cambio entre el modo kernel y el modo de usuario puede cambiar la tabla de permisos de acceso. La configuración de la MMU solo se puede modificar mientras se ejecuta en modo kernel. De esta manera, el núcleo puede configurar la memoria para que pueda acceder a su propio código y datos, pero el código de usuario no puede.

El núcleo realmente mantiene una configuración de MMU por proceso de usuario. Antes de cambiar al modo de usuario, el kernel modifica la configuración de la MMU para que se corresponda con la del proceso que se ejecutará después de cambiar al modo de usuario.

Casi cualquier procesador suficientemente avanzado sigue este modelo básico: no solo cualquier PC fabricada en los últimos 30 años, sino también cualquier teléfono inteligente e incluso muchos dispositivos integrados.

He simplificado muchas cosas. En el mundo real, puede haber más de dos niveles de privilegio, más modos de procesador, más aspectos de la configuración de MMU, etc. Tiene la idea de cómo funciona. Si desea comprender el código del kernel o escribir el suyo, deberá leer más detalladamente sobre una arquitectura de procesador específica.

El "modo real" es un aspecto histórico de los procesadores x86. No ha sido relevante en el mundo real durante las últimas dos décadas, excepto en algunos sistemas x86 integrados raros y para algunas personas que escriben cargadores de arranque o ejecutan algún software heredado muy antiguo.

    
respondido por el Gilles 23.08.2018 - 00:44
fuente
2

El modo protegido y el modo real son dos submodos del Modo heredado de la arquitectura x86-64. Una de las diferencias entre ellos está en cómo se calculan las direcciones físicas. Otra diferencia importante es que el modo protegido introduce el concepto de niveles de privilegio y atributos de protección de lectura / escritura / ejecución para aislar y proteger diferentes programas entre sí. La CPU utiliza el valor de CR0 [PE] (CR0 es solo un registro) en cada acceso a la memoria (los datos de la memoria se leen, los datos de memoria se escriben y se recuperan los códigos para determinar si está en modo real o protegido. Si CR0 [PE] es 0, la CPU está en modo real. De lo contrario, si CR0 [PE] es 1, la CPU está en modo protegido. El sistema operativo puede cambiar el modo utilizando la instrucción MOV CRO . Todas las instrucciones que siguen a MOV CRO se ejecutarán en el nuevo modo. Para obtener más información, puede consultar Intel SDM Volume 3 .

    
respondido por el Hadi Brais 22.08.2018 - 23:59
fuente

Lea otras preguntas en las etiquetas