본문 바로가기

Computer Science/Computer Architecture

[Computer Architecture] 메모리

+ 한국항공대학교 길현영 교수님의 컴퓨터구조론 과목 내용을 정리한 글입니다.

주 기억장치

(CPU가) 실행할 프로그램과 데이터를 저장하는 기억장치
- CPU 가까이 위치하여, CPU가 처리할 프로그램과 데이터를 일시적으로 저장한다.
- 전원 공급이 중단되면 기억된 내용이 지워진다. (Volatile Memory)
 
명령어 집합(ISA)에 의해 정의된 메모리이다. (작업장이자 저장소)
- 프로그래머에게 보이는 시스템의 속성 중 하나로서, 조작할 수 있는 명령어가 존재한다.
ex) load, store
 
주로 RAM (Random Access Memory)를 의미한다.
- 저장된 데이터를 임의의 순서에 따라 접근할 수 있다. (차례로 접근하지 않고 주소를 통해 바로 엑세스)
- 주로 DRAM (Dynamic Ram)을 사용한다.

메모리 주소 레지스터(MAR): 메모리와 주소 버스인터페이스 역할을 하는 버퍼
메모리 버퍼 레지스터(MBR): 메모리와 데이터 버스인터페이스 역할을 하는 버퍼
 
R/W: 1bit 제어신호
- load 명령어: 메모리를 읽기 위해 1을 전송한다.
- store 명령어: 메모리에 쓰기 위해 0을 전송한다.


주기억장치 예제

< 가정 >
1. 워드 크기는 4bit이고, 메모리는 8개의 워드로 구성되어있다. (3bit로 메모리 주소 표현)
2. 메모리 3번지의 초기 값은 0011, 레지스터 1번지와 2번지의 초기 값은 각각 0001, 0010이다.
(0번지부터 시작한다.)
3. 편의상 적재 및 저장을 위하여 레지스터 r의 내용과 즉칫값 (2를 곱하지 않음)을 더한 값을 메모리 주소로 사용한다. (즉, 메모리 주소 = r + 즉치값)
- 메모리의 데이터 크기와 레지스터의 데이터 크기가 같기 때문이다.

< 예제 1. store >

sw r1, #1(r2) 
=> M[r2 + 1] <- r1
 
1. MAR에서 r2에 저장된 데이터 값 0010과 즉칫값 1을 더한 값 0011을 메모리 주소 단위인 3bit 011로 주소 버스를 통해 메모리로 전달한다.
 
2. MBR에서 r1에 저장된 데이터 값 0001을 워드 크기인 4bit로 데이터 버스를 통해 메모리로 전달한다.
 
3. 메모리에 쓰기 위해 1bit R/W 제어신호 0을 전달한다.
 
4. 메모리의 011 주소 (3번지)에 0001을 저장한다.

+ MAR은 메모리 주소인 3bit를, MBR에는 워드 크기인 4bit를 전송한다.

< 예제 2. load >

lw r3, #1(r2) 
=> r3 <- M[r2 + 1]
 
1. MAR에서 r2에 저장된 데이터 값 0010과 즉칫값 1을 더한 값 0011을 메모리 주소 단위인 3bit 011로 주소 버스를 통해 메모리로 전달한다.
 
2. CPU에서 메모리를 읽기 위해 1bit R/W 제어신호 1을 전달한다.
 
3. 메모리에서 MBR에 011 주소 (3번지)에 저장된 데이터 값 0001을 워드 크기인 4bit로 데이터 버스를 통해 전달한다.
 
4. r3에 0001을 저장한다.


주 기억장치의 성능과 특징

< 성능 >

1. 대역폭: 사이클 혹은 단위 시간당 전송된 바이트의 수
 
2. 지연시간: 데이터를 얻을 때까지 걸리는 시간
- 메모리 접근 시간: 데이터 요청부터 그 데이터의 도착까지 걸리는 시간
- 메모리 사이클 시간: 연속된 2개의 데이터를 요청한 시간 간격

흔히 메모리 구매의 주요 기준은 주로 저장하는 데이터의 양 (크기)
그러나, 실제 성능은 엑세스 시간이다.

CPU 처리 속도에 비해 메모리 접근 시간은 매우 길다.
+ CPU 클럭 속도가 빠르더에라도, 다른 하드웨어 부품과 데이터 통신 속도에 따라 달라질 수 있다.

< 특징 >

1. 접근 형식: 저장된 데이터의 접근 순서
- 순차 접근: 처음부터 순서대로 접근한다. (ex 자기 테이프)
- 무작위 접근: 데이터의 저장 위치를 직접 탐색한다. (ex RAM)
 
