Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 코드트리
- TiL
- userprog
- 나만무
- corou
- 크래프톤정글
- 핀토스
- pintos
- 정보처리기사
- Flutter
- HTML
- 오블완
- 리액트
- defee
- JavaScript
- Vue.js
- 큐
- 4기
- CSS
- 사이드프로젝트
- 알고리즘
- 시스템콜
- 모션비트
- 자바스크립트
- 소켓
- 크래프톤 정글
- 백준
- Java
- 자바
- 스택
Archives
- Today
- Total
미새문지
크래프톤 정글 week08, day65 - Atomic Operation, Rax Register, Cache 본문
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
'크래프톤 정글 > TIL' 카테고리의 다른 글
크래프톤 정글 week09, day67 - 시스템 콜 함수 간단정리 (1) | 2024.03.15 |
---|---|
크래프톤 정글 week08, day66 - userprog 뜯기 (1) | 2024.03.14 |
크래프톤 정글 week08, day64 - "User Mode vs Kernel Mode", "Register vs Memory", User Stack, 잔디심기 (1) | 2024.03.11 |
크래프톤 정글 week08, day63 - 잔디심기, pintOS - Project1 result (1) | 2024.03.11 |
크래프톤 정글 week08, day62 - 잔디심기, mlfqs-load-avg까지 구현 (1) | 2024.03.10 |