what que machine learning operating-system kernel

operating system - que - Cambio del modo de usuario al modo kernel



que es kernel (4)

En el modo de usuario, no puedes simplemente cambiar al modo de núcleo. La interacción entre el usuario y el núcleo se realiza mediante llamadas al sistema. Cada llamada al sistema proporciona un servicio definido. El usuario envía el nombre del servicio (generalmente un número) y los parámetros requeridos. Aquí hay un ejemplo del mundo real de cómo se hace esto. Es un ensamblador de estilo AT&T x86.

Mueve el nombre de la llamada del sistema al registro EAX, el puntero a los parámetros en el registro EBX de la CPU y luego emite el número de interrupción del software 42. El manejo de la interrupción cambiará al modo kernel. El número de interrupción se busca en la tabla de descriptores de interrupción (IDT) e invoca la función que está registrada allí, el manejador de llamadas. Este controlador se ejecuta en modo kernel. Al regresar al modo de usuario, el código moverá el contenido de EAX a la variable ret.

pok_ret_t pok_do_syscall (pok_syscall_id_t syscall_id, pok_syscall_args_t* args) { pok_ret_t ret; uint32_t args_addr; uint32_t id; args_addr = (uint32_t) args; id = (uint32_t) syscall_id; asm volatile ( "movl %1,%%eax /n/t" "movl %2,%%ebx /n/t" "int $42 /n/t" "movl %%eax, %0 /n/t" :"=g"(ret) :"g"(id), "g"(args_addr) : "%eax" , "%ebx" ); return ret; }

El wiki de OS Dev es un buen punto para leer más sobre esto.

Así que no solo cambias al kernel, sino que puedes pedirle al kernel que haga algo por ti. Y luego el kernel te está diciendo si fue hecho o no.

En mi clase de sistemas operativos, me preguntan si el cambio del modo de usuario al modo kernel es privilegiado. Esto no es específico del sistema operativo. Al principio pensé que sí, pero parece una gran captura 22. Me referí a mi libro de texto:

El hardware permite que se ejecuten instrucciones privilegiadas solo en modo kernel. ...

La instrucción de cambiar al modo kernel es un ejemplo de una instrucción privilegiada.

Gagne, Greg; Abraham Silberschatz; Peter B. Galvin (2010-01-26). Conceptos del sistema operativo (p. 22). Wiley Superior Ed. Versión Kindle.

Así que empezamos en modo usuario. Para cambiar al modo kernel se requiere una instrucción privilegiada. Se debe realizar una instrucción privilegiada en modo kernel, por lo tanto, debemos cambiar al modo kernel para habilitar el modo kernel.

Estoy pensando que el sistema no permite que un usuario cambie directamente al modo kernel, sino que lo hace el kernel cuando el usuario busca ejecutar otra instrucción privilegiada. ¿Es eso correcto?


En el territorio del usuario, solicita operaciones privilegiadas a través de llamadas del sistema al kernel, que realiza el cambio al modo de kernel según sea necesario. El usuario está utilizando una API, el núcleo está realizando las operaciones privilegiadas.


Ese es un error tipográfico introducido en la 8ª edición y mantenido en la 9ª. En la séptima edición, página 19, dice en su lugar:

"La instrucción de cambiar al modo de usuario es un ejemplo de una instrucción privilegiada".

Lo que claramente tiene mucho más sentido.


Por lo general, hay un conjunto de instrucciones que no son realmente para cambiar al modo kernel de manera general, sino para solicitar servicios del sistema. Por lo tanto, estos se cambian al modo kernel, pero solo en el contexto de llamar a una parte de la funcionalidad que fue configurada por el sistema operativo con el propósito de ser llamada por el código de usuario.

En la mayoría de los sistemas modernos, incluso esto está oculto por una capa API que implementa una función específica, parte de la cual puede estar realizando una llamada al sistema operativo como se indica anteriormente.

Pero en general es cierto que el código de usuario no puede hacer el equivalente a decir "a partir de este momento, quiero estar ejecutando en modo kernel".