문제

CPU 캐시 내용을 읽을 수 있는 방법이 있습니까?아키텍처는 ARM을 위한 것입니다.

일련의 주소를 무효화한 다음 그것이 무효화되었는지 여부를 확인하고 싶습니다.무효화 및 검사 여부에 관계없이 주소 범위를 읽고 쓸 수 있지만 캐시 내용을 읽을 수 있는지 알고 싶습니다.

감사해요!!

도움이 되었습니까?

해결책

ARM9는 캐시 상태를 검사 할 수있는 캐시 조작 및 테스트 레지스터를 제공합니다. 합리적인 출발점은 다음과 같습니다.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0151c/chdcfejb.html

ICACHE 및 DCACHE는 ARM V4T 프로그래머 모델로 정의 된 CP15 레지스터 7 및 9에 MCR 및 MRC 명령을 사용하여 유지 관리됩니다. 추가 작업은 MCR 및 MRC에서 CP15 레지스터 15를 사용하여 사용할 수 있습니다. 이러한 작업은 레지스터 7 및 9를 사용하는 작업과 결합하여 캐시를 전적으로 소프트웨어로 테스트 할 수 있습니다.

이들은 특권 지침이므로 대상 플랫폼에서 액세스 할 수 없습니다.

모든 캐시 라인의 상태를 버리는 간단한 프로그램으로 시작합니다. 캐시 태그가 제공하는 메모리 위치를 읽음으로써 캐시의 데이터를 읽을 수있는 충분한 정보를 제공해야합니다.

다른 팁

나는 그것이 불가능하다는 것을 쓰는 것을 주저하고있다. 그래서 나는 그것이 매우 어렵다. 아마도 일반적인 대답은 없을 것입니다. CPU 캐시가 투명하게 작동한다는 점을 감안할 때 캐시 컨텐츠를 변경하지 않고 첨부 된 CPU에서 컨텐츠를 읽을 수 없습니다. CPU 캐시는 일반적으로 CPU가 데이터에 액세스하려고 시도하는 경우 CAM (컨텐츠 주소가 가능한 메모리, 연관 메모리)으로 구현됩니다. 캐시가 찾고있는 경우 데이터가 없으면 메모리에서 가져 오면이 프로세스가 CPU에 투명합니다. .

옵션은 캐시를 RAM에 연결하는 시스템 버스에서 일종의 HW 관측 모듈과 스니핑을 사용하는 것입니다. 데이터 요청이 버스에 나타나면 요청 된 데이터가 캐시에 있지 않았습니다.

더 깊은 HW 지식을 가진 사람이 빛을 발하기를 바랍니다.

CPU 캐싱을 논의하는 Wikipedia에 대한 항목이 있습니다.http://en.wikipedia.org/wiki/cpu_cache

정의에 따르면, 캐시 콘텐츠를 읽기 위해 해야 할 일은 캐시에 저장되어 있는 메모리 위치를 로드하는 것뿐입니다.캐시가 제대로 작동하면 캐시에서 콘텐츠가 추출됩니다.

그러나 I-cache의 콘텐츠를 읽으려는 경우 이는 구조적으로 종속됩니다.또한 고려해야 할 경쟁 조건이 있습니다.캐시 콘텐츠를 읽는 명령이 실수로 캐시 콘텐츠 자체를 덮어쓸 수도 있습니다.

언급 된 바와 같이 이 스레드, CPU를 사용하면 캐시의 내용이 변경 될 수 있습니다. (대부분의) 캐시 구현은 의도적으로 CPU에 완전히 투명하므로 기존 CPU에서 실행되는 소프트웨어 내에서 캐시의 내용을 직접 볼 수 없습니다.

이와 같은 작업을 수행하려면 캐시 인식 CPU가 필요합니다 (캐시 제어를위한 특별 지침이 포함되어 있으므로 실제로 존재하는지 전혀 모릅니다). 또는 캐시를보기 위해 별도의 HW 모듈을 설치해야합니다. 내가 가진 두 가지 아이디어는 다음과 같습니다.

  1. 원래 캐시 컨트롤러를 추가 제어 기능이 있고 시스템 버스에 연결하여 데이터를 읽을 수있는 캐시 컨트롤러로 교체하십시오. 이 컨트롤러는 CPU와 캐시 사이에 있습니다.

  2. 읽기 전용 캐시 액세스로 원래 캐시와 병렬로 보조 모듈을 배치하십시오. CPU는 특수 인터럽트 라인 (또는 유사한 하드웨어 - 소프트웨어 신호)을 사용하여 캐시의 덤프를이 모듈의 메모리에 트리거 한 다음 나중에 (버스를 통해) 다시 읽을 수 있습니다. 이 컨트롤러는 캐시 작동에 영향을 미치지 않습니다. 주어진 시간에 스냅 샷을 찍을 수 있습니다.

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