HLT(x86 명령)

HLT (x86 instruction)

x86 컴퓨터 아키텍처에서 (halt)는 다음 외부 인터럽트가 발사될 때까지 중앙 처리 장치(CPU)를 정지시키는 조립 언어 명령이다.[1]인터럽트는 하드웨어 장치가 CPU에 보내는 신호로 CPU가 반응해야 하는 이벤트가 발생했음을 알려준다.예를 들어 하드웨어 타이머는 CPU에 인터럽트를 정기적으로 보낸다.

대부분의 운영 체제에서는HLT프로세서를 유휴 상태로 전환하여 즉각적인 작업이 없을 때 지시예를 들어 Windows NT에서 이 지침은 "시스템 유휴 프로세스"에서 실행된다.x86 프로세서에서 opcode는HLT이다0xF4.

x86의 역사

8086 이후의 모든 x86 프로세서는HLT지침. 그러나 6.0 이전까지는[2] MS-DOS에 의해 사용되지 않았으며, 1994년 Intel DX4 프로세서가 출시되기 전까지 전력 소비를 줄이기 위해 특별히 설계되지 않았다.MS-DOS 6.0은 POWER를 제공했다.CONFIG에 설치할 수 있는 EXE.SYS와 마이크로소프트의 테스트에서 그것은 5%[3]를 절약했다.처음 100MHz DX 칩 중 일부는 버기 HLT 상태를 갖고 있어 리눅스 개발자들이 해당 칩에서 실행할 때 사용할 수 있는 "no-hlt" 옵션을 구현했지만 이는 이후 칩에 고정되었다.[4]

인텔은 이후 추가 프로세서 제공 지침을 도입했다.여기에는 다음이 포함된다.

  • PAUSE회전 루프를 위한 SSE2에서.사용자 공간에 사용 가능(저특권 링).
  • MONITOR/MWAIT스레드 동기화를 위해 SSE3에서.
  • TPAUSE(잠시 정지) 및UMONITOR/UMWAIT(userspace monitor/mawait).사용자 공간에 사용 가능.

과정

거의 모든 현대 프로세서 명령 집합에는 더 많은 작업을 수행해야 할 때까지 프로세서를 정지시키는 지침 또는 절전 모드가 포함되어 있다.인터럽트 구동 프로세서에서 이 명령은 외부 인터럽트가 수신될 때까지 CPU를 정지시킨다.대부분의 아키텍처에서, 그러한 명령을 실행하면 프로세서가 전력 사용량과 열 출력을 현저하게 줄일 수 있으며, 이것이 바로 그것이 수면과 공회전 대기 대신 일반적으로 사용되는 이유다.대부분의 프로세서에서는 (루핑 대신) 중지를 수행하면 다음 인터럽트의 대기 시간도 감소한다.

운영 체제에서 사용

발행후HLT명령에는 링 0 액세스가 필요하며, 커널과 같은 권한 있는 시스템 소프트웨어에 의해서만 실행될 수 있다.이 때문에 Linux의 경우와 같이 더 이상 작업을 할 수 없을 때 운영체제가 그 목적으로 제공하는 API(응용프로그램 인터페이스)를 사용하는 것이 애플리케이션 프로그래밍의 모범사례인 경우가 많다.sched_yield().[5] 이를 프로세서의 "수익"이라고 한다.이를 통해 운영 체제의 스케줄러는 다른 프로세스가 실행 가능한지 여부를 결정할 수 있다.모든 프로세스가 절전 모드 또는 대기 중인 경우, 다음 하드웨어 인터럽트 때까지 전력 사용량을 줄이도록 HLT 명령을 실행한다.

참고 항목

참조

  1. ^ "Intel 64 and IA-32 Architectures Software Developer's Manual: Instruction Set Reference A-Z". Retrieved 2012-03-01.
  2. ^ "Why does DOS use 100% CPU under Virtual PC?". microsoft.com. Retrieved 18 November 2018.
  3. ^ "POWER.EXE and Advanced Power Management (APM) Support". Archived from the original on 2014-09-27. Retrieved 2015-09-27.
  4. ^ "The Linux BootPrompt-HowTo". www.faqs.org. Retrieved 18 November 2018.
  5. ^ "sched_yield(2) - Linux manual page". Retrieved 2020-09-02.