Podría ser una pregunta estúpida donde la respuesta es "no", pero ¿es eso teóricamente posible? Me pregunto porque no

Y no sé para qué ...

0
Welgriv 21 oct. 2019 a las 18:48

1 respuesta

La mejor respuesta

Hay varios tipos diferentes de "manejadores de interrupciones".

El primero, los controladores de IRQ de hardware, se modifican cuando el sistema operativo carga controladores y demás.

El segundo, los controladores de interrupciones de software, se utilizan para llamar a servicios de nivel de sistema operativo en sistemas operativos modernos.

Esos son los que tienen soporte de hardware (ya sea en toda la computadora o dentro del procesador).

Un tercer tipo, sin soporte de hardware, son los "manejadores de señales" (en UNIX), que son básicamente a nivel del sistema operativo y se relacionan con los eventos del sistema operativo.

El concepto común entre ellos es que las respuestas son programables. La idea es que sepa cómo quiere que su software / sistema operativo responda a ellos, por lo que agrega el código necesario para repararlos. En ese sentido, son "modificables en tiempo de ejecución".

Pero hay reglas sobre qué hacer en estas cosas. Principalmente, no querrá perder demasiado tiempo manipulándolos, porque cualquier cosa que haga con ellos evita que se produzcan otras interrupciones (de la misma o menor prioridad) mientras los está procesando. (Por ejemplo, no desea estar en medio de manejar una interrupción y obtener otra interrupción por lo mismo antes de terminar de manejar la primera, porque un manejador de interrupciones puede hacer cosas que de otra manera requerirían un bloqueo (cargar y incrementando el puntero actual o el último en una cola de anillo, por ejemplo) y golpearía el estado si volviera a entrar).

Por lo tanto, los manejadores de interrupciones hacen lo mínimo de lo que necesitan hacer y establecen un indicador para que el software reconozca que el procesamiento debe realizarse una vez que vuelva a salir del modo de interrupción.

Históricamente, DOS y otros sistemas operativos no protegidos permitían que el software modificara las tablas de interrupciones de cualquier manera. Esto funcionó bien cuando las personas que entendían cómo se suponía que funcionaban las interrupciones las estaban programando, pero también era fácil estropear por completo el estado del sistema con ellas. Esta es la razón por la que los sistemas operativos modernos y protegidos no suelen permitir que el software del usuario modifique las tablas de interrupciones. (Si está ejecutando en modo kernel como controlador, puede hacerlo, pero aún así no es una buena idea).

Pero UNIX permite que el software del usuario cambie los manejadores de señales de su proceso. Por lo general, esto se hace para permitir (por ejemplo) que SIGHUP le diga a Apache que vuelva a cargar sus archivos de configuración.

La modificación de la tabla de interrupciones que utiliza el sistema operativo modifica esa tabla para todo el software que se ejecuta en el sistema. Por lo general, esto no es algo que un usuario que ejecute un sistema operativo seguro desearía particularmente si quisiera mantener la seguridad de su sistema.

2
sjcaged 21 oct. 2019 a las 16:49