본문 바로가기

카테고리 없음

Windows Internal 3장 - System Mechanism

[3장의 주요내용]

   ● 실행부, 커널, 장치 드라이버와 같은 커널 모드 구성요소가 사용하는 메카니즘

[Trap Dispatching]

   ● 인터럽트(Interrupt), 예외 (Exception)은 정상적인 제어 흐름에서 벗어나

      다른 코드로 전환하게 되는 운영체제의 특수한 경우이다.

   - Trap은 인터럽트나 예외가 발생하였을 때 실행 Thread를 잡아서 운영체제의

     정해진 위치에 제어를 전달하는 메카니즘을 말하는 것으로 여기서 제어를 전달하여

     처리하는 함수를 Trap Handler라고 한다.


image

위에 명시된 그림은 Trap Handler를 활성화 하는 조건을 나타낸 것이다.

커널은 Interrupt와 Exception을 구별할 수 있는 구별 방법은 비동기 이벤트이냐,

동기식 이벤트이냐를 판별해서 구분한다. 즉 Interrupt는 I/O장치, 프로세스 클럭,

타이머 등에 대해 어느때나 발생하지만 Exception은 특정한 명령의 실행으로 발생하는

운영체제의 특수한 경우이다.

만약 장치 인터럽트가 발생하였다면 Kernel Trap Handler는 ISR에 제어를 전달한다.

ISR은 장치 드라이버가 인터럽트를 일으키는 장치를 위해 제공하는

Service Routine이다.


   ● Interrupt Dispatching

1. H/W Interrupt Processing

   - H/W Platform I/O Interrupt → Interrupt Controller → Processor 통지 →

     IRQ획득 → Interrupt Controller에서 IRQ를 Interrupt Num으로 변환 →

     IDT

     에 인덱스를 사용하여 Interrupt Dispatch Routine에 전달

2. x86 Interrupt Controller

   - 종류 : i8259A PIC(유니프로세서 시스템에서 동작),

                i82489 APIC(멀티프로세서 시스템에서 동작, 256개 Interrupt지원)

3. IRQL (Software Interrupt Request Levels)

image

  - Interrupt는 IRQL의 우선순위 순서에 따라 서비스 되며, 더 높은

    우선순위  Interrupt가 낮은 우선순위 Interrupt의 서비스를 선점한다.

    IRQL은 각 프로세서별로 설정하는데 이는 프로세서가 어떤 인터럽트를

    받을 수 있는지 결정하며 커널 모드 데이터 구조에 대한 액세스를 동기화

    를 위해 사용된다. 커널은 프로세스처리를 위하여 IRQL의 순위를 조절하

    는데 이때 PIC를 엑세스하여 처리할 경우 Data 처리 속도가 지연되기 때

    문에 지연 IRQL이라는 성능 최적화 방법을 구현하여 프로세서의

    인터럽트를 처리한다.

  - Interrupt를 IRQL에 Mapping

     Windows는 하드웨어에서 IRQL들의 개념을 구현하지 않는다. 그러한

    이유로 HAL에서 버스 드라이버(PCI, USB)는 자신들의 존재가 어떠한

    인터럽트 장치에 할당될 수 있을까를 결정하는데 이러한 역활을 하는

    플러그 앤 플레이 관리자는 인터럽트 할당을 고려한 후

    HalpGetSystemInterruptVector를 호출하여 매핑 한다.

  - Predefined IRQLs

     ▶ High : KeBugCheckEx로 인한 System Halting이 있을경우나 모든 인터

                  럽트들이 Masking할때

     ▶ Power Fail : Power Fail이 있을 경우 사용되지만 IRQL은 사용되지 않음

     ▶ Inter-processor Interrupt

        다른 프로세서가 특정 Thread를 실행하고자 할때 DISPATCH_LEVEL

        인터럽트가 요청될경우, 프로세서의 TLB가 Update 될경우,

        System Crash나 Shutdown이 요청될경우

     ▶ Clock  : Kernel의 날짜 유지 및 Thread에 대한 CPU 시간 측정 및 할당

     ▶ Dispatch : S/W에서 사용할 수 있는 가장 상위값

     ▶ APC : 드라이버는 사용 불가, I/O Manager가 사용

- Interrupt Objects (Kernel Control Object)

   커널에서 Interrupt 요청이 있을 경우 장치 드라이버를 ISR에 등록할 때 사용

   Interrupt Object는 ISR주소와, 장치 인터럽트의 IRQL을 포함한다.

   Interrupt에 대한 자세한 내용을 알려고 노력했지만... 도통 무슨말인지

   쉽게 이해가지 않아 아래 그림을 첨부하였다. 아래그림에서 알수 있는것은

   어떤 처리를 위한 구조체 정도로 생각해야 되는것은 아닌지....^^

   이후에 나오는 DPC, APC Object모두 프로세스간의 동기화를 위해 사용된다

   는 것만 명심하자!!!

   image

  4. Software Interrupts

       - DPC Interrupts (Dispatch or Deferred Procedure Call)

image

    높은 Interrupt Level에서 낮은 Interrupt Level로 지연처리될 때 사용

      ▶ Driver queues request

      ▶ CPU당 queue가 존재할 경우