포스트

원자적 연산

원자적 연산

지난 주 내내 핀토스 프로젝트를 하면서 종종 나왔던 용어가 있는데, 바로 Atomic Operation(원자적 연산 또는 원자 조작)이란 것이었다. 핀토스 깃북(일종의 설명서..?)은 영어로 되어있는데, 영어가 편해 어지간한 용어는 어원이나 문맥에 따라 유추가 가능했지만,
원자적 연산이라니…쪼갤 수 없는 연산? 무슨 뜻인지 감이 좀처럼 잡히지 않았다.

Atomos = “쪼갤 수 없는”

개념

IBM에서는 원자적 연산을 원자적 접근과 단일 워드 변수의 업데이트를 보장하는 일련의 인스트럭션이라고 정의한다.

원자적 연산은 외부에서는 하나의 조작으로 보이는 조작의 집합을 말한다. 이게 무슨 말이냐면, 일련의 인스트럭션들을 하나의 연산으로 보고,
이 하나의 연산의 결과를 어디에서 문제가 생겼는지 따지지 않고 단순하게 성공 또는 실패로 본다는 것이다.
이러한 특징 때문에 실행 도중에 문맥 교환 또한 일어나지 않는다.

  • 전부 또는 전무 : All or Nothing {: .prompt-info}
  • 원자적 연산은 연산이 실행되는 중 다른 쓰레드에 의해 방해받지 않는 것이 보장되어야 하며, 실행 결과 또한 항상 일관적이어야 한다. 가장 저수준에서 실행되며 더 이상 쪼개질 수 없다.

    원자적 연산은 비록 락을 사용할 때 처럼 복잡한 자료구조에 대한 접근을 보호할 수는 없지만,
    단일 워드에 대한 접근을 직렬화 하는데에 있어 효율적인 방법을 제공한다.
    또한, 원자적 연산은 병렬식 프로그래밍과 멀티쓰레딩 환경에서 데이터의 무결성을 보장한다. 이런 형태의 연산은 작업을 병렬식으로 처리하는 현대 운영체제의 뼈대이다.

    이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.