APC(Asynchronous procedure call) 인터럽트
저번 시간에 IRQL에 대해 학습해 보았다.
IRQL의 분포에 대해 보면 하드웨어 소프트웨어 그리고 passive 모드로 크게 구분할 수 있다.
복습겸 해서 3가지 모드에 대해 알아보겠다.
하드웨어 : 일반적인 하드웨어 요청에 의한 인터럽트이다(마우스. 키보드 등이 대표적 경우)
소프트웨어 : APC DPC로 구성되어 있음
Passive : 일반적인 프로그램 수행
그중 APC는 소프트웨어에 존재한다.
그럼 해당 인터럽트가 어떤 내용인지 알아보도록 하겠다.
Internal 책의 내용을 빌려 설명하면
APC는 스레드가 같은 하나의 수행할 job에 대한 대기열로 볼 수 있고,
커널이 이 APC 루틴을 수행한다.
즉, 스레드의 실행은 APC의 실행으로 보면 된다.
APC들은 APC 개체라고부르는 커널 제어 개체를 통해 설명되는데,
실행을 기다리는 APC들은 커널이 관리하는 APC 대기열에 상주한다.
먼저 실행부 (Process 나 메모리 스레드 I/O 보안 등을 관리 ntoskernl.exe)는
커널 모드 APC들을 사용하여 운영체제 작업이 특정 스레드의 컨텍스트에 있는
주소 공간 내에서 완료 되도록 수행된다. 즉 인터럽트를 일으킬 수 있는 시스템
서비스의 실행 정지 및 스레드간 메모리상에서 비동기 I/O지원 등을 제공한다.
장치드라이버들은 I/O 작업을 위해서 사용한다.
사용자 모드 APC는 패시브 모드에서 실행된다.
즉 일반 프로그램이 실행되다가 긴급하게 커널 프로그램이 구동해야하는 경우에
잠시 일반 프로그램을 process wait단계에 두고 커널 프로그램을 구동하게 한다.
커널 프로그램은 갯수에 따라 APC 대기열에 상주하며 그 안에서의 우선순위를 가지고
처리를 기다리며 해당 처리가 완료되어 지면 다시 기존 프로그램이 수행되게 된다.
스레드의 수행공간은 커널과 사용자로 나뉘어지기 때문에
사용자보다는 커널의 우선순위를 높일수 밖에 없다.(리부팅 되지 않기 위해서는)
이런 경우 APC Interrupt를 사용하여 긴급한 커널 프로세스 부터 처리되어진다.