2010-02-22 1 views
13

캐시 동기화 작업에 대한 질문이 있습니다.캐시 - 플러시 및 무효화 작업

유효하지 않음 : cpu가 장치에서 업데이트 한 메모리 부분을 읽으려고 시도하기 전에 해당 메모리를 무효화해야합니다.

세척 : 장치 CPU 업데이트 메모리의 일부를 판독하기 전에 장치가 업데이트 된 컨텐츠와 메모리의 내용을 판독하고 있으므로, CPU가, (? 답장 또한 올) 메모리에 캐쉬로부터 콘텐츠 세척한다.

플러시가 수행되지 않으면 캐시 된 내용으로 메모리가 업데이트되지 않기 때문에 메모리에있는 정크 데이터를 읽을 수 있습니다.

위의 이해가 정확한지 확인해주십시오.

언제 플러시 및 무효화를 결합 하시겠습니까? 장치 제어 설명자를 가지고 놀면서 플러시 및 무효화를 결합하여 동기화해야한다고 들었습니다. 왜 그렇게?

플러시와 무효화와 같은 시퀀스를 따라야합니까?

무효화가 뒤 따르는 무효화가 유용 할 수있는 시나리오가 있습니까?

+0

그런 설명을 해 주셔서 감사합니다. 인터넷에서의 설명보다 더 좋은 설명을 찾지 못했습니다 .... – fazkan

답변

21

플러시는 캐시의 내용을 주 메모리에 다시 쓰고 무효화하면 이후의 읽기가 주 메모리로 이동하도록 무효로 표시합니다.

장치가 메모리 블록을 업데이트하는 경우 플러시 및 무효화를 결합합니다. 플러시는 장치가 최신 내용을 갖도록하고 무효화하면 장치가 완료되면 CPU가 메모리에서 새 내용을 읽으십시오.

+2

명확성을 위해 추가는 주로 초기화 단계에서 수행됩니다. 초기화 된 디스크립터는 초기화 단계에서 플러시 (메모리에서 업데이트) 및 무효화 (다음 CPU 읽기가 유용한 내용으로 이루어짐)입니다. – kumar

2

위의 내용이 맞는지 확인해주십시오.

일반적으로 당신은 완전히 맞지만 비틀 거릴 수있는 돌이 있습니다. HW 플랫폼을 지정하지 않았습니다. w/SRAM으로 패킹 된 소형 임베디드 컨트롤러에 대해 언급하지 않는다면 다음을 고려하십시오. MMU로 패키징 된 프로세서는 일반 DDR 메모리 및 드라이버 (HW 관련) 메모리에 대해 서로 다른 메모리 특성을 지원합니다. 마지막 하나는 캐싱 할 수 없으므로 플러시/무효화에 대한 걱정이 없습니다.


언제는 모두 플러시 결합 무효화 할 수 있습니까? 나는 장치 컨트롤 디스크립터로 재생하는 동안 flush와 invalidate를 결합하여 을 동기화해야한다고 들었습니다. 왜 그렇게? HW 버퍼 DDR 메모리로부터

  1. DMA 전송 데이터 (HW 버퍼 캐시 할 수없는 장치의 메모리가 있다고 가정) 몇 가지 시나리오가있다 DMA가 태그에 언급되어 있기 때문에

.

  • HW 버퍼에서 DDR 로의 DMA 전송 데이터 (HW는 데이터를 수신하고이를 CPU에서 사용 가능하게하려고합니다)
  • DDR에서 DDR의 다른 영역으로 DMA 전송.

    1. DDR 버퍼 는 DMA 전에를 플러시한다. 드라이버 버퍼는 캐싱 할 수 없으므로 무효화 할 필요가 없습니다.
    2. DDR 버퍼는 이전 또는 이후에 무효화되어야합니다 (자세한 내용은 NOTE 아래 참조). CPU가 캐시에서 '이전'데이터를 사용하지 못하도록 DMA 전송. HW 버퍼의 플러시가 중복됩니다.
    3. 'Source'버퍼를 플러시해야하며 'Destination'버퍼를 무효화해야합니다. 따라서 유효한 데이터는 전송 전에 DMA에 대한 메모리에 저장되며 DMA는 DMA가 작업을 마친 후 캐시에서 '먼지'를 제거하지 않습니다.


    NOTE : '소스'이 DMAing 전에을 플러시해야한다는 그것은 명백하다. 여전히 을 무효로하는 질문이 있습니다. 기술적으로 CPU가 '대상'데이터에 액세스하려고 시도하기 전에 DMA의 앞이나 뒤에있을 수 있습니다 (DMA가 작업을 완료했는지 확인해야합니다). IRL이 이후에 을 무효화하면 DMA가 문제를 일으킬 수 있습니다. 당신이 특정 플랫폼에 대한 무효화 DMAing 전에 을 수행해야 볼 수있는 것처럼 Flush/Invalidate range by virtual address; ARMv8; Cache;

    를 참조하십시오. 또한 ARMv7 장치에 대한 BSP 코드가 번갈아 나타났습니다 에 대한 권장 사항을 발견하여 DMA 전송 전에 대상 버퍼를 무효화했습니다.


    우리가 무효화 다음에 플러시 같은 순서를 따라해야합니까?

    원본 및 대상 버퍼가 서로 교차하지 않는다고 가정하면 종속 관계가 없습니다. flush-invalidate 또는 invalidate-flush 수 있습니다.


    도움이 될 것입니다 플러시 이어 무효화하는 시나리오가 있습니까?

    그렇게 생각하지 마십시오.