x86에서 ZONE_DMA 영역은 0~16MB 라고 합니다.
그 이유는 ISA 장치가 물리적 메모리의 처음 16MB만을 접근 할 수 있기 때문이라고 하는데.
아무리 생각을 해봐도 상식적으로 이해가 안됩니다.ㅜㅜ
현재 사용하지도 않는 ISA 장치 때문에 DMA 가능 영역이 0~16MB으로 제한 되어야 한다니...
더욱이 x86에서 BIOS가 사용하는 공간, 커널이 적재 되는 공간을 제외하면 실질적으로 DMA 가능 영역은
16MB도 되지 않습니다.
"DMA 가능한 메모리를 할당 하려면 반드시 ZONE_DMA 영역에 있는 메모리를 사용해야 한다"
출처 : 리눅스 커널 심층 분석 (P.184)
제가 생각 하기에 이 논리가 성립 될 수 있는 경우는 크게 두가지가 아닌가 생각합니다.
하나는 현재 설정 된 ZONE_DMA 영역만 사용해도 아무런 문제가 없다. 즉 모든 디바이스들이 사용하는
DMA 영역을 합해도 16MB를 넘지 않는다.
다른 하나는 코드상에서 ZONE_DMA 영역을 16MB 이상으로 수정 하여 DMA 가능 영역을 확장한다.
선배님들의 답변 부탁 드립니다. ^^;
.
/*
* Normal addressable memory is in ZONE_NORMAL. DMA operations can be
* performed on pages in ZONE_NORMAL if the DMA devices support
* transfers to all addressable memory.
*/
커널 소스 enum zone_type의 ZONE_NORMAL을 보니 이런 주석이 있네요.
이거 완전 저자한테 배신감 느끼는군요. ㅋㅋㅋ