안녕하세요~ 이우영 입니다.


오늘 부터는 대기 큐를 이용해서 디바이스 드라이버가 동작하는중 


잠들거나 깨우는 법을 알아 보도록 하겠습니다.


1. 블록킹 I/O




지금 까지 우리가 작성한 디바이스 드라이버가 응용프로그램의 요청을 수행 한다고 했을 때 


이 수행 시간이 길어지거나 대기 시간이 길어 진다면 어떤 현상이 발생할까요?


응용프로그램은 하드웨어의 응답이 올때까지 대기하게 됩니다.


그러면 이 응용프로그램이 동작하거나 스케줄링 시간을 모두 소모 할 때까지


다른 응용 프로그램등은 동작을 할 수 없습니다.


그럼 이걸 해결 하기 위한 방법은 없을까요?


있습니다. 바로 블록킹 I/O를 사용하는 것입니다.


블로킹 I/O는 하드웨어의 응답 시간이 길어지는 경우 응용프로그램을 잠들게 하여 


기다리는 시간 동안 다른 응용 프로그램이 수행 할 수 있도록 하는 방법입니다.


그럼 잠들어 있는 응요프로그램은 어떻게 깨워지는 걸까요?


하드웨어의 처리가 모두 끝나는 경우 인터럽트가 발생하여 잠들어 있는 응용 프로그램을 깨워 주도록 되어 있습니다.


2. 동작 방식



다음과 같이 기존의 방식은 응용 프로그램이 하드웨어의 응답이 끝날 때 까지 cpu를 점유 하고 있습니다.


하드웨어 대기 시간이 길어 질 수록 다른 응용프로그램을 동작 시킬 수 있는 시간이 줄어 들게 됩니다.

(매우 비효율 적이죠?)


01.PNG


하지만 블로킹 I/O를 사용 하면 다음과 같이 손실 되는 시간이 줄어들게 됩니다.


02.PNG


아까와 다르게 처리하는 시간이 많이 늘었죠?


이런 식으로 동작하도록 디바이스 드라이버를 만들어 주면 컴퓨터 동작이 매유 효율적으로 변하게 됩니다.


그럼 다음시간에는 리눅스에서 블록킹 I/O를 구현 하는지 알아 보도록 하겠습니다.


그럼 다음시간에 만나요~~


빠른만남을 원하시면 http://ms-osek.org/ 여기로 찾아오세요~