La CPU cambia del modo Usuario al Modo Kernel: ¿Qué hace exactamente? ¿Cómo hace esta transición?


CPU Cambia del modo Usuario al Modo Kernel: ¿Qué hace exactamente? ¿Cómo hace esta transición?

EDITAR:

Incluso si depende de la arquitectura, por favor dame una respuesta. La arquitectura depende de ti. Cuéntame por la arquitectura que conoces.

Quiero tener una idea acerca de lo que todas las cosas estarán involucradas en ella.

Author: Joachim Sauer, 2010-03-19

4 answers

Nota: esto es principalmente relevante para la arquitectura x86. Aquí hay una explicación algo simplificada.

La transición suele ser causada por uno de los siguientes factores:

  • Fallo (por ejemplo, un fallo de página o alguna otra excepción causada por la ejecución de una instrucción)
  • Interrumpir (por ejemplo, una interrupción de teclado o finalización de E/S)
  • Trap (por ejemplo, una llamada al sistema)

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

Desde esta tabla la CPU puede determinar el manejador de interrupciones a ejecutar.

Como parte de la transición, los siguientes cambios (generalmente) surten efecto:

  • Cambiar a la pila del núcleo
  • Las EFLAGS se guardan
  • Se guardan el selector de segmento de código y el EIP.
  • el selector de segmento de pila y el puntero de pila se guardan
  • Comienza a ejecutar el manejador de interrupciones
  • El general los registros de propósito se guardan (trabajo del controlador)
  • Los selectores de segmento se cambian a los del núcleo (trabajo del controlador)

Ahora está en modo kernel.

Espero que eso ayude:)

 29
Author: Omar Alrubaiyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-21 21:34:39

Eso depende del sistema, pero el mecanismo habitual es que alguna operación en el campo de usuario provoque una interrupción del software. Esa interrupción hace que el procesador cambie de modo y salte al código del núcleo, que luego comprueba lo que el programa estaba tratando de hacer (¿llamada al sistema?) y luego realiza 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 también podrían causar la transición; por ejemplo, en un sistema de multitarea preventiva, una interrupción del temporizador podría desencadenar la programador a ejecutar.

 4
Author: Carl Norum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-19 17:04:59

Entiendo que cualquier programa cuyos registros de segmento tengan los dos LSBs cero se ejecutará en modo Kernel, mientras que cualquier programa cuyos registros de segmento tengan los dos LSBs = 1 se ejecutará en Modo Usuario. De hecho, los dos LSBs del segmento rgeisters definen el Nivel de privilegio (0 más alto a 3 más bajo)

Por lo tanto, para hacer que un prgram se ejecute en modo Kernel, debe configurar los registros de segmento para que sean 0010 hex (creo). No estoy seguro de cómo se puede colocar un programa en ese espacio de memoria sin sobrescribir algo más, en otras palabras, ¿cómo lo asegura el enlazador? Además, si desea llamar al código de modo de Kernel desde el código de modo de usuario, tiene que averiguar cómo pasar parámetros: no están utilizando el mismo soace de memoria, por lo que no puede pasar datos por referencia de memoria. Supongo que tienes que pasarlo en registros.

Si alguien puede llenar los vacíos en lo anterior, le estaría muy agradecido.

 3
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-18 07:28:07

En Windows, cuando realiza una llamada del sistema, las rutinas de la biblioteca llaman a un punto de entrada del núcleo que reside en el espacio de direcciones del sistema operativo. A su vez toma la CPU en modo supervisor ejecutando una instrucción específica para este propósito, como sysenter. Lo que hace es esencialmente establecer un bit en el registro de banderas. Esto permite que el sistema operativo utilice instrucciones con privilegios.

 1
Author: Jens Björnhager,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-19 21:29:13