드라이버와 어플리케이션 간 메모리 공유

A Common Topic Explained - Sharing Memory Between Drivers and Applications

일일이 다 찾아서 확인하는 중.

요점은 DMA를 위한 공유 메모리 버퍼를 만들어놓고, 특정 프로세스의 컨텍스트에서 MmMapLockedPagesSpecifyCache를 호출하면 현재 프로세스에 매핑된 가상 주소를 얻을 수 있다는 것이다.

NdisMAllocateSharedMemory로 DMA 주소와 커널 가상 주소를 얻은 다음, 가상 주소를 넘겨서 IoAllocateMdl로 MDL 만들고, MmBuildMdlForNonPagedPool 호출해서 물리 주소를 얻은 다음, MmMapLockedPages를 이용해서 유저모드에 매핑하면 되는 것. 이렇게 하면 흔히 말하는 Zero Copy가 가능해진다.

단, 유저모드 프로세스 종료 시 해제하는 것을 잊으면 새 된다.
by xeraph | 2008/07/22 01:15 | 학술 | 트랙백 | 핑백(1) | 덧글(0)
트랙백 주소 : http://xeraph.com/tb/4503062
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at Xeraph beyond th.. at 2008/12/18 14:41

... 있습니다. 지금까지 정리했던 글들을 아래 붙입니다. PCI 설정 공간과 인터럽트 처리Relaxed OrderingSnoop Not RequiredNDIS 인터럽트 흐름드라이버와 어플리케이션 간 메모리 공유 SerDes : Serializer/DeserializerGBIC : Gigabit interface converter 형태소분석 Lucene, BDB, In ... more

:         :

:

비공개 덧글