본문 바로가기

Programming/Linux_Kernel

wait queue

오늘은 wait queue 에 대해서 짚어보려고 합니다.
별 생각 없이 사용하곤 했지만, 정확히 개념을 알고 있는것이 중요하다고 생각되네요.

- wait queue 의 개념.

간단하게 말해서 wait queue 는 프로세스들을 관리하는 집단이라고 생각하면 된다.
프로세스는 어떤 사건이 일어나기를 기다릴 때 그에 맞는 wait queue 에 삽입된다. 그후에 제어권을 다른 프로세스에 넘긴다. 그리고 wait queue 에 들어가 있던 process 는 그에 맞는 조건이 되면 깨어나고 wait queue 에서 제거된다.

예를 들어 A라는 리소스를 원하는 프로세스 들이 있다고 하자
A 가 매우 비싼(?) 자원이라서 여러 프로세스들이 대기를 하고 있다면 우리는 A의 사용이 끝나는 동시에
기다리고 있는 프로세스들을 처리해 주어야 효율적으로 시스템을 동작 시킬 수 있을것이다.
하지만 A의 획득을 기다리는 프로세스 리스트 들이 없다면 이러한 동작을 할 수 없다.
따라서 이때 wait queue 가 필요한 것이다.

인터럽트, 프로세스 동기화, 타이밍 관련해서 많이 사용된다.

- wait queue 함수
.정적 선언
DECLARE_WAIT_QUEUE_HEAD(name)

.동적 선언
init_waitqueue_entry()

. queue 삽입
add_wait_queue() : 대기큐 맨앞 삽입
add_wait_queue_exclusive() : 대기큐 맨뒤 삽입

. queue 에서 제거
remove_wait_queue()

. 대기큐 리스트가 비어있는지 검사
waitqueue_active()

'Programming > Linux_Kernel' 카테고리의 다른 글

Ram Memory 설정하기  (0) 2010.08.02
work queue & kworker  (0) 2010.08.02
restart_syscall 의 호출 경로 - 작성중  (1) 2010.07.13
process의 signal 처리 상태 보기  (0) 2010.07.09
linux system call 의 호출 구조  (0) 2010.07.09