앞절에서 말한 디스패처 오브젝트 중에는 이벤트 , 뮤텍스, 세마포어 등이 있습니다 .
우선 이벤트 오브젝트 부터 알아 볼건데요 ㅎㅎ
이벤트 오브젝트는 여러 스레드들 사이에서 코드 실행의 동기화를 위해 사용되는데요
이게 무슨말이냐면요 예를 들어보겠습니다
스레는 A는 드라이버에서 사용할 데이터를 생성하고 그 데이터를 현재 사용하고 있습니다 .
스레드 B는 스레드 A가 사용중인 데이터를 사용하기 위해 데이터를 사용할수 있을때를
기달리는데요 스레드 A가 데이터의 사용을 끝났을때 이벤트 오브젝트를 사용하여 스레드 B에
데이터를 사용할수 있도록 알려준다고 하네요 ^^
이벤트 오브젝트는 통지 이벤트 오브젝트 와 동기화 이벤트 오브젝트가 있는데요
1. 통지 이벤트 오브젝트는 자동으로 Non-Signaled 상태로 다시 설정 되지 않는데요
Non - Signaled 로 초기화 해주기 위해서는 KeResetEvent() 함수를 호출 해야 합니다.
통지 이벤트 오브젝트는 하위 드라이버로부터 이벤트가 Signaled 되기를 기다릴때 사용합니다.
2. 동기화 이벤트 오브젝트는 자동으로 초기화를 해주는데요 이벤트 오브젝트가 Signaled 될때 이벤트
를 기다리고 있는 하나의 스레드만이 실행을 위해 스케줄링 된다고 하네요 ㅎㅎ
동기화 이벤트 오브젝트는 하드웨어 초기화 루틴에서 하드웨어 인터럽트가 Signaled 되기를 기다리고
있는 드라이버에서 자주 사용한다고 하네요 ^^
더 자세히 설명 드리자면 완료 루틴을 설정 한후 IRP에 대한 처리가 완료 되었을때 추가적인 작업을
수행하도록 완료 루틴에서 KeSetEvent() 함수를 호출하여 대기 상태에 있는 스레드에 나머지 작업을
처리 하도록 허락한다고 하네요 ^^
'Soft Ware > Windows Driver' 카테고리의 다른 글
디스패치 오브젝트 중 세마포어 오브젝트와 타이머 오브젝트에 대해서 !!! (0) | 2012.02.19 |
---|---|
디스패처 오브젝트 중 뮤텍스 오브젝트 (0) | 2012.02.19 |
디스패처 오브젝트 !! (0) | 2012.02.18 |
인스택 큐 스핀 록에 대해서 ~~!! (0) | 2012.02.17 |
익큐티브 스핀 록에 대해서 ~~~ (0) | 2012.02.17 |