LISTORY

[윈도우즈 시스템 프로그래밍] 알림가능한 상태, APC 본문

IT/윈도우 프로그래밍

[윈도우즈 시스템 프로그래밍] 알림가능한 상태, APC

LiStoryTeller 2018. 11. 18. 17:45


뇌를 자극하는 윈도우즈 시스템 프로그래밍 책 관련 유투브 강의 정리이다.


이번 시간에 정리할 내용은 알림 가능한 상태(Alertable State), APC(Asynchronous Procedure Call) 이다.


YouTube 주소 : 알림 가능한 상태(Alertable State), APC(Asynchronous Procedure Call)



알림 가능한 상태(Alertable State), APC(Asynchronous Procedure Call)


알림 가능한 상태(Alertable State)



A가 I/O 요청했다. 이 I/O가 연산이 끝나면 CompletionRoutine 함수를 호출한다.


즉, A I/O 작업이 끝나면 자동적으로 CompletionRoutine 함수 시작될 것이기 때문에 A는 작업을 계속해야 한다.


근데 I/O 작업이 언제 끝날지는 모른다.


I/O 연산 끝나면 CompletionRoutine 을 하러 가야하는데, 프로그래머 입장에서 보면 일을 하다가 CompletionRoutine 에게 우선순위를 뺏기는 셈이다.


이 일의 우선순위를 A에게 줄지, CompletionRoutine에게 줄지 결정할 수 있어야 한다.


이게 가능해야 안정적으로 SW를 디자인할 수 있다.


만일, I/O 작업이 끝나 CompletionRoutine을 해야할 때, 지금 하고 있는 일에 상관 없이 CompletionRoutine에 우선순위를 주어


CompletionRoutine을 시작하도록 하고 싶다.


이 상태를 알람이 가능한 상태, Alertable State라 한다.


그러면 이를 명시적으로 선언해야 하는데, 이게 그림의 밑에 세가지 함수이다.


이 함수들을 호출하면, I/O 작업이 끝났을 때 CompletionRoutine이 시작하게 할 수 있다.



APC(Asynchronous Procedure Call)



APC Queue라는 것이 있다.  이는 각각의 쓰레드에 독립적이다.


쓰레드가 알람 가능한 상태가 되었을 때, 호출할 콜백 함수들을 모아둔 queue이다.


즉, Alertable State가 되었을 때 호출할 콜백 함수들을 모아둔 queue이다.


그러면 큐에 있는 것은 대상이 Function&Param에 들어가있는 정보를 참조하여 해당 함수를 호출하게 되는데


언제 호출하게 되냐면 쓰레드가 Alertable State가 되었을 때 함수들이 다 호출이 된다.


총 세개의 함수가 등록되어 있다 해서 쓰레드가 Alertable State로 세번 들어가야 하는 건 아니다 .


무조건 한번 들어가면 queue는 전부 지워진다.


WirteFileEx() 함수의 경우에도 I/O가 완료되었을 때 단순하게 APC 큐에 콜백함수 정보를 입력시킨다.






Comments