2015/07/16 245

커널모드 시스템 디스패칭과 서비스 디스크립터 테이블

커널모드 시스템 디스패칭과 서비스 디스크립터 테이블 Windows Server 2008 [커널모드 시스템 디스패칭] 커널은 시스템 서비스 디스패치 테이블에서 시스템 서비스 정보를 찾기 위해 시스템 호출 번호를 사용한다. 이 테이블은 각 엔트리가 인터럽트 처리 루틴이 아닌 시스템 서비스에 대한 포인터를 갖고 있다는 점만 제외하면 인터럽트 디스패치 테이블과 유사하다. 시스템 서비스 디스패처인 KiSystemService는 스레드의 유저모드 스택에 있는 호출자의 인자를 스레드의 커널 스택에 복사하고 시스템 서비스를 실행 한다. 이전 모드는 커널이 트랩 핸들러를 실행할 때마다 스레드에 저장하는 값이며 발생할 예외나 트랩 시스템 호출에 대한 특권 레벨을 식별한다. 커널모드 코드는 시스템 호출이 가능하고 CPU는 ..

Windows , IIS 2015.07.16

32비트, 64비트 시스템 서비스 디스패칭

32비트, 64비트 시스템 서비스 디스패칭 Windows Server 2008 [32비트 시스템 서비스 디스패칭] 펜티엄2 이전의 x86 프로세서에서 윈도우는 트랩을 유발하는 int 0x2e(10진수 46)명령을 사용했다. 윈도우 IDT 엔트리 46을 시스템 서비스 디스패처를 가리키게 설정한다. X86 펜티엄2 프로세서나 상위 버전의 경우 윈도우는 sysenter 명령을 사용한다. 이 명령은 빠른 시스템 서비스 디스패처를 위해 인텔이 특별히 정의한 명령이다. 이 명령을 지원하기 위해 윈도우는 부팅 시점에 커널의 시스템 서비스 디스패처 루틴 주소를 이 명령과 연관된 머신 특정적인 레스터(MSR)에 저장한다. 이 명령을 실행하면 커널모드로 변경되어 시스템 서비스 디스패처가 실행 된다. 시스템 서비스 번호는 ..

Windows , IIS 2015.07.16

윈도우 오류 보고

윈도우 오류 보고 Windows Server 2008 윈도우 오류 보고 (Windows Error Reporting)는 유저모드 프로세스 크래시와 커널모드 시스템 크래시 모두를 자동으로 전송한다. 윈도우 오류 보고는 제어판에서 [문제 보고서 및 해결 방법 – 설정 변경]에서 또는 [시작-실행]에서 Wercon.exe 명령으로 구성 할 수 있다. Windows Error Reporting Service 서비스가 실행 중이어야 한다. 디폴트로 구성된 시스템에서는 오류 보고서(미니덤프와 프로세스 내에 로드된 DLL 버전 번호 같은 여러 세부 정보를 가진 XML 파일)가 마이크로소프트 온라인 크래시 분석 서버로 전송 된다. WER 서비스는 문제에 대한 해결책을 통지 받으면 사용자에게 문제 해결을 위해 취해야 할..

Windows , IIS 2015.07.16

처리되지 않은 예외

