Jadi saya baru-baru tahu bahwa ada HLT
opcode untuk menghentikan CPU. Keren, mari kita lihat apa yang terjadi!
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! Betapa membosankan.
Ternyata HLT
instruksi yang istimewa, jadi mari kita coba sesuatu yang lain.
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$
Tidak ada yang terjadi! Membosankan!
Ternyata, HLT
menghentikan CPU ... sampai interupsi berikutnya. Keren, jadi mari kita coba nonaktifkan interupsi. CLI
Kedengarannya seperti itu akan melakukan apa yang kita inginkan.
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
... dan pada titik ini, OS berhenti merespons input saya. Saya tidak bisa memindahkan kursor, atau mengetik apa pun menggunakan keyboard saya. Cukup beku.
Tapi ternyata tidak. Jam di panel GUI saya terus berjalan. Sial, bahkan musiknya terus diputar. Seolah-olah hanya mouse dan keyboard saya yang berhenti bekerja. Saya menyadari bahwa keyboard (USB) saya tidak memiliki daya lagi, bahkan LED caps lock saya tidak akan berfungsi.
Jadi, apa yang terjadi di sini? Mengapa sepasang instruksi yang saya rasa harus "menutup" sistem hanya mematikan perangkat USB saya? Mengapa semua yang lain terus berjalan? Sebagai bonus: Apa yang harus saya lakukan untuk benar-benar membuat sistem macet?
CLI
hanya berlaku untuk CPU yang menjalankannya, jadi jika Anda memiliki banyak CPU, Anda harus menjalankannya pada masing-masing CPU. Apa pun tidak bergantung padaCLI+HLT
CPU akan bebas untuk melanjutkan di jalan gembira nya