जब मैं "क्ली" चलाता हूं तो वास्तव में क्या होता है; मेरे लिनक्स सिस्टम पर ”?


16

इसलिए मैंने हाल ही में पता लगाया कि 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) कीबोर्ड में कोई अधिक शक्ति नहीं है, यहां तक ​​कि मेरे कैप्स लॉक एलईडी भी काम नहीं करेंगे।

तो, यहाँ क्या हुआ? निर्देशों की एक जोड़ी क्यों है जो मुझे लगता है कि सिस्टम को "केवल मेरे यूएसबी उपकरणों को बंद करना" लटका देना चाहिए? बाकी सब क्यों चलता रहता है? एक बोनस के रूप में: मुझे वास्तव में सिस्टम को फ्रीज करने के लिए क्या करना होगा?


3
यह कैसी व्यवस्था है? CLIकेवल उस CPU पर लागू होता है, जिस पर वह चल रहा है, इसलिए यदि आपके पास एक से अधिक CPU हैं, तो आपको इसे प्रत्येक पर चलाना होगा। CLI+HLTसीपीयू पर भरोसा न करने वाली कोई भी चीज अपने तरीके से जारी रखने के लिए स्वतंत्र होगी
एरिक रेनॉफ

2
मैंने इसे अपने सामान्य डेस्कटॉप मशीन पर एक सीपीयू पर कई कोर के साथ चलाया। मुझे पता है कि प्रत्येक कोर एक "तार्किक" सीपीयू भी है; यह है कि आप क्या बात कर रहे हैं?
23

जवाबों:


2

सीपीयू को रोकने से प्रोसेसर पूरी तरह से बंद नहीं होता है। यह आमतौर पर ऑपरेटिंग सिस्टम द्वारा निष्पादित किया जाता है जब कोई और काम नहीं करना होता है। इसके बाद सीपीयू एक आईडीएलई स्थिति में प्रवेश करता है, जहां से यह किसी भी समय एक रुकावट से बाहर निकलने के लिए जा सकता है, लेकिन एसीपीआई द्वारा भी - तो आप इसे भी रोकने की कोशिश कर सकते हैं: अपने BIOS में या बूट तर्क के रूप में:

ACPI = बंद

USB उपकरणों के काम न करने का कारण विकलांग व्यवधानों के कारण था, हालांकि इस चर्चा के अनुसार USB डिज़ाइन द्वारा बाधित नहीं है।

संदर्भ के लिए: https://en.wikipedia.org/wiki/X86_instruction_listings

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.