"cli"를 실행하면 실제로 어떻게됩니까? 내 리눅스 시스템에서 멈추지?


16

그래서 최근 HLTCPU를 정지시키는 opcode 가 있음을 알았습니다 . 멋지다, 어떻게되는지 보자!

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다음 인터럽트까지 CPU를 정지시킵니다. 멋지므로 인터럽트 비활성화를 시도해 봅시다. 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) 키보드에 더 이상 전원이 공급되지 않으며 캡 잠금 LED도 작동하지 않는다는 것을 깨달았습니다.

그래서 여기서 무슨 일이 있었습니까? 시스템에 "전화 끊기"라고 생각되는 한 쌍의 지침이 왜 내 USB 장치 만 종료해야합니까? 왜 다른 모든 것들이 계속 작동합니까? 보너스 : 실제로 시스템을 정지 시키려면 어떻게해야합니까?


3
이것은 어떤 시스템입니까? CLICPU가 실행중인 CPU에만 적용되므로 여러 개의 CPU가있는 경우 각 CPU에서 실행해야합니다. 온 의존하지 아무것도 CLI+HLTCPU는 메리의 길에 계속 무료 것
에릭 Renouf

2
여러 코어가있는 하나의 CPU에서 실행되는 일반 데스크탑 컴퓨터에서 테스트했습니다. 각 코어도 하나의 "논리적"CPU라는 것을 알고 있습니다. 그게 당신이 말하는 것입니까?
secretpow

답변:


2

CPU를 정지해도 프로세서가 완전히 정지되지는 않습니다. 더 이상 수행 할 작업이없는 경우 운영 체제에서 실행됩니다. 그런 다음 CPU는 IDLE 상태가되어 인터럽트 나 ACPI에 의해 언제라도 대기 상태로 전환 될 수 있습니다. 따라서 BIOS에서 또는 부트 인수로 중지하려고 할 수도 있습니다.

acpi = 해제

USB 장치가 더 이상 작동하지 않는 이유는 이 논의 에 따르면 USB가 의도적으로 인터럽트 구동되지는 않지만 비활성화 된 인터럽트 때문 입니다.

참조 : https://en.wikipedia.org/wiki/X86_instruction_listings

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.