2009-10-06 17 views
5

¿Es posible deshabilitar todas las interrupciones con un programa ASM/C/C++ para obtener un control total sobre el procesador?Desactivar interrupciones de hardware y software

Si sí -> ¿cómo?

Si no -> cómo funcionan las llamadas al sistema de funcionamiento "atómico" (por ejemplo, al ingresar a una sección crítica)?

Gracias por su ayuda!

+4

Debe indicar qué procesador está utilizando. Y qué sistema operativo si hay alguno. En el moderno sistema operativo de escritorio/servidor, el código de usuario generalmente se ejecuta en un modo sin privilegios que le impide hacer esto. – nos

+0

¿Qué procesador? ¿Qué sistema operativo? –

+0

MS Windows (XP SP2/SP3, Vista, 7) versiones x86 y x64, procesadores Intel modernos (por ejemplo, Intel Core 2 Duo) –

Respuesta

3

en x86 y la mayoría de los demás procesadores modernos se pueden obtener instrucciones atómicas. Aquellos que están GARANTIZADOS para que no se terminen de ejecutar antes de que otro subproceso/procesador pueda acceder a esa memoria.

En Win32 tiene las funciones Interbloqueadas * que abstrae de usted en plataformas compatibles.

En un MIPS, muchas instrucciones pueden tener un .I agregado al final de las instrucciones para garantizar el enclavamiento.

+1

En un x86, puede prefijar ciertas instrucciones con "bloqueo" para hacerlas atómicas. – hirschhornsalz

+0

Ahh gracias :) Tenía que ser algo así :) – Goz

+0

¿me puede dar un ejemplo de código fuente, por favor? –

4

En conjunto x86 los los comandos son

  • sti conjunto habilitación de interrupción bit
  • cli interrupción claro bit de habilitación

Estos comandos establecidos y despejar el IF Flag. Cuando se establece el indicador IF, la CPU manejará las interrupciones de hardware, y cuando esté despejado, la CPU ignorará las interrupciones de hardware. Sin embargo, no afecta el manejo de las interrupciones que no se pueden enmascarar, ni afecta las interrupciones o excepciones del software. Estas instrucciones tampoco funcionan en modo no privilegiado (generalmente todo más alto que el anillo 0, según IOPL).

+4

lo tienes al revés. STI habilita las interrupciones. CLI desactiva. –

+0

Tampoco desactiva las interrupciones o excepciones de software – Stewart

+0

Gracias a todos por sus comentarios y ediciones: STI habilita las interrupciones, CLI deshabilita las interrupciones, de hecho es correcto. Estaba seguro de que era al revés, pero aprendí mi ensamblaje en un C64, así que lo busqué: el 6510 tenía CLI desactivado y STI habilitado. Estoy confundido;-) –

0

El x86 tiene un indicador de interrupción (IF) en el registro FLAGS. Cuando este indicador se establece en 0, las interrupciones de hardware están deshabilitadas; de lo contrario, están habilitadas. El comando cli establece este indicador en 0 y sti lo establece en 1. Las instrucciones que cargan valores en el registro FLAGS (como popf e iret) también pueden modificar este indicador.

buena suerte!

Cuestiones relacionadas