2. 가변성: 저장된 데이터를 변경할 수 있는지 여부를 나타내는 속성이다.
- 읽기 전용 (ex ROM)
- 읽기 쓰기용
 
3. 휘발성: 전원을 차단했을 때 저장된 데이터가 증발하는지 여부에 대한 속성
- 휘발성 (ex RAM)
- 비휘발성 (ex ROM)
 
ROM: 컴퓨터의 기본 구성에 대한 정보나 초기화 루틴, 부팅 프로그램 등을 저장하며, 기본적으로는 한번 기록하고 나면 데이터를 변경할 수 없다.


메모리의 계층 구조

= 속도와 용량이 서로 다른 다수의 계층으로 구성된 메모리 구조
 
- 일반적으로 속도가 빠른 메모리는 고가이고, 느린 메모리는 저렴하다.
- 소용량의 빠른 메모리를 CPU에 가깝게 배치하고, 느리지만 대용량의 메모리를 CPU에 멀리 배치한 메모리 계층 구조가 저렴하고 효율적이다.
- 인접한 두 계층 사이에서만 데이터 전송이 발생한다.
 
+ 지금까지 레지스터와 메인메모리간 데이터 전송으로 가정했지만, 캐시 메모리와 데이터를 주고 받는다.
 

레지스터

=> CPU의 구성요소로 1KB 이하의 소용량의 데이터를 저장할 수 있다.
- 매우 중요하다 (이전 성능 비교에서 분석)

캐시 메모리

CPU와 메모리의 속도 차를 줄이기 위해 사용한다.
 
여러 단계별로 CPU 칩 내에 내장되거나, 메인보드에 탑재된다.
- 메인 메모리와 레지스터 사이에 여러 단계의 캐시 메모리를 두면 성능이 더 증가한다.
(최근에는 3단계를 사용하고, 1단계는 CPU 내에 존재하는 경우가 많다.)
 
=> 메인 메모리와 레지스터 사이에서 적은 비용으로 크고 빠른 메모리를 갖는 듯한 환상(성능)을 제공한다. 

메인 메모리

주로 DRAM을 사용하며, 메인보드의 메모리 슬롯에 탑재한다.
- 최근 PC들은 4 ~ 16G정도를 사용한다.

보조기억장치

속도는 느리지만 비용이 저렴하여 많은 양의 데이터를 저장할 수 있다. (영구 저장)
ex) HDD

접근 시간의 차이가 큰 점을 주목!

지역성 원리 (locality)

- 프로그램은 사용가능한 주소 공간의 일부에서 일정 시간동안 그룹 형태로 참조되는 경향이 있다.
(일반적으로 프로그램의 10%미만 실행 시간의 90% 이상을 차지한다.)
 
1. 시간적 지역성
=> 최근 참조된 명령어/데이터가 가까운 미래에 다시 참조되는 경향이 있다.
ex) 반복문, 스택형 데이터 참조 등
 
2. 공간적 지역성
=> 최근 참조된 명령어/데이터의 이웃 부분이 가까운 미래에 참조되는 경향이 있다. 
ex) 순차적으로 실행되는 프로그램
 
=> 따라서 자주 사용하는 (10%) 프로그램을 CPU 가까운 곳에 두고 사용하면 성능이 향상된다.

메모리 계층 구조 동작 원리

1. 원하는 데이터가 현재 계층 기억장치에 있다면 (Hit), 즉시 엑세스한다.
 
2. 없다면 (Miss), 다음 계층의 기억장치로부터 데이터를 읽어서 이전 기억장치에 적재한 후 사용한다.
 

 
하위 계층의 속도가 느리므로 한 번에 더 많은 데이터를 전송한다.
- 워드 - 블럭 - 페이지
(주변 데이터를 사용할 확률이 높으므로 주변 데이터와 함께 전송 - 공간적 Locality)
 
+ 복사본을 적재한다.
(보조기억장치의 일부-> 메인 메모리의 일부 -> 캐시 메모리의 일부 -> CPU(레지스터)) 
 
< 가정 >
1. 필요한 정보가 첫 번째 계층 메모리에 있을 확률 (Hit) = 50%
- 필요한 정보가 첫 번째 계층 메모리에 없을 확률 (Miss) = 50%
 
2. 첫 번째 계층 메모리 엑세스 시간 = 10ns
 
3. 두 번째 계층 메모리 엑세스 시간 = 100ns
 
=> 평균 메모리 엑세스 시간 = (0.5 × 10ns) + (0.5 × 100ns) = 55ns
(첫 번째 계층 메모리가 없다면? - 100ns)