크래프톤 정글/TIL

크래프톤 정글 week08, day65 - Atomic Operation, Rax Register, Cache

문미새 2024. 3. 12. 23:53
728x90

Atomic Operation(아토믹 오퍼레이션)

  • 한 번에 완전히 수행되며, 중간에 다른 스레드나 프로세스에 의해 방해 받지 않는 연산을 말한다.
  • 아토믹 오퍼레이션은 멀티스레딩 환경에서 공유 자원에 대한 접근을 동기화할 때 중요한 역할을 한다.

중요성

  • 멀티스레딩 환경에서 여러 스레드가 동시에 같은 데이터에 접근하려 할 때, 데이터의 일관성과 무결성을 유지하기 위해 동기화 메커니즘이 필요하다.
  • 아토믹 오퍼레이션은 이러한 동기화를 보장하는 가장 기본적인 단위이며, 아토믹 오퍼레이션이 아닌 경우, 한 스레드가 작업을 수행하는 도중 다른 스레드가 개입할 수 있기 때문에 예상치 못한 결과를 초래할 수 있다.

예시

  • 변수의 증가 및 감소
    • i++나 i— 같은 연산은 간단해 보이지만, 실제론 읽기, 수정, 쓰기 세 단계로 이루어져 있어 아토믹하진 않다.
    • 하지만 많은 프로그래밍 언어나 라이브러리에서 이러한 연산을 아토믹하게 만들기 위한 특별한 메커니즘을 제공한다.
  • Lock(잠금) 획득 및 해제
    • 뮤텍스세마포어 같은 동기화 메커니즘의 락을 획득하거나 해제하는 작업은 아토믹하게 수행되어야 한다.
  • CAS(Compare-And-Swap)
    • CAS는 기존 값이 예상 값과 일치할 때만 새로운 값으로 업데이트하는 아토믹 오퍼레이션이며, 이 방법은 lock-free 프로그래밍에서 널리 사용된다.

고수준 프로그래밍 언어나 라이브러리에서는 이러한 하드웨어 기능을 추상화하여 쉽게 사용할 수 있도록 해준다.

예시로 Java의 java.util.concurrent.atomic 패키지는 다양한 아토믹 변수를 제공한다.


Rax Register

  • x86-64 아키텍쳐(혹은 AMD64 아키텍쳐)에서 사용되는 레지스터 중 하나이다.
  • x86-64 아키텍쳐는 64비트 확장 버전의 오리지널 x86 아키텍쳐로, 더 많은 메모리와 더 큰 데이터 처리 능력을 제공한다.
  • RAX 레지스터는 이 아키텍쳐에서 매우 중요한 역할을 하며, 다양한 용도로 사용된다.

Rax Register의 역할

  • 누산기(Accumulator) 사용
    • RAX는 전통적으로 누산기로 사용되며, 산술 연산, 논리 연산, 데이터 이동 명령어의 주 대상이다
    • 예시로 덧셈이나 곱셈 연산의 결과는 종종 RAX에 저장된다.
  • 함수의 반환 값
    • x86-64 아키텍쳐에서 함수가 반환하는 값은 RAX 레지스터에 저장되어 호출자에게 전달된다. 따라서, 함수의 결과를 처리할 때 RAX의 값을 확인해야 한다.
  • 시스템 호출
    • 운영 체제의 시스템 호출을 사용할 때, RAX는 요청된 시스템 호출의 번호를 저장하는데 사용된다.
    • 호출이 완료된 후, RAX는 시스템 호출의 결과를 담게 된다.

RAX 레지스터의 구조

  • RAX(64비트) : 전체 레지스터
  • EAX(32비트) : RAX의 하위 32비트
  • AX(16비트) : RAX의 하위 16비트
  • AH(상위 8비트) 및 AL(하위 8비트) : AX의 상위 및 하위 8비트

이러한 구조는 하위 호환성을 유지하면서 더 큰 데이터를 처리할 수 있다.

예를 들어, 오래된 32비트 기반 코드가 EAX를 사용해 작업하는 경우, 해당 코드는 64비트 시스템에서도 문제 없이 실행될 수 있다.


Cache(캐시)

  • 캐시(Cache) 메모리는 컴퓨터의 중앙 처리 장치(CPU)와 주 메모리 사이에 위치하여 데이터 접근 시간을 줄이고 전체 시스템의 성능을 향상시키는데 사용되는 고속의 임시 데이터 저장소이다.
  • 이는 CPU가 빠르게 데이터에 접근할 수 있도록 도와주며, 메모리 계층 구조에서 중요한 역할을 한다.

캐시의 작동 원리

  • 캐시 메모리는 자주 사용되거나 최근에 사용된 데이터의 복사본을 저장하며, CPU가 데이터를 요청할 때, 캐시가 먼저 확인되어 필요한 데이터가 존재하는지 검사한다.
    • 이 과정을 '캐시 히트(Cache Hit)'라고 하며, 데이터가 캐시에 존재하면 바로 CPU에 전달된다.
    • 반대로, 데이터가 캐시에 없을 경우 '캐시 미스(Cache Miss)'라고 하며, 데이터는 주 메모리에서 가져와야 하고 이후 해당 데이터는 캐시에 저장된다.

캐시의 종류

  • L1 캐시(1차 캐시): CPU 코어 내부에 위치하며, 가장 빠르지만 용량이 작다.
  • L2 캐시(2차 캐시): L1보다는 느리고 용량이 크며, CPU 코어에 가깝게 위치하거나 코어 내부에 있다.
  • L3 캐시(3차 캐시): L1, L2에 비해 느리고 용량이 크며, 여러 CPU 코어가 공유할 수 있다.

캐시의 주요 특징

  • 속도: 캐시는 매우 빠른 속도로 데이터에 접근할 수 있다.
  • 용량: 일반적으로 캐시는 제한된 용량을 가지고 있으며, 이는 캐시 관리 정책에 따라 효율적으로 사용된다.
  • 임시성: 캐시에 저장된 데이터는 일시적이며, 시스템이 꺼지면 데이터도 사라진다.
  • 관리 정책: 캐시는 특정 알고리즘(예: LRU - Least Recently Used)에 따라 관리되어, 효율적으로 데이터를 저장하고 교체한다.

캐시의 중요성

  • 캐시는 시스템의 성능 향상에 크게 기여하는데, CPU와 주 메모리 사이의 속도 차이를 줄여주며, 이는 데이터 처리 속도를 빠르게 하여 프로그램의 실행 속도를 향상시킨다.
    • 특히, 고성능을 요구하는 응용 프로그램이나 대규모 데이터를 처리하는 시스템에서 캐시의 역할은 매우 중요하다.
  • 캐시는 메모리 계층 구조에서 중요한 부분을 차지하며, 컴퓨터 아키텍처 설계에서 중요한 고려 사항 중 하나이다.

 

학습 시간 : 10 ~ 25시

728x90