Foro de elhacker.net

Sistemas Operativos => GNU/Linux => Mensaje iniciado por: robertito_prado en 29 Junio 2014, 02:13 am



Título: Como activar/desactivar IRQs
Publicado por: robertito_prado en 29 Junio 2014, 02:13 am
Hola!

Según leo en la wikipedia, una IRQ :

Citar
En el contexto de la informática, una interrupción (del inglés Interrupt Request, también conocida como petición de interrupción) es una señal recibida por el procesador de un ordenador, indicando que debe "interrumpir" el curso de ejecución actual y pasar a ejecutar código específico para tratar esta situación.

Una interrupción es una suspensión temporal de la ejecución de un proceso, para pasar a ejecutar una subrutina de servicio de interrupción, la cual, por lo general, no forma parte del programa, sino que pertenece al sistema operativo o al BIOS. Una vez finalizada dicha subrutina, se reanuda la ejecución del programa.

Pero leyendo esto me quedan muchas dudas... ¿Una IRQ la genera el sistema de forma automática o es tarea del administrador generarla en un momento dado?
Es que si en teoría interrumpe la ejecución actual y ejecuta un código específico...Supongo que ese código se podrá modificar , es decir, lo puede editar el administrador, ¿no?

Gracias de antemano.

Saludos!


Título: Re: Como activar/desactivar IRQs
Publicado por: Slava_TZD en 29 Junio 2014, 17:30 pm
No las 'genera' el sistema de forma automática, las maneja el kernel de forma automática, cuando presionas una tecla o haces una llamda al sistema por ejemplo...Sobre lo del código, no se entiende que es lo que quieres decir y que deseas modificar.


Título: Re: Como activar/desactivar IRQs
Publicado por: robertito_prado en 30 Junio 2014, 01:04 am
Gracias!

Con lo del código me refiero a esta parte que pone en la wikipedia:
Citar
...  es una señal recibida por el procesador de un ordenador, indicando que debe "interrumpir" el curso de ejecución actual y pasar a ejecutar código específico para tratar esta situación.

¿A que se refiere con código específico ?
¿Ese código también lo genera el kernel o no ?

Saludos.


Título: Re: Como activar/desactivar IRQs
Publicado por: kub0x en 30 Junio 2014, 02:53 am
Piensa que el hardware necesita ser accedido por la parte lógica del sistema, para ello los OS utilizan drivers (controladores de dispositivos), los cuales completan una interfaz de comunicación para el envio o recibimiento de datos. Obviamente el Kernel se ocupa de gestionar dichos accesos.

No te voy a liar simplemente cuando una IRQ sucede se cambia de modo usuario a supervisor (Kernel) y se busca la función de interrupción correspondiente a la IRQ. Si pulsas una tecla, se genera una IRQ y se llama a la rutina X que pertenece al driver Y.

Todas esas rutinas se generan al cargar el Kernel del sistema, todas ellas en la IDT (Interrupt Descriptor Table).

Saludos.


Título: Re: Como activar/desactivar IRQs
Publicado por: robertito_prado en 1 Julio 2014, 00:44 am
Citar
Si pulsas una tecla, se genera una IRQ y se llama a la rutina X que pertenece al driver Y.

Entonces se ejecutaría el código (rutina X) del driver Y no?

Gracias!


Título: Re: Como activar/desactivar IRQs
Publicado por: kub0x en 1 Julio 2014, 01:07 am
El proceso es el siguiente:

1. Se genera una IRQ en un proceso que responde a un evento (ej: pulsación de una tecla).
2. Al haberse generado una interrupción sucede un cambio de contexto (cambio de modo Usuario a Kernel).

3. La IRQ es procesada por el OS. Se busca la función que maneja la pulsación de la tecla en una tabla de rutinas (IDT) de interrupción.
En la IDT no solo residen rutinas para manejar Interrupciones Hardware (IRQ) si no también Interrupciones Software.

4. Se ejecuta dicha rutina en modo Kernel para procesar la IRQ.
5. Al finalizar se devuelve el control al contexto que generó la IRQ.

Obviamente el código que reside en esas rutinas se puede alterar, interceptar etc es lo que hacen los rootkit, pero necesitas estar en ring0.

Si te interesa lee un poquillo sobre el tema, aquí te dejo + info -> http://wiki.osdev.org/Interrupts

Saludos!


Título: Re: Como activar/desactivar IRQs
Publicado por: robertito_prado en 2 Julio 2014, 19:34 pm
Muchas gracias!

Pero eso de que se puede alterar e interceptar...¿Que es ring0?