읽기-수정-쓰기
보이기
읽기-수정-쓰기(read–modify–write)는 컴퓨터 과학에서 메모리 위치를 읽고 여기에 새 값을 쓰는 원자적 작업 클래스(예: 검사와 지정, 페치와 추가, 비교와 교환)이다. 완전히 새로운 값이나 이전 값의 일부 기능을 동시에 사용한다. 이러한 작업은 다중 스레드 응용 프로그램에서 경쟁 조건을 방지한다. 일반적으로 뮤텍스나 세마포어를 구현하는 데 사용된다. 이러한 원자적 작업은 비차단 동기화에도 많이 사용된다.
모리스 헐리히(1991)는 다음과 같이 합의 수치를 기준으로 원자 작업의 순위를 매겼다.
- ∞: 메모리 간 이동과 교환, 증가된 대기열, 비교와 교환, 페치와 콘스, 고정 바이트, 로드 링크/스토어 컨디셔널(LL/SC)[1]
- 2n − 2: n-레지스터 할당
- 2: 검사와 지정, 스왑, 페치와 추가, 대기열, 스택
- 1: 원자적 읽기 및 원자적 쓰기
주어진 합의 번호가 필요한 작업을 아무리 많이 사용해도 합의 번호가 낮은 작업만으로 구현하는 것은 불가능하다.[2] 읽기-수정-쓰기 명령어는 입출력 장치에서 사용될 때 예상치 못한 결과를 낳는 경우가 많다. 쓰기 작업은 읽기 작업에서 액세스되는 동일한 내부 레지스터에 영향을 미치지 않을 수 있기 때문이다.[3]
이 용어는 원자적 읽기-수정-쓰기 시퀀스로 실제 쓰기 작업을 수행하는 RAID 레벨과도 연관되어 있다.[4] 이러한 RAID 수준에는 RAID 4, RAID 5 및 RAID 6이 포함된다.
같이 보기
[편집]각주
[편집]- ↑ "Writing Lock-Free Code: A Corrected Queue" by Herb Sutter: "Compare-and-swap (CAS) is ... widely available ... However, some systems instead provide the equivalently powerful load-linked/store-conditional (LL/SC) instead."
- ↑ Herlihy, Maurice (January 1991). “Wait-free synchronization” (PDF). 《ACM Trans. Program. Lang. Syst.》 13 (1): 124–149. CiteSeerX 10.1.1.56.5659. doi:10.1145/114005.102808. S2CID 2181446. 2007년 5월 20일에 확인함.
- ↑ Massmind: "The read–modify–write problem"
- ↑ “Basic RAID Organizations”. 《umass.edu》. 2021년 2월 24일에 원본 문서에서 보존된 문서. 2013년 10월 4일에 확인함.