Linux kernel v4.4에서 간단한 블록 장치 드라이버 만들어보기

09. 드라이버의 자원을 기다리게하는 wait-queue

C로 어느정도 실무를 하다보면 블럭 장치나 네트워크 장치를 읽고 쓰는 프로세스는 언제든지 잠들 수 있다는걸 알게됩니다. 그래서 조금만 복잡한 소프트웨어가되도 쓰레드를 나눠서 동기 IO로할지, 같은 쓰레드내에서 비동기 IO로 할지 결정해야합니다. 블럭 장치의 경우는 epoll등을 이용해서 비동기 IO로 처리하는 경우가 많은것 같습니다. 네트워크 통신의 경우는 동접이 많아질 경우 비동기 IO라고해도 잠들어있는 쓰레드 갯수가 많아질 수 있으므로 자원낭비가 됩니다. 그래서 아예 연결을 끊어버리고 동기 IO로 구현하는 방법도 있습니다.

어쨌든 블럭 장치는 IO 요청이 많아지고, request-queue가 처리할 수 있는 한도 이상으로 IO 요청이 많아지면 wait-queue라는걸 이용해서 프로세스를 잠들게만듭니다. 어디에서 어떻게 프로세스가 잠들지를 판단하고 어떻게 프로세스를 잠들게하는지, 또 언제 어떻게 깨어날 수 있는지를 알아보겠습니다.

제 글들이 다 그렇듯이 그다지 깊게 들어가지않고 전체적인 디자인만 보겠습니다. 더 자세하고 정확한 내용은 다른 참고자료들을 활용하시기 바랍니다.

참고자료

  • http://www.makelinux.net/ldd3/chp-6-sect-2
  •  

댓글

댓글 본문
작성자
비밀번호
버전 관리
gurugio
현재 버전
선택 버전
graphittie 자세히 보기