이것은 Linux (드라이버 관련)에 대한 질문입니다. 대규모 DMA 액세스 (멀티 메가 바이트 읽기 또는 쓰기, CUDA 카드 또는 네트워크 카드에 대해 생각할 수 있음)를 수행 할 수있는 하드웨어가 있다고 가정합니다. 장치와주고받는 데이터는 사용자 공간에 할당되고 사용자 공간에 배치됩니다.DMA가 보류중인 페이지를 munlock하려고 시도했습니다.
따라서 올바른 방법은 DMA로 액세스 할 메모리 범위 인 mlock()
입니다. 그런 다음 사용자 프로세스가 내 드라이버에게 전화를 걸어 DMA 전송을 시작합니다. 전송이 시작되면 내 사용자 공간 프로세스가 다른 스레드에서 계속 작동합니다.
나중에 데이터가 전송되었다고 생각하면 munlock()
사용자 공간 스레드의 메모리 범위를 사용하고 싶습니다.
정상인가요? 실제 DMA 전송이 끝나기 전에 munlock()
으로 전화하면 어떻게됩니까?
munlock()
성공 또는 실패할까요? 또는 DMA 전송이 완료 될 때까지 차단됩니까?
PS : question is originally Zan Lynx, id13422, SO.