실행 중인 프로그램 → 메모리에 저장 → CPU는 메모리에 저장된 정보를 읽고, 쓰고, 실행
RAM
•
휘발성 저장장치 : 전원을 끄면 저장하고 있던 데이터 & 명령어가 날아감
•
CPU가 어떠한 프로그램을 실행하고자 한다면, 보조기억장치(보관할 프로그램을 저장하는 HW)에서 메모리로 복사 필요
임의 접근(Random Access)
직접 접근(Direct Access) 라고도 함
•
저장된 요소에 순차적으로 접근할 필요 없이 임의 위치에 곧장 접근 가능한 방식
◦
1번지든 1000번지든 접근하고자 하는 데이터에 접근하는 시간이 동일
RAM 종류
1) DRAM(Dynamic RAM)
시간이 지나면 저장된 데이터가 점차 사라지는 RAM
•
D(Dynamic) : 저장된 데이터가 동적으로 변하는(사라지는) 특성
→ 데이터 소멸을 막기 위해 일정 주기로 데이터를 재활성화(다시 저장) 필요
•
소비 전력이 낮고, 저렴하고, 집적도가 높음 → 메모리를 대용량으로 설계하기 용이
2) SRAM(Static RAM)
시간이 지나도 저장된 데이터가 사라지지 않는 RAM
•
S(Static) : 저장된 데이터가 변하지 않는 특성
◦
다만 이 말이 비휘발성 저장장치라는 뜻은 아님
•
속도 빠르고, 소비 전력이 크고, 가격이 비싸고, 집적도가 낮음 → 캐시 메모리 등에서 사용
(대용량으로 만들 필요는 없지만 속도는 빨라야 하는 저장장치)
3) SDRAM(Synchronous Dynamic RAM)
클럭 신호와 동기화된, 보다 발전된 형태의 DRAM
•
클럭 신호와의 동기화 = 클럭 타이밍에 맞춰 CPU와 정보 주고 받기 가능
즉, 클럭에 맞춰 작동하며 CPU와 정보 주고 받기가 가능한 DRAM
4) DDR SDRAM(Double Data Rate SDRAM)
대역폭을 넓혀 속도를 빠르게 만든 SDRAM
•
대역폭 : 데이터를 주고받을 길의 너비
•
한 클럭당 SDRAM보다 전송 속도가 두 배 가량 빠름
메모리에 바이트를 밀어 넣는 순서 - 빅 엔디안 & 리틀 엔디안
•
메모리는 대부분 데이터를 바이트 단위로 저장 및 관리. 그러나 CPU로부터 받는 데이터는 일반적으로 4바이트(32비트), 8바이트(64비트)인 워드 단위 → 여러 바이트로 구성된 데이터를 받아 여러 주소에 걸쳐 저장
예시 1) 16진수 1A2B3C4D(4바이트)
•
1A, 2B, 3C, 4D로 나눠 4개의 주소에 저장
예시 2) 16진수 1A2B3C4D5A6B7C8D(8바이트)
•
1A, 2B, 3C, 4D, 5A, 6B, 7C, 8D로 나눠 8개의 주소에 저장
•
메모리에 바이트를 저장하는 방식에는, 연속해서 저장해야 하는 바이트를 어떤 순서로 저장하는지에 따라 빅 엔디안과 리틀 엔디안으로 나뉨
빅 엔디안
낮은 번지 주소에 상위 바이트부터 저장하는 방식
•
상위 바이트 : 가장 큰 값
◦
10진수 123 → 상위 바이트는 1(100이므로)
◦
16진수 1A2B3C4D → 상위 바이트는 1A(최상위 8비트이므로)
리틀 엔디안
낮은 번지 주소에 하위 바이트부터 저장하는 방식
•
하위 바이트 : 가장 작은 값
◦
10진수 123 → 하위 바이트는 3
◦
16진수 1A2B3C4D → 하위 바이트는 4D
각 장단점
빅 엔디안
•
일상적으로 숫자 체계를 읽고 쓰는 순서와 동일 → 메모리 값을 읽거나(특히 디버깅시) 할 때 편리
•
수치 계산이 어려움
리틀 엔디안
•
수치 계산이 편리
◦
덧셈을 할 때, 가장 작은 값(하위 바이트)부터 수치를 계산해나가고 자리올림을 하기 때문
•
메모리 값을 사람이 직접 읽고 쓰기는 불편
캐시 메모리
CPU가 프로그램을 실행하다보면 빈번히 메모리에 접근해야하는데 CPU는 연산을 많이 하고 메모리 접근 횟수를 줄여야 CPU의 빠른 연산 속도를 최대한 뽑아먹을 수 있기에, 캐시 메모리(저장장치)를 이용해 보완
•
캐시 메모리 : CPU의 연산 속도와 메모리 접근 속도의 차이를 줄이기 위해 탄생한 저장장치
◦
CPU와 메모리 사이에 위치한 SRAM 기반의 저장장치
(DRAM[= RAM]의 캐시 저장장치)
◦
메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리에 가져와 활용
여러 종류의 캐시 메모리
단일 코어 프로세서
•
코어 내부 위치
◦
L1 캐시
◦
L2 캐시
•
코어 외부 위치
◦
L3 캐시
캐시 메모리 크기 : L1 < L2 < L3
캐시 메모리 속도 : L3 < L2 < L1
멀티 코어 프로세서
•
L1, L2 캐시 메모리 : 코어마다 고유한 캐시 메모리로 할당
•
L3 캐시 메모리 : 여러 코어가 공유하는 형태
분리형 캐시
L1 캐시 메모리에서,
•
L1I 캐시 : 명령어만 저장
•
L1D 캐시 : 데이터만 저장
캐시 히트 & 캐시 미스
캐시 메모리는 CPU가 사용할 법한 것들을 저장
•
캐시 히트 : 캐시 메모리가 예측하여 저장한 데이터가 CPU에 의해 실제 사용되는 경우
•
캐시 미스 : 캐시 메모리에 저장했지만 틀린 예측으로 인해 CPU가 메모리로부터 필요한 데이터를 직접 가져와야 하는 경우
참조 지역성의 원리
CPU가 사용할 법한 데이터를 예측하는 방법
CPU가 메모리에 접근할 때 보이는 다음과 같은 주된 경향을 의미
•
시간 지역성 : CPU는 최근 접근했던 메모리 공간에 다시 접근하는 경향 존재
◦
EX) 변수 : 변수에 저장된 값은 프로그램이 실행되는 동안 여러 번 사용
•
공간 지역성 : CPU는 접근한 메모리 공간 근처에 접근하는 경향 존재
◦
EX) 배열 : 2차원 배열에서 열부터 순회하지말고 행부터 순회해야 실행 속도가 빠름
캐시 메모리의 쓰기 정책과 일관성
캐시 메모리에 데이터를 쓰는 경우
•
CPU가 캐시 메모리에 데이터를 쓰는 경우, 캐시 메모리에 새롭게 쓰여진 데이터와 메모리 상의 데이터가 일관성을 유지할 필요가 있음
쓰기 방식 1) 즉시 쓰기
write-through
캐시 메모리와 메모리에 동시에 쓰는 방법
•
메모리를 항상 최신 상태로 유지 → 캐시 메모리와 메모리 간 일관성이 깨지는 상황 방지
•
데이터를 쓸 때마다 메모리 참조 → 버스 사용 시간과 쓰기 시간 증가
쓰기 방식2) 지연 쓰기
write-back
캐시 메모리에만 써 두었다가 추후 수정된 데이터를 한 번에 메모리에 반영하는 방법
•
속도는 더 빠름
•
메모리와 캐시 메모리 간 일관성이 깨질 위험 존재
캐시 메모리
메모리 간 불일치도 존재하지만, 다른 코어가 사용하는 캐시 메모리와의 불일치도 발생 가능
강조 내용
캐시 메모리를 사용한다(캐싱을 한다)
•
데이터 접근에 있어 어느 정도의 빠른 성능 보장
•
데이터 일관성 유지를 위한 책임이 따르는 방식
•
자주 사용할 법한 대상을 가까이 위치시킴으로써 성능 향상을 꾀함
(네트워크나 다른 파트에서의 캐시 개념도 본질적으로 동일)
•
캐싱을 할 때는, 언제나 캐시된 데이터와 원본 데이터 간 불일치와 데이터 일관성을 고려할 필요 존재

