2011-08-10 3 views
3

저는 일정 기간 동안 페이지 오류를 추적하여 장난감 작업 집합 견적 도구를 작성하려고합니다. 페이지에 오류가있을 때마다 나는 그것이 만져 졌음을 기록하고 싶다. 이미 존재하는 페이지에 대한 액세스를 추적하려고 할 때 구성표가 고장납니다. 오류를 일으키지 않고 페이지를 읽거나 쓸 경우 액세스를 추적 할 방법이 없습니다.페이지가 이미 tlb에 있어도 강제로 페이지를 강제로 만들 수 있습니까?

그렇다면 페이지 액세스에서 "간단한"오류가 발생할 수 있기를 원합니다. 나는 어떤 점에서 어떤 방법에 대해서 들었다. 그러나 그것이 효과가 있었는지 이해하지 못해서 내 마음 속에 고집하지 않았다. 더러운 비트 일까?

답변

2

이것을 수행하는 일반적인 방법은 페이지가 메모리에 남아있는 동안 페이지의 "현재"비트를 지우고 커널이이를 알 수 있도록 필요한 커널 데이터 구조를 제자리에 두는 것입니다.

그러나 아키텍처에 따라 더 나은 옵션이있을 수 있습니다. 예를 들어 x86에서 PTE가 선형 주소 변환에서 사용될 때마다 "액세스 됨"플래그 (PTE의 비트 5)가 설정됩니다 . 원한다면 언제든지이 비트를 지울 수 있으며 하드웨어는 페이지가 터치되었음을 기록하도록 하드웨어를 설정합니다.

이러한 방법 중 하나를 사용하면 TLB에서 해당 페이지의 캐시 된 번역을 지워야합니다. 즉, x86에서는 INVLPG 명령어를 사용할 수 있습니다.

3

mprotectPROT_NONE과 함께 사용할 수 있습니다 ("페이지에 액세스 할 수 없음"). 그러면 주어진 페이지에 대한 액세스로 인해 오류가 발생합니다.

+0

필자는 커널을 패치하려고했기 때문에 사용자 공간 방법이 내가 원하는 것을 정확하게는 모르지만이 기술이 커널 내부의 것으로 해석 될 수 있다고 확신합니다. 수락 됨. – Alex

관련 문제