2013-01-23 1 views
0

PC에 연결된 PCI 카드가 있으며이를위한 GUI가 있습니다. 우리는 PCI 카드에서 읽기/쓰기 (FPGA가 PCI 카드에서 읽기/쓰기 작업을 수행)하기 위해 RAM에 약 400 - 600 MB의 실제 메모리의 DMA 버퍼를 할당하려고합니다. 우리는 JUNGO windows PCI 드라이버를 사용하고 있습니다. JUNGO가 제공하는 WDC_DMAContigBufLock 메소드는 연속 또는 분산/수집 메소드를 통해 DMA 버퍼를 할당합니다. 우리는 RAM에 최대 63MB의 버퍼를 생성 할 수 있었고 63MB 이상을 생성 할 수 없었습니다. 운영 체제는 Windows XP 32 비트이고 RAM 크기는 4GB입니다 (상대적으로 3GB는 무료).Windows XP에서 500MB의 DMA 버퍼를 할당하는 방법

응용 프로그램 (GUI)은 C# .Net으로 작성되었으며 400 - 600MB의 DMA 버퍼를 만들려고하면이 응용 프로그램을 통해 이루어집니다. 나는 해결책을 찾고 있는데/아이디어는 무엇을 일으키는 원인이 될 수 있습니까/나를 멈추어서 400 - 600MB의 버퍼 크기를 만들 수 있습니다.

감사

답변

2

는 DMA 버퍼에 사용되는 페이지는 비 페이징 커널 메모리 풀에서 할당됩니다. 이것은 Windows에서 소중한 자료입니다. 엄청난 양의 할당을 합리적으로 요구할 수는 없습니다. WD_DMALock() 함수가 요청에 상한선을 두었는지 또는 단순히 너무 많이 요청하고 Windows가 요청을 거부하는지 또는 컴퓨터가 단순히 요청을 거부했는지 여부는 문서에서 분명하지 않습니다. 메모리 풀. 500 메가 바이트는 없을 것입니다. XP의 기본 크기는 256MB입니다.

the FAQ에 대한 자세한 내용 확실하게이 작업을 안정적으로 수행 할 수는 없으므로 전송을보다 합리적인 크기의 작은 요청으로 나눕니다.

+0

안녕 한스, 답장을 보내 주셔서 감사합니다! 레지스트리에서 페이징되지 않은 메모리 풀을 늘리기 전에 30MB의 버퍼 만 할당 할 수있었습니다. Jungo는 500MB의 메모리를 만들 수는 있지만 내 편에서는 할 수 없다고 전합니다. Jungo API를 사용하지 않고 버퍼를 생성 할 수있는 방법이 있습니까? – Venu

+1

당신은이 대답의 요점을 심각하게 놓치고 있습니다. 이를 해결할 수있는 유일한 방법은 스스로를 교육하고 Windows Internals 사본을 가져 와서 커널 메모리 풀에 대해 이야기하는 장을 읽는 것입니다. –

관련 문제