Windows에서 hal.dll로 스핀 록을 내 보낸다는 것을 알고 있으므로 스핀 록 코드를 리버스 엔지니어링했습니다. 결과는 다음과 같습니다.Windows XP와 Windows 7간에 스핀 록 구현이 다른 이유는 무엇입니까?
윈도우 XP의 디 컴파일 스핀.
unsigned __int32 __thiscall KfAcquireSpinLock(signed __int32 *this)
{
unsigned __int32 result; // [email protected]
result = __readfsdword(36);
__writefsdword(36, 2u);
while (_interlockedbittestandset(this, 0))
{
while (*this & 1)
_mm_pause();
}
return result;
}
Windows 7의 디 컴파일 된 스핀 록.
unsigned __int32 __fastcall KeAcquireSpinLockRaiseToSynch(signed __int32 *a1)
{
unsigned __int32 result; // [email protected]
int v2; // [email protected]
unsigned __int32 v3; // [email protected]
signed __int32 *v4; // [email protected]
int v5; // [email protected]
result = __readfsdword(36);
__writefsbyte(36, 0x1Bu);
while (_interlockedbittestandset(a1, 0))
{
v2 = 0;
do
{
++v2;
if (!(v2 & dword_8002D1B0))
{
if (dword_8002D19C & 0x40)
{
v3 = result;
v4 = a1;
v5 = v2;
dword_8002D1B4(v2);
v2 = v5;
a1 = v4;
result = v3;
}
}
_mm_pause();
}
while (*a1 & 1);
}
return result;
}
버전간에 코드가 다른 이유는 무엇입니까? 특히, Windows 7 버전에 추가 된 코드가 가상화에서 스핀 록 성능을 향상시키는 방법을 알지 못합니다.
변경 사항이 성능상의 이유로 인한 것이라고 생각되는 이유는 무엇입니까? –
죄송합니다. Xen 환경에서 Windows 7의 성능이 향상된 버전입니다. 나는 그 말을 분명히 말하지 않았다. 또한 인증을 위해 몇 가지 테스트를 수행했습니다. –
이 질문의 목적이 무엇인지는 분명하지 않습니다. 자신의 코드에서 같은 기술을 사용할 수 있도록 설명을 찾고 있습니까? 이 변경 사항에서 추적 한 문제를 디버깅하고 있습니까? 이게 그냥 쓸데없는 호기심입니까? –