최종 수정 : 2025.05.08
메모리
실행중인 프로그램은 메모리에 저장되며, CPU는 메모리에 저장된 정보를 읽고, 쓰고, 실행한다.
■ RAM
- 휘발성 저장장치(volatile memory)
- 전원을 끄면 저장하고 있던 데이터와 명령어가 날아간다. - CPU가 실행할 대상을 저장하는 부품
- CPU는 보조기억장치에 저장된 프로그램을 곧장 가져와 실행할 수 없다. 따라서, 어떤 프로그램을 실행하기 위해서는 프로그램을 보관하고 있는 보조기억장치에서 메모리로 복사해 와야 한다. 그렇기에 RAM의 용량은 컴퓨터에 큰 영향을 끼친다.
* 용량이 작으면, 실행할 프로그램을 가져오는 일이 잦아져 실행 시간이 길어진다.
* 용량이 크면, 많은 데이터를 가져와 미리 RAM에 저장할 수 있기에 많은 프로그램을 동시에 실행하는 데 유리하다. - 임의 접근 메모리(Random Aceess Memory)의 약자
- 임의 접근(random access) : 저장된 요소에 순차적으로 접근할 필요 없이 임의의 위치에 곧장 접근 가능한 방식이므로 직접 접근(direct access)라고도 부른다.
- 그렇기에 데이터에 접근하는 시간이 동일하다.
순차 접근(sequential access)
- 특정 위치에 저장된 요소에 접근하기 위해 처음부터 순차적으로 접근하는 방식
- 따라서 어떤 위치에 접근하느냐에 따라 데이터에 접근하는 시간이 달라진다.
■ RAM의 종류
1) DRAM : Dynamic RAM
- Dynamic(동적인)은 말 그대로 저장된 데이터가 동적으로 변하는(사라지는) 특성을 의미한다.
- 즉, 시간이 지나면 저장된 데이터가 점차 사라진다.
- 그렇기에, 데이터의 소멸을 막기 위해 일정 주기로 데이터를 재활성화(다시 저장)해야 한다.
- 이런 단점에도 불구하고 DRAM을 메모리로 사용한다.
- 비교적 소비 전력이 낮고, 저렴하며, 집적도가 높아 메모리를 대용량으로 설계하기에 용이하기 때문이다.
2) SRAM : Static RAM
- Stati(정적인)은 저장된 데이터가 변하지 않는 RAM을 의미한다.
- 즉, 시간이 지나도 저장된 데이터가 사라지지 않는 RAM이다.
- 속도는 빠르지만, 소비 전력이 크고 가격도 비싸며 집적도가 낮다.
- 때문에, 대용량으로 만들 필요는 없지만 속도가 빨라야 하는 저장장치 등에서 사용된다.
ex). 캐시 메모리 등
3) SDRAM : Synchronous Dynamic RAM
- 클럭 신호와 동기화된, 보다 발전된 형태의 DRAM
- 클럭 타이밍에 맞춰 CPU와 정보를 주고받을 수 있다.
- 다시 말해, 클럭에 맞춰 작동하며 CPU와 정보를 주고받을 수 있는 DRAM
4) DDR SDRAM : Double Data Rate SDRAM
- 대역폭을 넓혀 속도를 빠르게 만든 SDRAM
- 두 배의 대역폭으로 한 글럭당 두 번씩 CPU와 데이터를 주고받을 수 있다.
- 즉, SDRAM보다 전송 속도가 두 배 가량 빠르다.
대역폭(data rate)
- 데이터를 주고받을 길의 너비
■ 메모리에 바이트를 밀어 넣는 순서 - 빅 엔디안과 리틀 엔디안
메모르는 대부분 데이터를 바이트 단위로 저장하고 관리한다. 하지만 메모리는 데이터를 CPU로부터 바이트 단위로 받아들이지 않고, 일반적으로 4바이트, 혹은 32바이트인 워드 단위로 받아들인다. 그렇게 여러 바이트로 구성된 데이터를 받아들여 여러 주소에 걸쳐 저장한다. 다시 말해, 한 주소에 1바이트씩 저장하는 메모리는 4바이트(32bit)의 데이터를 4개의 주소에 저장하고, 8바이트(64bit)의 데이터를 8개의 주소에 저장한다.
메모리에 바이트를 어떤 순서로 저장하는지에 따라 빅 엔디안과 비틀 엔디안으로 나눌 수 있다.
- 빅 엔디안(big endian)
- 낮은 번지의 주소에 상위 바이트부터 저장하는 방식
- 일상적으로 숫자 체계를 읽고 쓰는 순서와 동일하기에 메모리 값을 직접 읽거나, 특히 디버깅할 때 편리 - 리틀 엔디안(little endian)
- 낮은 번지의 주소에 하위 바이트부터 저장하는 방식
- 메모리 값을 직접 읽고 쓰기는 불편하지만 수치 계산에 편리하다
컴퓨터 환경에 따라 빅 엔디안과 리틀 엔디안 중 하나로 결정되어 있는 경우도 있고,
바이 엔디안(bi-endian) 방식으로 둘 중 하나를 선택할 수 있도록 설계되어 있는 경우도 있다.
MSB와 LSB
1) MSB(Most Significant Bit) : 숫자의 크기에 가장 큰 영향을 미치는 유효 숫자, 가장 왼쪽에 있는 비트를 말한다.
2) LSB(Least Significant Bit) : 숫자의 크기에 가장 적은 영향을 미치는 유요 숫자, 가장 오른쪽에 있는 비트를 말한다.
■ 캐시 메모리 (cache memory)
- CPU와 메모리 사이에 위치한 SRAM 기반의 저장장치
- CPU의 연산 속도와 메모리 접근 속도의 차이를 줄이기 위해 탄생한 저장장치
- 즉, 메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가져와 활용한다.
- 코어와 가까운 순서대로 L1 캐시, L2 캐시 ... 으로 명명한다.
일반적으로 L1 캐시와 L2 캐시는 코어 내부에, L3 캐시는 코어 외부에 위치한다. - 크기는 L1 < L2 < L3의 순으로 크고, 속도는 L3 < L2 < L1의 순으로 빠르다.
- CPU가 메모리 내에 데이터가 필요하다고 판단하면, 우선 L1부터 순차적으로 검색한다.
- 멀티코어 프로세서의 경우 일반적으로 L1 캐시 메모리와 L2 캐시 메모리는 코어마다 고유한 캐시 메모리로 할당되고, L3 캐시는 여러 코어가 공유하는 형태로 구현된다.
분리형 캐시(split cache)
- 코어와 가장 가까운 L1 캐시 메모리는 명령어만 저장하는 L1l 캐시와 데이터만 저장하는 L1D 캐시로 구분
1) 캐시 히트와 캐시 미스
캐시 메모리는 메모리보다 용량이 작기 때문에, 메모리에 있는 모든 내용을 가져와 저장할 수 없다. 그렇기에 캐시 메모리는 CPU가 사용할 법한 것을 저장한다.
- 캐시 히트(cache hit) : 캐시 메모리가 예측하여 저장한 데이터가 CPU에 의해 실제로 사용되는 경우
- 캐시 미스(cache miss) : 틀린 예측으로 인해 CPU가 메모리로부터 필요한 데이터를 직접 가져와야 하는 경우
- 캐시 적중률(cache hit ratio) : 캐시가 히트되는 비율, 범용적으로 사용되는 컴퓨터의 캐시 적중률은 대략 85~95%이다.
2) 참조 지역성의 원리 (locality of reference, principle of locality)
CPU가 사용할 법한 데이터는 참조 지역성의 원리에 의해 결정된다.
- 시간 지역성(temporal locality)
- CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.
- ex) 변수 / 프로그램이 실행되는 동안 여러 번 사용된다. - 공간 지역성(spatial locality)
- CPU는 접근한 메모리 공간의 근처에 접근하려는 경향이 있다.
- ex) 배열
3) 캐시 메모리의 쓰기 정책과 일관성
CPU가 캐시 메모리에 데이터를 쓸 때는 캐시 메모리에 새롭게 쓰여진 데이터와 메모리 상의 데이터가 일관성을 유지해야 한다.
- 즉시 쓰기(write-through)
- 캐시 메모리와 메모리에 동시에 쓰는 방법
- 메모리를 항상 최신 상태로 유지하므로 일관성이 유지된다.
- 단점: 데이터를 쓸 때마다 메모리를 참조해야 하므로, 버스의 사용 시간과 쓰기 시간이 늘어난다.
- 데이터를 쓸 때마다 메모리를 참조한다면, 캐시 메모리를 둔 의미가 감소한다. - 지연 쓰기(write-back)
- 캐시 메모리에만 값을 써 두었다가 추후 수정된 데이터를 한 번에 메모리에 반영하는 방법
- 메모리 접근 횟수를 줄일 수 있지만
- 단점: 메모리와 캐시 메모리 간의 일관성이 깨질 수 있다.
- 또한, 다른 코어가 사용되는 캐시 메모리와의 불일치도 발생할 수 있다. 자칫, 각기 다른 코어가 서로 다른 데이터를 대상으로 작업할 수 있기 때문이다.
캐시 메모리를 사용한다는 것, 나아가 캐싱을 한다는 것은 데이터 접근에 있어 어느 정도의 빠른 성능은 보장할 수 있지만, 그와 동시에 데이터의 일관성을 유지하기 위한 책임 따르는 방식임을 기억해야 한다.
참고 도서
이것이 컴퓨터 과학이다.
'CS 공부 > 컴퓨터 구조' 카테고리의 다른 글
보조기억장치와 입출력장치 (0) | 2025.05.09 |
---|---|
CPU (0) | 2025.04.21 |
컴퓨터가 이해하는 정보 (0) | 2025.04.21 |
컴퓨터 구조의 큰 그림 (0) | 2025.04.17 |
클러스터 컴퓨터 (0) | 2025.01.10 |
댓글