इसलिए मैंने हाल ही में पता लगाया कि HLTसीपीयू को रोकने के लिए एक ओपकोड है। कूल, चलो देखते हैं क्या होता है!
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:~$
ओह! कितना उबाऊ है।
टर्न आउट HLTएक विशेषाधिकार प्राप्त निर्देश है, तो चलिए कुछ और की कोशिश करते हैं।
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$
कुछ नहीं हुआ! उबाऊ!
जैसा कि यह पता चला है, HLTअगले रुकावट तक सीपीयू ... को रोक देता है। कूल है, तो चलो बाधित करने की कोशिश करते हैं। CLIलगता है कि हम क्या चाहते हैं।
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
... और इस बिंदु पर, OS ने मेरे इनपुट का जवाब देना बंद कर दिया। मैं अपने कीबोर्ड का उपयोग करके कर्सर को स्थानांतरित नहीं कर सकता, या कुछ भी टाइप नहीं कर सकता। बहुत जमे हुए।
सिवाय इसके कि यह नहीं था। मेरे GUI के पैनल की घड़ी चलती रही। नर्क, यहां तक कि संगीत भी बजता रहा। यह ऐसा था जैसे केवल मेरे माउस और मेरे कीबोर्ड ने काम करना बंद कर दिया हो। मैंने महसूस किया कि मेरे (USB) कीबोर्ड में कोई अधिक शक्ति नहीं है, यहां तक कि मेरे कैप्स लॉक एलईडी भी काम नहीं करेंगे।
तो, यहाँ क्या हुआ? निर्देशों की एक जोड़ी क्यों है जो मुझे लगता है कि सिस्टम को "केवल मेरे यूएसबी उपकरणों को बंद करना" लटका देना चाहिए? बाकी सब क्यों चलता रहता है? एक बोनस के रूप में: मुझे वास्तव में सिस्टम को फ्रीज करने के लिए क्या करना होगा?
CLIकेवल उस CPU पर लागू होता है, जिस पर वह चल रहा है, इसलिए यदि आपके पास एक से अधिक CPU हैं, तो आपको इसे प्रत्येक पर चलाना होगा।CLI+HLTसीपीयू पर भरोसा न करने वाली कोई भी चीज अपने तरीके से जारी रखने के लिए स्वतंत्र होगी