Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
  3장 - 1 (interrupt) 세미나 후기 
작성일시 : 2007. 11. 15. 09:17 | 분류 : Windows Server/Kernel

사전 지식이 없었던 만큼 정말 어려웠던 내용이 였습니다.
고생 많으셨습니다.
별로 아는 것도 없으면서 수업을 진행하니 어려움이 많네요...^^

4회 Windows internals 세미나

[수업 내용]

http://maystyle.tistory.com/entry/지루한-인터럽트-한방에-알아보자

[진행]
민성

[참석]
준상, 동조, 민우형님, 준규선배, 조현정 과장님

[진도] 
p140 ~ p170

[교제 내용]
전체적으로 살펴 본다면 이렇게 정리 될 수 있습니다.

Windows 는 IRQL 이라는 자체적인 우선 순위를 통해 인터럽트 혹은 여러가지 발생 가능한 요청 사항을 수행하게 됩니다.

이때 상위 레벨의 IRQL을 갖는 인터럽트가 수행된다면, 하위 레벨의 Thread는 컨텍스트 스위칭이 되면서 하위의 모든 IRQL 레벨은 마스킹 되게 됩니다.

그렇다면 프로그램들이 수행 될때 어떻게 IRQL을 이용하는지 설명하겠습니다.
만약 IRQL이 없고 그냥 평등하게 Thread가 수행되게 된다 라고 가정하게 되고 Memory Access 나 Hard Disk Access가 필요하게 되면 어떻게 될까요?

당연히 Access를 통해 Data를 로드하는 시점에서 해당 Thread는 멈춰야 합니다. 이를 보장하기 위해 보통 사용자 Thread가 수행되는 Passive 레벨 윗단에 APC라는 Memory를 Access 하기 위한 인터럽트를 두고 해당 인터럽트 발생시 유저 Thread는 실행을 멈추고, APC 단의 Thread 수행을 기다리게 됩니다. 이를 통해 한 Thread가 커널단... 즉 실제 memory 나 paging memory에 접근하는 로직을 수행할 수 있습니다.

그리고 윗단 DPC 이상은 예를 들면 IO 및 인터럽트가 발생하는 레벨인데, 이전에 설명했듯이 특정 IO가 발생할 경우 HAL은 해당 IO의 IRQL을 결정해 주고,  해당 IRQL에 맞춰 CPU는 인터럽트를 처리합니다. 그렇다면 DPC/Dispatch 는 뭘까요?

책에서 보듯이 해당 레벨은 소프트웨어적으로 발생하는 인터럽트입니다.
제가 설명드렸다 시피 IDT 테이블에는 연관되 일어나는 여러 인터럽트들이 정의 되어 있을 수 있습니다. 이때 한 인터럽트가 완전히 수행 될때 까지 다음 인터럽트가 기다린다거나, 조금 늦게 수행 되도 되는 인터럽트가 존제 한다거나, 기타 Thread의 수행 시간이 너무 길어질 경우 CPU의 점유 현상이 나타나고 이를 방지 하기 위해 일단 늦게 수행되도 괜찮은 경우 DPC 큐에 넣어 수행을 지연시킵니다. 그리고 윗단의 인터럽트가 종료 되면 DPC레벨에서 해당 인터럽트를 꺼내 수행하게 됩니다.

|