CPU pasa de modo de usuario al modo kernel: ¿Qué es exactamente lo que hace? ¿Cómo se hace esta transición?

StackOverflow https://stackoverflow.com/questions/2479118

Pregunta

CPU Cambia de modo de usuario al modo kernel: ¿Qué es exactamente lo que hace? ¿Cómo se hace esta transición?

EDIT:

Incluso si es dependiente de la arquitectura favor me proporcione una respuesta. La arquitectura es de usted. Dime para la arquitectura a conocer.

Quiero tener una idea acerca de lo que todas las cosas van a estar involucrados en ella.

¿Fue útil?

Solución

Nota: esto es sobre todo relevante para la arquitectura x86. He aquí una explicación algo simplificada.

La transición es generalmente causado por una de las siguientes:

  • fallo (por ejemplo, un error de página o alguna otra excepción causada por la ejecución de una instrucción)
  • interrupción (por ejemplo, una interrupción de teclado o I / acabado O)
  • Trap (por ejemplo, una llamada de sistema)

Lo que sucede normalmente es que el sistema comprueba el Descriptor de Tabla de interrupción (IDT). Cada excepción (interrupción, culpa, etc.) tiene un número asociado con ella que se utiliza para indexar en esta tabla.

A partir de esta tabla la CPU puede determinar el controlador de interrupciones para funcionar.

Como parte de la transición los siguientes cambios (en general) tengan efecto:

  • Cambiar al Kernel pila
  • EFLAGS se guardan
  • selector de segmento de código y EIP se guardan.
  • pila selector de segmento y puntero de pila se guardan
  • comience la ejecución del manejador de interrupciones
  • Los registros de propósito general se guardan (trabajo del manipulador)
  • selectores de segmento se cambian a los del kernel (el trabajo del manipulador)

Ahora se encuentra en modo de núcleo.

Espero que ayude:)

Otros consejos

Eso es dependiente del sistema, pero el mecanismo habitual es un poco de espacio de usuario de operación provoca una interrupción de software. Eso hace que los modos de interrupción del interruptor de procesador y saltar al código del núcleo, que luego se comprueba lo que el programa estaba tratando de hacer (llamada al sistema?) Y luego hace la acción solicitada y salta de nuevo al código de modo de usuario. Otros mecanismos además de una interrupción de software podría causar la transición así; por ejemplo, en un sistema multitarea preferente, una interrupción del temporizador podría desencadenar el planificador para funcionar.

Mi entendimiento es que cualquier programa cuyo segmento registros tienen los dos bits menos significativos cero se ejecuta en modo de núcleo mientras que cualquier programa cuyos registros de segmento tiene los dos bits LSB = 1 estará funcionando en modo de usuario. De hecho, los dos bits menos significativos de los rgeisters segmento definir el nivel Priviledge (0 más alto al más bajo 3)

Por lo tanto, para hacer una prgram ejecución en modo kernel que tiene que configurar el segmento registra para ser hexagonal 0010 (creo). No estoy seguro de cómo se puede colocar un programa en el que el espacio de memoria sin sobrescribir algo más - en otras palabras, ¿cómo el enlazador asegurarse de que? Además, si se desea llamar el código de modo de núcleo de código de modo de usuario, usted tiene que encontrar la manera de pasar parámetros - que no están usando la misma soace de memoria, por lo que no se puede pasar por referencia los datos de la memoria. Supongo que tiene que pasar en los registros.

Si anynody puede llenar los vacíos en lo anterior, sería muy agradecido.

En Windows, cuando se hace una llamada al sistema, las rutinas de biblioteca llamar a un punto de entrada del núcleo que reside en el espacio de direcciones del sistema operativo. Que a su vez lleva a la CPU en modo supervisor mediante la ejecución de una instrucción específica para este fin, como SYSENTER . Lo que hace es establecer esencialmente un bit en el registro de banderas. Esto permite que el sistema operativo para utilizar instrucciones privilegiadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top