처리되지 않은 예외 Windows Server 2008 모든 윈도우 스레드는 처리되지 않은 예외를 처리하는 예외 핸들러를 가진다. 이 예외 핸들러는 윈도우 내부에 start-of-thread 함수로 선언되어 있다. Start-of-thread 함수는 사용자가 프로세스를 생성하거나 추가적인 스레드를 생성할 때 실행한다. 이 함수는 최초의 스레드 컨텍스트 구조체에 명시된 환경 제공 스레드 시작 루틴을 호출 한다. 스레드 시작 루틴은 CreateThread 호출 시에 명시된 사용자 제공 시작 루틴을 호출 한다. 스레드 0의 시작 주소가 시스템 내의 모든 윈도우 프로세스에서 동일한지에 대해서는 윈도우의 각 스레드가 시스템 제공 함수 내에서 실행을 시작한다는 것으로 알 수 있다. (사용자 제공 함수의 주소를 살펴..

Windows , IIS 2015.07.16

예외 디스패칭

예외 디스패칭 Windows Server 2008 아무 때나 발생 할 수 있는 인터럽트와는 대조적으로 예외는 실행 중인 프로그램의 직접적인 실행 결과(runtime error)로 발생하는 상황이다. 윈도우는 예외가 발생할 때 애플리케이션이 제어를 받을 수 있는 구조적 예외 처리(structured exception handling) 기능을 사용한다. 애플리케이션은 제어를 받으면 예외 상황을 수정하여 예외가 발생했던 위치로 되돌아 갈 수 있고 스택을 언와인드(unwind) 시키거나 예외를 처리 할 예외 핸들러를 찾을 수 있도록 제어를 시스템으로 되돌아가 가게 할 수 있다. x86과 x64 프로세서의 경우 모든 예외는 특정 예외에 대한 트랩 핸들러를 가리키는 IDT 내의 엔트리에 직접적으로 대응하는 이미 정..

Windows , IIS 2015.07.16

비동기 프로시저 호출 인터럽트

비동기 프로시저 호출 인터럽트 Windows Server 2008 비동기 프로시저 호출 (Asynchronous Procedure Calls, APC)은 유저 프로그램과 시스템 코드로 하여금 특정 유저 스레드 컨텍스트에서 실행할 수 있는 방법을 제공한다. APC는 특정 스레드의 컨텍스트에서 실행되게 큐잉되어 DPC/디스패치 레벨보다 낮은 레벨의 IRQL에서 실행 된다. APC는 APC 객체로 불리는 커널 제어 객체에 의해 기술 된다. 실행되기를 기다리는 APC는 커널에 의해 관리되는 APC큐에 보관된다. 시스템 전역적인 DPC 큐와는 달리 APC 큐는 스레드 전용이다. APC에는 커널모드와 유저모드의 두 종류가 있다. 커널모드 APC는 대상 스레드로부터의 승인을 필요로 하지 않는다. 반면에 유저모드 AP..

Windows , IIS 2015.07.16

소프트웨어 인터럽트

소프트웨어 인터럽트 Windows Server 2008 하드웨어에서 대부분의 인터럽트가 발생하지만 윈도우 커널 또한 다양한 작업들로 인해서 소프트웨어 인터럽트를 발생 시킨다. 스레드 디스패칭 시작 시간에 민감하지 않은 인터럽트 처리 타이머 만료 처리 특정 스레드 컨텍스트에서 프로시저의 비동기 실행 비동기 I/O 수행의 지원 [디스패치나 지연된 프로시저 호출 인터럽트] 스레드가 종료되었거나 자발적으로 대기 상태로 진입해 스레드가 더 이상 실행 할 수 없을 때 커널은 즉각적인 컨텍스트 스위치를 단행하기 위해 디스패처를 호출 한다. 하지만 커널이 이런 재스케줄링 작업을 수행하기에는 현재 실행 코드의 여건이 맞지 않는 경우가 종종 있다. 이런 상황의 경우 커널은 디스패칭을 요구하지만 실제 작업은 현재 동작이 완..

Windows , IIS 2015.07.16

소프트웨어 인터럽트 요청 레벨(IRQL)

소프트웨어 인터럽트 요청 레벨(IRQL) Windows Server 2008 인터럽트 컨트롤러는 인터럽트 우선순위 레벨로 동작하긴 하지만 윈도우 역시 인터럽트 요청 레벨(Interrupt Request Level)로 불리는 자신만의 인터럽트 순위 방식을 사용한다. 커널은 내부적으로 IRQL을 x86(0 ~31의 값), x64, IA64(0~15값)를 가지고 있다. 커널이 소프트웨어 인터럽트에 대한 표준 IRQL 값을 정의하더라도 HAL은 하드웨어 인터럽트 값을 IRQL에 매핑한다. 인터럽트는 우선순위에 따라 서비스 된다. 좀더 높은 우선순위의 인터럽트가 서비스 중인 낮은 우선순위의 인터럽트를 선점한다. 높은 우선순위의 인터럽트가 발생할 때 프로세서는 인터럽트된 스레드의 상태를 저장하고 발생된 인터럽트와 ..

Windows , IIS 2015.07.16

x86 x64 IA64 인터럽트 컨트롤러

x86 x64 IA64 인터럽트 컨트롤러 Windows Server 2008 [x86 인터럽트 컨트롤러] 대부분의 x86 시스템은 i8259A Pic(Programmable Interrupt Controller)나 i82489 APIC(Advanced Programmable Interrupt Controller)의 변형 중 하나를 사용한다. 인텔과 그 밖의 여러 회사는 APIC를 주로 사용하는 x86 멀티프로세서 시스템을 위한 설계 표준인 멀티프로세서 규약을 정의 했다. 유니프로세서 운영체제와의 호환성과, 유니프로세서 모드에서 멀티프로세서 시스템을 시작하는 부트 코드와의 호환성을 지원하기 위해 APIC는 PIC 호환성 모드를 지원한다. PIC 호환성 모드는 15개의 인터럽트를 가지며 주 프로세서에만 인터..

Windows , IIS 2015.07.16

트랩 디스패칭과 인터럽트 디스패칭 그리고 하드웨어 인터럽트 처리

트랩 디스패칭과 인터럽트 디스패칭 그리고 하드웨어 인터럽트 처리 Windows Server 2008 [트랩 디스패칭] 인터럽트와 예외는 프로세서가 정상적인 제어 흐름을 벗어난 코드를 실행하게끔 하는 운영체제의 상태이다. 트랩이라는 용어는 예외나 인터럽트가 발생할 때 현재 실행 스레드를 캡처해 운영체제 내의 정해진 위치로 제어를 이행하는 프로세서 메커니즘을 말한다. 윈도우에서 프로세서는 특정 인터럽트나 예외를 처리하는 함수인 트랩 핸들러로 제어를 이행 한다. 커널에서 인터럽트는 프로세서가 실행중인 것과는 무관한 비동기 이벤트(어느 때나 발생 할 수 있는 것)이다. 주로 I/O 디바이스나 프로세서 클록이나 타이머에 의해 인터럽트가 발생되며 인터럽트는 활성화 되거나 비활성화 될 수 있다. 예외는 특정 명령의 ..

Windows , IIS 2015.07.16