2

의이 문장 (Total Store Ordering)를 생각해 보자 :"읽기 전에 읽음"은 메모리 순서에서 무엇을 의미합니까?

는, 전에 주문 읽어 읽기를 쓰기 전에 쓰고, 쓰기 전에 읽지 만하지 읽기 전에 씁니다.

은 내가 거의 기초를 얻을 생각 :

  • 각 스레드는 CPU가 명령을 다시 정렬 할 수 있습니다 자신의 프로그램 순서 (이 기록 된대로 코드) 일반적으로
  • 을 가지고 있으며, 우리는 그것을 제한해야한다
  • CPU는 또한 메모리로드 및 저장을 재정렬 할 수 있으며이를 제한해야합니다.
  • 현재 하드웨어 구현은 mfence과 같은 "serializing instructions" 이 두 가지 문제를 해결하기 위해 모든 스레드가 ked합니다.
  • 하드웨어는 일반적으로 하나의 더티 캐시 할 수 있습니다, 그래서 그 캐시 플러싱에 관한 모든 것입니다 :
    • 저장 스레드 플러시 더티 캐시를
    • 로드 스레드 요청과 블록에는 더티 캐시
  • 이 없을 때까지 커널 개발자는 CPU 액세스 이외의 메모리에 관심이 있지만 그렇지 않습니다.

그러나 "읽기 전에 읽음"이 실제로 의미하는 바를 아직도 이해하지 못합니다. 아마도 아키텍처에 암시 적 장벽과 일련 번호 지정 지침이 있지만 실제로는 알 수 없다는 것을 의미합니다.

+0

아마도 다른 읽기에 비해 읽기가 재정렬되지 않습니다. – immibis

+0

OP,이 견적을 어디에서 받았습니까? Sparc이나 고전적인 x86은로드로드 순서 재 지정을 허용하지 않습니다. - https://en.wikipedia.org/wiki/Memory_ordering – Leeor

답변

0

나는 그리스에서 나의 유니 (uni)에있는 OS 과정에서 교수님의 목소리로 그것을 읽었다 고 확신한다. :) 아무도 대답하지 않으므로 나는 대답하려고 할 것입니다.

OS가 있다고 가정하면 모든 스레드/프로그램이 읽고 쓰기를 수행하려고합니다. 이제 우리는 멀티 스레딩에 대해 이야기하고 있기 때문에 스레드는 변수의 값처럼 다른 스레드가 작성한 것을 읽을 수 있습니다.

이제 스레드 1이 메모리 주소 x의 읽기를 수행하려고하고 스레드 2가 읽기를 수행하려는 경우 x이라면 어떤 순서로든 x을 읽을 수 있습니다. 그것이 의미하는 바입니다, 제 생각입니다!

내가 어떻게 든 도움이되기를 바랍니다. 왜냐하면 나는 그것이 최고의 대답을 줄 수 없다는 것을 알고 있기 때문입니다! :/