메모리 영역이 캐시되지 않은 것으로 표시되는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/90204

  •  01-07-2019
  •  | 
  •  

문제

임베디드 애플리케이션에는 외부 타겟 보드에서 유효한 다양한 주소 범위를 설명하는 표가 있습니다.이 테이블은 MMU를 설정하는 데 사용됩니다.
RAM 주소 범위는 캐시 가능으로 표시되지만 다른 영역은 캐시 불가능으로 표시됩니다.왜 그런 겁니까?

도움이 되었습니까?

해결책

하드웨어와 소프트웨어가 동시에 메모리 영역에 액세스하는 경우(예:하드웨어 구성 레지스터 또는 DMA용 분산 수집 목록), 이 영역 ~ 해야 하다 캐시되지 않은 것으로 정의됩니다.실제 DMA의 경우 메모리 버퍼를 캐시로 정의할 수 있으며, 대부분의 경우 애플리케이션 수준에서 해당 버퍼에 빠르게 액세스할 수 있도록 버퍼를 캐시하는 것이 좋습니다.버퍼를 DMA 또는 애플리케이션에 전달하기 전에 캐시를 플러시/무효화하는 것은 드라이버의 책임입니다.

위의 작은 업데이트 ~ 해야 하다 특수한 하드웨어가 있는 경우에는 올바르지 않습니다.다양한 하드웨어 블록의 액세스를 메모리에 동기화하는 CCI(캐시 일관성 상호 연결)입니다.

다른 팁

이는 프로세서가 캐싱으로 인해 오래된 값을 사용하지 않도록 하기 위한 것입니다.(일반) 캐시된 RAM에 액세스하면 프로세서는 사용자가 액세스한 값을 "기억"할 수 있습니다.다음에 동일한 메모리 위치를 볼 때 프로세서는 RAM을 보지 않고 기억하는 값을 반환합니다.이것이 캐싱입니다.

메모리 매핑된 장치(예: 일부 데이터 패킷을 반환하는 FPGA)가 있는 경우처럼 프로세서가 알지 못하는 사이에 위치의 내용이 변경될 수 있는 경우 프로세서는 마지막 시간에서 "기억된" 값을 반환할 수 있습니다. 틀렸을 것입니다.

이 문제를 방지하려면 해당 주소 공간을 캐시 불가능으로 표시하세요.이는 프로세서가 값을 기억하려고 시도하지 않도록 보장합니다.

DMA 또는 기타 하드웨어 상호 작용에 사용되는 메모리 영역은 캐시되어서는 안 됩니다.

아마도 메모리 매핑된 I/O에 사용되는 것일까요?

Flash와 같은 일부 영역은 한 주기로 읽을 수 있으므로 캐시할 필요가 없습니다.

최신 컨트롤러는 DMA에 L2 캐시를 사용할 수 있습니다. 즉, DMA 액세스에 사용되는 캐시된 메모리 영역의 일관성을 유지합니다.이는 컨트롤러가 (DMA를 통해) 수행하는 "스누프 가능 메모리 트랜잭션"이라고도 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top