문제
현재 ARMv7 코어의 ARM 아키텍처 매뉴얼을 통해 WADING입니다. A3.5.3 챕터 A3.5.3 메모리 액세스 원자에 대해서는,
단일 복사 원자 부하가 단일 복사 원자 저장소와 겹치면 겹치는 바이트 중 하나에 대해로드가 작성된 데이터를 반환합니다. 쓰기는 그 바이트의 일관된 순서로 삽입됩니다. 단일 복사 원자 저장소는로드가 점에서 데이터를 반환해야합니다. 일관성에서 삽입 된 쓰기보다 이전에 모든 복사본 원자 상점의 일관된 주문 겹치는 바이트.
원주민이 아닌 영어 스피커로서 나는이 문장을 이해하는 데 약간의 도전을 인정한다.
메모리 바이트에 대한 쓰기가 일관성 순서로 삽입되지 않으므로 위의 시나리오가 적용되지 않습니까? 그렇지 않은 경우, 나는 그 문장을 단축하고,
라고 말하고 있다고 말하면됩니다.로드가 적어도 하나의 바이트를 반환하는 경우 쓰기, 그 다음로드는 점에서 모든 겹치는 바이트를 반환해야합니다. 쓰기가 삽입 된 곳보다 일찍 모든 겹치는 바이트의 일관된 순서.
는 여전히 동일한 의미를 전송합니까?
해결책
armv8 암에서의 문구가 많은 장소에서 가능한 모호성을 정말로 제거하려고 시도합니다 (메모리 순서 섹션을 사실상 읽을 수없는 경우에도 불구하십시오).
일반적인 이해의 관점에서 (실제로 구현 구현 에 반대로) 약간의 모호성이 항상 상처를 입지는 않지만, 절대적으로 "메모리 위치"가 무엇을 의미 하는지를 분명히, 나는 오래된 V7 매뉴얼 (DDI0406C.B) 이이 경우
를 읽는 것이 좋습니다.다음 조건이 모두 참일 경우 읽기 또는 쓰기 작업은 단일 복사 원자입니다.
- 가 불가능합니다.
메모리 위치에 대한 임의의 기록 동작 이후, 메모리 위치의 값은 기록 동작 중 하나에 의해 기록 된 값이다. 메모리 위치의 값의 일부가 하나의 쓰기 작업에서 오는 부분과 다른 쓰기 작업에서 가져 오는 값의 다른 부분에서
판독 동작 및 기록 동작이 동일한 메모리 위치로 이루어지면, 판독 동작에 의해 얻어진 값은 다음 중 하나이다 :
- 쓰기 작업 전의 메모리 위치 값
- 쓰기 조작 후 메모리 위치의 값입니다.
읽기 조작의 값이 쓰기 조작 전의 메모리 위치의 값이고 부분적으로 쓰기 조작 후 부분적으로 메모리 위치의 값이 부분적으로 표시되는 경우가 아닙니다.
당신의 이해가 옳습니다 - 단일 복사 원자 작업의 정의 지점은 모두 그것의.
V7의 경우가 있습니다 (오른쪽 해석하는 경우) 동시에 동일한 위치에 발생하는 두 개의 일반적으로 단일 복사본 원자 저장소가 있지만 다른 크기로 원자 성의 보장을 중단시킵니다. 거기에서 예기치 않은 바이트 혼합을 관찰 할 수 있습니다. 이것은 V8에서 제거 된 것으로 보입니다.