Así que recientemente descubrí que hay un HLT
código de operación para detener la CPU. ¡Genial, veamos qué pasa!
user@box:~$ cat > test.c
int main(void)
{
__asm__("HLT");
return 0;
}
user@box:~$ gcc -o test test.c
user@box:~$ ./test
Segmentation fault (core dumped)
user@box:~$
Duh! Qué aburrido.
Resulta que HLT
es una instrucción privilegiada, así que intentemos otra cosa.
user@box:~$ mkdir test; cd test
user@box:~/test$ cat > test.c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
int init_module(void)
{
__asm__("hlt");
return 0;
}
void cleanup_module(void)
{
}
user@box:~/test$ echo obj-m += test.o > Makefile
user@box:~/test$ make -C /lib/modules/$(uname -r)/build modules M=$(pwd)
[...]
user@box:~/test$ sudo insmod test.ko
user@box:~/test$
¡No pasa nada! ¡Aburrido!
Como resultado, HLT
detiene la CPU ... hasta la próxima interrupción. Genial, así que intentemos desactivar las interrupciones. CLI
Parece que hará lo que queramos.
user@box:~/test$ sudo rmmod test
user@box:~/test$ sed -i 's/hlt/cli; hlt/' test.c
user@box:~/test$ make -C /lib/modules/$(uname -r)/build modules M=$(pwd)
[...]
user@box:~/test$ sudo insmod test.ko
... y en este punto, el sistema operativo dejó de responder a mi entrada. No podía mover el cursor ni escribir nada con mi teclado. Bastante congelado.
Excepto que no lo fue. El reloj en el panel de mi GUI seguía funcionando. Demonios, incluso la música seguía sonando. Era como si solo mi mouse y mi teclado hubieran dejado de funcionar. Me di cuenta de que mi teclado (USB) ya no tenía energía, ni siquiera funcionaba mi LED de bloqueo de mayúsculas.
Entonces, ¿qué pasó aquí? ¿Por qué un par de instrucciones que creo que deberían "colgar" el sistema solo apaga mis dispositivos USB? ¿Por qué todo lo demás sigue funcionando? Como beneficio adicional: ¿qué debo hacer para que el sistema se congele?
CLI
solo se aplica a la CPU en la que se está ejecutando, por lo que si tiene varias CPU, debería ejecutarla en cada una. Cualquier cosa que no dependa de laCLI+HLT
CPU sería libre de continuar en su feliz camino