2013-10-15 2 views
1

MPERF 및 APERF MSR을 읽으려고합니다. 그러나 이렇게하면 컴퓨터가 재부팅됩니다. 아마도 GP 예외 때문일 수 있습니다.MSR MPERF를 읽는 조건은 무엇입니까?

; Read MPERF register 
mov ecx, 0xe7 
rdmsr 

코드는 rdmsr에 나누기 : 여기

은 내가 사용하는 코드입니다. 나는 Intel Haswell 프로세서를 가지고있다. 나는 긴 모드로 달리고있다.

나는 내 자신의 운영 체제를 실행 중이므로 나는 Ring 0에서 실행 중이라고 확신한다. 또한, 내가하는 경우 :

; Read PAT register 
mov ecx, 0x277 
rdmsr 

예외없이 작동합니다.

이 특정 레지스터 (MPERF)를 읽는 다른 조건은 무엇입니까?

답변

2

귀하의 경우에는 필요한 MSR이 융합되거나 설계 상 지원되지 않을 것으로 추측됩니다. CPUID은이를 비준 할 수 있습니다. 코어 주파수 계산을위한 대안으로, Finding out the CPU clock frequency (per core, per processor)을 참조하십시오. 거기에 대한 해결책은 MPERF MSR 레지스터에 의존하지 않는 방법입니다.

+0

IOPL에 대해 알지 못했습니다. 하지만, 이미 8042 컨트롤러에서 IN/OUT 명령어를 사용하고 있습니다. 그래서 저는 Ring 0에있는 것입니다. –

+0

또한 0x277에 rdmsr을 사용하려고 시도했습니다. –

+0

@Baptiste Wicht - 자신 만의 OS를 멋지게해라. 나는이 경우 * 어쩌면 *이 레지스터가 융합 된 것을 좋아한다. 하나의 필요성이 CPUID의 읽기를 통해 활성화되어 있는지 확인해야한다. –

관련 문제