이 Understanding the Linux kernel (Bovet & Cesati),
을 통해 읽기 이래로 커널 동기화에 대한 장 스핀 락 취득 코드로 귀결한다고 :Linux/SMP 스핀 록이 불필요하게 느린가요?
1: lock:
btsl $0, slp
jnc 3
2: testb $1, slp
jne 2
jmp 1
3:
이제
내가 원래 중첩 루프를 가지고 낭비 듯 생각 당신이 뭔가를 구현할 수 :
1: lock:
btsl $0, slp
jc 1
훨씬 더 간단합니다. 그러나 lock
이 다른 CPU에 영향을 미치고 btsl
의 타이밍이 단순한 testb
의 것보다 크기 때문에 그 이유를 알 수 있습니다.
내가 을 가지고 있지 않은 한 가지가은 스핀 락의 후속 릴리스입니다.
lock:
btrl $0, slp
내 질문은 기본적으로 이유 :이 책은 다음과 같은 산출한다고?lock/mov-immediate
콤보가 더 빠릅니다.
커널이 버그가 없다는 규칙에 따라 이전 상태를 1로 설정하므로 이전 상태를 캐리 플래그로 가져올 필요가 없습니다. 당신이 이미 그것을 습득하지 않았다면 그것을 풀어 주려고하지 않을 것입니다).
그리고 mov
적어도 내가 무엇을 놓치고 그래서 386
에, btrl
보다 훨씬 빠르다?
이후 칩의 지침에 대한 타이밍이 변경 되었습니까?
책을 인쇄 한 후 커널이 업데이트 되었습니까?
도서가 잘못 되었습니까?
더 빠른 명령이 만족하지 않는 CPU 간의 동기화를 포함한 다른 측면을 놓쳤습니까?