2014-12-12 4 views
0

사용자 공간에서 일부 fds를 폴링 할 때 fds는 열려있는 장치 노드 (장치 파일)에 속합니다. 해당 장치 파일에 데이터가 어떻게 도착하고 커널 공간의 데이터가 사용자 공간으로 이동합니까?폴링 기능은 내부적으로 어떻게 작동합니까?

+1

LDD3의 6 장을 읽으십시오. –

+0

CL이 맞습니다. LDD3을 읽으십시오. 그러나 그것이 무엇을 의미하는지 모른다면, 리눅스 디바이스 드라이버 책을 읽어보십시오. 그리고 무엇보다도 무료로 바로 이용할 수 있습니다 : http://lwn.net/Kernel/LDD3/ – kaylum

답변

0

일부 파일 설명자에 대해 poll()이 호출되면 파일 조작 구조로 등록 된 해당 장치 poll_xyx() 메소드가 커널 공간에서 호출됩니다. 이 방법은 데이터를 즉시 사용할 수 있는지 확인합니다.이 조건이 참이면 이벤트 마스크가 설정되고 폴링이 사용자 공간으로 돌아갑니다. 사용자 공간 응용 프로그램은 이벤트 마스크를 확인하고 처리 할 준비가되었음을 알게됩니다. 따라서 사용자 공간 응용 프로그램은 파일 설명자에서 read()를 호출하여 커널 공간의 파일 작업 구조에 등록 된 장치 read_xyz()를 호출합니다. 이 방법은 커널 공간의 데이터를 copy_to_user() 또는 put user()를 사용하여 사용자 응용 프로그램이 전달한 버퍼로 복사합니다.

그러나 데이터를 쉽게 사용할 수 없을 때 poll()을 호출하면 대기 대기열에서 대기 상태가됩니다. 데이터가 도착하면 드라이버는 poll_schedule_timeout() 함수 내에서 대기 대기열에서 대기중인 프로세스를 깨 웁니다. 응용 프로그램이 깨어 난 후에도 위에서 설명한 동일한 프로세스가 계속됩니다.

관련 문제