🧩 BE
home

메모리

Date
2025/06/11
Category
Computer Science
Tag
Computer Architecture
Detail

RAM

RAM(Random Access Memory) : 휘발성 저장장치
보조기억장치 : 비휘발성 저장장치
RAM의 용량이 커지면 보조기억장치에서 많은 데이터를 가져와 미리 저장해두고 쓸 수 있기에, RAM의 용량은 컴퓨터 성능과 밀접한 연관이 있다.
RAM은 이름 그대로 임의 접근(저장 요소에 바로 접근)이 가능하다. 반대 개념으로 순차 접근(순서대로 접근)이 있다.

1. DRAM (Dynamic RAM)

저장된 데이터가 동적으로 변하는(사라지는) RAM → 일정 주기로 다시 저장하는 과정 필요하다.
소비 전력이 낮고, 저렴하며, 집적도가 높아 메모리를 대용량으로 설계하기에 용이하다.

2. SRAM (Static RAM)

저장된 데이터가 변하지 않는 RAM → 시간이 지나도 저장된 데이터가 사라지지 않는다.
비휘발성은 X, 전원 없으면 데이터 날아가긴 한다.

3. SDRAM (Synchronous DRAM)

클럭 신호와 동기화된 DRAM. 클럭 타이밍에 맞춰 CPU와 정보를 주고받을 수 있다.

4. DDR SDRAM (Double Data Rate SDRAM)

대역폭을 넓혀 속도를 빠르게 만든 SDRAM. SDRAM보다 전송 속도가 두 배 가량 빠릅니다.

메모리에 바이트를 저장하는 순서

메모리는 데이터를 바이트 단위로 저장하고 관리한다. 하지만 데이터를 받을 때는 바이트 단위로 받아들이지 않고, 일반적으로 4바이트 or 8바이트인 워드 단위로 받아들인다. 그렇게 받아들인 데이터를 예시로 4바이트면 4개의 주소, 8바이트면 8개의 주소에 나눠서 저장한다.
빅 엔디안 (>) : 낮은 번지의 주소에 상위 바이트부터 저장
스몰 엔디안 (<) : 낮은 번지의 주소에 하위 바이트부터 저장
MSB (Most Significant Bit) : 숫자의 크기에 가장 큰 영향을 미치는 유효 숫자
LSB (Least Significant Bit) : 숫자의 크기에 가장 적은 영향을 미치는 유효 숫자
1A2B3C4D를 a+2부터 저장한다면
빅 엔디안은 a+2 : 1A, a+3 : 2B, a+4 : 3C, a+5 : 4D 로 MSB 부터 순차적으로 저장
스몰 엔디안은 a+2 : 4D, a+3 : 3C, a+4 : 2B, a+5 : 1A 로 LSB 부터 순차적으로 저장

캐시 메모리

CPU가 메모리에 접근하는 속도는 CPU가 레지스터에 접근하는 속도보다 느리기 때문에 CPU 연산 속도가 아무리 빨라도 메모리 접근 속도가 느리면 빠른 연산 속도는 아무 소용이 없다. 때문에 메모리에서 CPU가 사용할 일부 데이터를 미리 가져와 캐시 메모리로 활용한다.
코어와 가까운 순서
L1 → L2 → L3 (L1, L2는 코어 내부, L3는 코어 외부)
멀티 코어의 경우 L1, L2는 코어별 고유 캐시메모리, L3는 여러 코어가 공유하는 형태
크기
L1 < L2 < L3
속도
L1 > L2 > L3
L1 메모리는 명령어만을 저장하는 L1I 캐시데이터만을 저장하는 L1D 캐시로 구분되기도 하며, 이런 유형을 분리형 캐시라고 한다.

캐시 히트와 캐시 미스

캐시 히트 : 캐시 메모리가 예측하여 저장한 데이터가 CPU에 의해 실제로 사용되는 경우
캐시 미스 : 틀린 예측으로 CPU가 메모리에 접근해야 하는 경우
캐시 적중률 : 캐시 히트 비율
캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)

참조 지역성의 원리

CPU가 사용할 법한 데이터는 어떻게 예측하는가?
시간 지역성 : CPU는 최근 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.
변수 → 최근에 접근했던 (변수의)메모리 공간에 여러 번 접근해서 변수 사용
공간 지역성 : CPU는 접근한 메모리 공간의 근처에 접근하려는 경향이 있다.
배열 → 메모리 공간에 어떻게 접근할 것인가
for i in range(20000): for j in range(20000): matrix[i][j] = 1
Python
복사
for i in range(20000): for j in range(20000): matrix[j][i] = 1
Python
복사
첫 번째 코드는 순차적으로 순회하지만, 두 번째 코드는 행의 같은 열끼리 순회. → 공간 지역성을 고려하지 않음.

쓰기 정책

캐시 메모리의 데이터와 메모리 상의 데이터의 일관성이 중요!!
1.
1000번지 값을 300으로 바꾸기
2.
1000번지 값을 출력하기
기존에 1000번지 값이 200인 상태에서 위의 순서로 명령어를 수행하면, 메모리 상의 값은 300으로 바뀌더라도, 출력할 때는 캐시 메모리를 가져오기 때문에 200을 출력한다. → 일관성 깨짐
즉시 쓰기 : 캐시 메모리와 메모리에 동시에 쓰는 방법
쓸 때마다 메모리 참조해야 하기에 버스 사용 시간과 쓰기 시간이 늘어난다.
지연 쓰기 : 캐시 메모리에만 값을 써두고 추후 수정된 데이터를 한 번에 메모리에 반영
속도는 빠르지만, 일관성이 깨질 위험 존재
! 지연 쓰기는 어떻게 구현하는가?
1.
CPU가 어떤 데이터를 수정 → 캐시에만 기록함 (Dirty 상태 마킹)
2.
그 데이터 블록이 evict(퇴출)되거나, 특정 시점이 오면 → 메모리에 반영
이를 위해 캐시 블록마다 dirty bit(수정됨 표시 비트) 를 가진다.