리눅스 커널이 어떻게 작동하는지에 대한 일반적인 아이디어를 얻으려면 "Robert Love의 제 3 판"을 읽는 중입니다. (2.6.2.3)리눅스 커널 대기 대기
큐 예를 들어이 코드를 작동 기다립니다
/* ‘q’ is the wait queue we wish to sleep on */
DEFINE_WAIT(wait);
add_wait_queue(q, &wait);
while (!condition) { /* condition is the event that we are waiting for */
prepare_to_wait(&q, &wait, TASK_INTERRUPTIBLE);
if (signal_pending(current))
/* handle signal */
schedule();
}
finish_wait(&q, &wait);
는이 코드를 실행중인 프로세스를 알고 싶어? 커널 스레드입니까? 누구의 프로세스 시간이 이것입니까?
또한 조건이 여전히 충족되지 않는 동안 우리는 다른 프로세스를 실행하기 위해 수면 및 호출 일정을 계속 수행합니다 질문은 언제이 루프로 돌아갈 수 있습니까?
이 책은 ... 프로세스가 절전 모드로 전환되는시기, 그것은 다른 사람이 그것을 깨울 바쁜 루프를 입력해야 할 것입니다, 우리의 실행 큐에서 제거 된 것을 말한다
가
- 또한 말한다 : "수면은 항상에서 처리해야한다 작업이 대기중인 조건이 실제로 발생했는지 확인하는 루프입니다. "
이 루프가 실행중인 컨텍스트가 무엇인지 알고 싶습니다.
죄송합니다. 이것이 바보 같은 질문 인 경우입니다. 큰 그림을 보는 데 문제가 있습니다.
안녕하세요! 위대한 첫 번째 대답! –
고마워, @ 브라이언 케인! –
이것은 스케줄러의 일부가 아니며 (_calling_ schedule()임을 알 수 있습니다.) 자신을 잠자기 상태로 만듭니다. 이것은 조건이 충족 될 때까지 wait_queue에서 대기하는 표준 코드이므로 wait_event()에 캡슐화 된 표준입니다. 이것은 커널 선점보다 오래된 것입니다. –