문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 인터럽트 (문단 편집) === 인터럽트 요구 레벨 === [[Windows]]에서 사용하는 인터럽트 과정으로 위의 인터럽트 우선 순위와 유사하다. 줄여서 IRQL('''I'''nterrupt '''R'''e'''q'''uest '''L'''evel)라고 한다. IRQL는 CPU 아키텍처마다 값이 다른데, x86의 경우 0~31이며 AMD64(x64)와 AI-64의 경우 0~15이다. IRQL의 구성은 다음과 같다. 주로 많이 사용하는 IRQL만 가져왔다. ||<-5> 윈도우 인터럽트 요구 레벨 || ||<|2> 이름 ||<-3> 값 ||<|2> 설명 || || x86 || AMD64 || IA-64 || || PASSIVE_LEVEL || 0 || 0 || 0 || 대부분의 커널 및 유저 스레드가 동작하는 수준 || || APC_LEVEL || 1 || 1 || 1 || APC(Asynchronous Procedure Calls, 비동기 프로시저 호출) 및 페이지 폴트(Page Fault) || || DISPATCH_LEVEL || 2 || 2 || 2 || 스레드 스케줄링(Thread Scheduling) 및 DPC(Deferred Procedure Call, 지연된 프로시저 호출) || || DIRQL || 3-26 || 3-11 || 4-11 || 장치 인터럽트 || || POWER_LEVEL || 30 || 15 || 14 || 전원 이상 || || HIGH_LEVEL || 31 || 15 || 15 || 최고 수준 || PASSIVE_LEVEL - 대부분의 프로세스가 동작하는 수준으로 IRQL에서 가장 낮다. APC_LEVEL - 커널에서 비동기 프로시저 호출을 처리할 때 사용한다. DISPATCH_LEVEL - 스케줄링 및 DPC를 위해 사용하는 수준으로 여기서부터 프로세서는 스레드를 전환하지 않는다. 즉 컨텍스트 스위칭 (문맥교환)이 일어나지 않는다. 여기서 주의해야할 점은 페이징된 메모리에 접근하거나 파일 입출력을 수행하면 안된다. 즉 페이지 폴트를 일으키면 안되는데 전환이 일어나지 않기에 페이지 폴트 핸들러가 실행할 수 없기 때문이다. 또한 대기 함수(KeWaitForSingleObject, KeDelayExecutionThread 등)를 사용할 수 없다. DIRQL - 장치(키보드, 마우스 등)으로부터 발생하는 인터럽트를 처리하기 위해 사용하는 수준이다. 예를 들어 장치 드라이버의 인터럽트 서비스 루틴(ISR)이 DIRQL 수준에서 실행된다. 이 수준에서 매우 제한적인 커널 함수만 사용할 수 있다. 커널 함수마다 어느 IRQL에서 동작해야 하는지 다르다. 대부분 APC_LEVEL 이하지만 간혹 PASSIVE_LEVEL에서만 실행할 수 있거나 DISPATCH_LEVEL 또는 그 이상에서만 호출할 수 있는 커널 함수가 있다. 이러한 부분들은 마이크로소프트 문서에 나와있다. 이 IRQL를 변경할 수 있는 커널 함수는 KeRaiseIrql와 KeLowerIrql이다. 물론 [[드라이버(컴퓨터)|드라이버]]에서만 사용할 수 있다. KeRaiseIrql는 IRQL를 높일 때 사용하고 KeLowerIrql는 IRQL를 낮출 때 사용한다. 여기서 KeRaiseIrql를 사용할 때 현재의 IRQL보다 낮게 설정하면 안된다는 것이다. 그럴 경우 [[블루스크린]]이 발생한다. 실제로 KeRaiseIrql 내부에서 변경하려는 IRQL 레벨이 현재의 IRQL 레벨보다 낮을 경우 블루스크린을 발생시킨다. 따라서 IRQL를 낮출려면 KeLowerIrql를 사용해야 한다. KeLowerIrql도 변경하려는 IRQL이 현재의 IRQL보다 높을 경우 KeRaiseIrql와 마찬가지로 블루스크린이 발생한다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기