의이 문장 (Total Store Ordering)를 생각해 보자 :"읽기 전에 읽음"은 메모리 순서에서 무엇을 의미합니까?
는, 전에 주문 읽어 읽기를 쓰기 전에 쓰고, 쓰기 전에 읽지 만하지 읽기 전에 씁니다.
은 내가 거의 기초를 얻을 생각 :
- 각 스레드는 CPU가 명령을 다시 정렬 할 수 있습니다 자신의 프로그램 순서 (이 기록 된대로 코드) 일반적으로
- 을 가지고 있으며, 우리는 그것을 제한해야한다
- CPU는 또한 메모리로드 및 저장을 재정렬 할 수 있으며이를 제한해야합니다.
- 현재 하드웨어 구현은
mfence
과 같은 "serializing instructions" 이 두 가지 문제를 해결하기 위해 모든 스레드가 ked합니다. - 하드웨어는 일반적으로 하나의 더티 캐시 할 수 있습니다, 그래서 그 캐시 플러싱에 관한 모든 것입니다 :
- 저장 스레드 플러시 더티 캐시를
- 로드 스레드 요청과 블록에는 더티 캐시
- 이 없을 때까지 커널 개발자는 CPU 액세스 이외의 메모리에 관심이 있지만 그렇지 않습니다.
그러나 "읽기 전에 읽음"이 실제로 의미하는 바를 아직도 이해하지 못합니다. 아마도 아키텍처에 암시 적 장벽과 일련 번호 지정 지침이 있지만 실제로는 알 수 없다는 것을 의미합니다.
아마도 다른 읽기에 비해 읽기가 재정렬되지 않습니다. – immibis
OP,이 견적을 어디에서 받았습니까? Sparc이나 고전적인 x86은로드로드 순서 재 지정을 허용하지 않습니다. - https://en.wikipedia.org/wiki/Memory_ordering – Leeor