>백엔드 개발 >C++ >x86 아키텍처에서 로드 및 저장의 원자성은 어떻게 보장됩니까?

x86 아키텍처에서 로드 및 저장의 원자성은 어떻게 보장됩니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-21 13:58:14338검색

How is Atomicity of Loads and Stores Guaranteed on x86 Architectures?

x86에서 로드 및 저장의 원자성

메모리에 대한 원자적 연산은 RAM에서 직접 실행할 필요가 없습니다. 모든 관찰자는 그것들을 원자적인 것으로 인식합니다. 코어 간의 캐시 일관성은 DMA 작업에서도 이 원자성을 존중하도록 보장합니다.

원자성 구현>

정렬된 로드 또는 최대 64비트 저장의 경우 원자성은 코어, 메모리 및 PCIe 간을 포함하여 시스템의 데이터 경로 내에서 작업이 완료되므로 "무료"로 달성됩니다. 이는 CPU 하드웨어가 추가 하드웨어나 다른 요청 차단 없이 작업의 원자성을 보장할 수 있음을 의미합니다.

캐시의 원자성 작업>

다른 코어 또는 DMA 액세스는 변경 사항을 단일 작업으로 관찰하므로 L1 캐시는 원자적으로 충분합니다. 이러한 수정은 잘못된 실행으로 인해 초기 저장보다 늦게 발생할 수 있습니다.

정렬되지 않은 액세스

성능 최적화는 제쳐두고 캐시 라인 경계를 넘어 데이터에 액세스합니다. 비원자적 행동이 발생할 수 있습니다. x86에서 최대 8바이트의 정렬된 액세스는 원자적이며, 이는 데이터 경로가 더 좁아지더라도 전체 캐시 라인(일반적으로 64B)이 원자적으로 전송된다는 것을 의미합니다. 그러나 더 넓은 액세스에는 동시 액세스를 방지하기 위한 잠금이 필요합니다.

원자적 읽기-수정-쓰기

원자적 읽기-수정-쓰기 작업은 더 큰 문제를 야기합니다. . 원자성을 유지하려면 코어는 캐시 라인을 Modified 상태로 유지하고 작업이 진행되는 동안 외부 수정을 차단해야 합니다. 정렬되지 않은 작업의 경우 다른 코어가 변경 사항을 원자적으로 관찰하도록 하기 위해 버스 잠금이 필요할 수 있습니다.

위 내용은 x86 아키텍처에서 로드 및 저장의 원자성은 어떻게 보장됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.