인터럽트 플래그

Interrupt flag

인터럽트 플래그(IF)는 CPUFlags 레지스터에 있는 플래그 비트로, CPU(CPU)가 마스크 가능한 하드웨어 인터럽트에 즉시 응답할 것인지 여부를 결정한다.[1]플래그가 다음으로 설정된 경우1마스크 가능한 인터럽트가 활성화됨.재설정할 경우(로 설정)0) 그러한 인터럽트는 인터럽트가 활성화될 때까지 비활성화된다.인터럽트 플래그INT 명령으로 생성된 NMI(Non-maskable Interrupt) 또는 소프트웨어 인터럽트의 처리에 영향을 주지 않는다.

설정 및 지우기

x86 아키텍처를 사용하는 시스템에서 CLI(Clear Interrupt) 및 STI(Set Interrupt) 지침이 제공된다.POPF(POP Flags)는 스택에서 단어를 FLAGES 레지스터로 제거하여 스택 상단의 Flags 레지스터에 있는 비트에 기반하여 Interrupt 플래그가 설정되거나 지워질 수 있다.[1]

권한 수준

권한 있는 모드를 지원하는 시스템에서는 권한 있는 애플리케이션(일반적으로 OS 커널)만 인터럽트 플래그를 수정할 수 있다.x86 시스템에서 이것은 보호 모드 코드에만 적용된다(실제 모드 코드는 항상 인터럽트 플래그를 수정할 수 있다).CLI 및 STI는 권한 없는 응용 프로그램이 실행을 시도하면 일반 보호 장애를 일으키는 권한 있는 명령이다.응용 프로그램이 권한 없는 경우 POPF 명령은 인터럽트 플래그를 수정하지 않는다.

이전 DOS 프로그램

보호 모드 DOS 익스텐더를 사용하고 자체 인터럽트 핸들러(일반적으로 게임)를 설치하는 일부 오래된 DOS 프로그램은 핸들러에서 CLI 명령을 사용하여 인터럽트를 비활성화하고 POPF(해당 PUSHF 이후) 또는 IRET(그 효과의 일부로 스택에서 플래그를 복원)하여 복원한다.이는 프로그램이 실제 모드에서 시작된 경우 작동하지만, 이러한 프로그램이 현대적 운영 체제(Windows NT 이상에 따른 NTVDM 등)의 DPMI 기반 컨테이너에서 실행될 때 문제를 일으킨다.CLI는 권한이 있는 명령이므로 프로그램이 CLI를 사용하려고 할 때 운영 체제에 장애를 트리거한다.그런 다음 OS는 프로그램이 STI를 실행할 때까지(또 다른 고장을 일으킬 수 있음) 프로그램에 인터럽트 전달을 중지한다.그러나 POPF 명령은 특권이 없으며 IF 복원을 위해 묵묵히 실패한다.그 결과 OS는 프로그램에 인터럽트 전달을 중지하고 중단된다.보호 모드 익스텐더를 사용하지 않는 DOS 프로그램은 POPF가 고장을 트리거하는 V86 모드에서 실행되므로 이 문제가 발생하지 않는다.

이 문제에 대한 만족할 만한 해결책은 거의 없다.일반적으로 소스코드는 사용할 수 없고, STI는 조립 수준에서 대량 편집하지 않으면 도입할 수 있는 공간이 없기 때문에 프로그램을 수정할 수 없다.프로그램에서 CLI를 제거하거나 V86 호스트가 CLI를 완전히 무시하도록 하면 게스트의 인터럽트 핸들러가 재입력 안전하지 않은 경우 다른 버그가 발생할 수 있음(현대 프로세서에서 실행될 경우 일반적으로 인터럽트의 중복을 방지할 수 있을 정도로 빠르게 실행됨)

인터럽트 사용 안 함

x86 명령 집합에서 CLI는 일반적으로 단일 프로세서 시스템에서 동기화 메커니즘으로 사용된다.예를 들어, 커널 코드(일반적으로 드라이버)가 인터럽트 핸들러 내의 경합 조건을 피할 수 있도록 CLI는 운영 체제에서 인터럽트를 비활성화하기 위해 사용된다.이것은 여러 개의 관련 테이블을 중단 없이 수정할 때 필요하다.

인터럽트 사용

x86 명령 집합의 STI는 IF를 설정하여 인터럽트를 가능하게 한다.

인터럽트를 가능하게 하는 지침의 일부 구현에서 인터럽트는 다음 지침이 끝날 때까지 활성화되지 않는다.이 경우 인터럽트를 즉시 활성화한 후 인터럽트를 비활성화하면 인터럽트가 인식되지 않는다.

다중 프로세서 고려 사항

인터럽트 플래그는 단일 프로세서에만 영향을 미친다.멀티프로세서 시스템에서 인터럽트 핸들러는 잠금과 같은 다른 동기화 메커니즘을 사용해야 한다.

참고 항목

참조

  1. ^ a b "Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual" (PDF). Retrieved 2007-07-13.

외부 링크