![[컴퓨터 구조] 메인 메모리(RAM) 파헤치기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdu2dSy%2FbtsLKFPP47O%2FC7bgvdY9LEYOyzfSBJ6701%2Fimg.png)
RAM(Random Access Memory)
CPU는 보조기억장치(하드 디스크, SSD 등)에 저장된 프로그램을 곧장 가져와 실행할 수 없기 때문에 실행하려는 프로그램을 보조기억장치에서 RAM으로 복사해 가져와야 합니다. 그렇기 때문에 RAM의 크기는 컴퓨터 성능에 큰 영향을 끼칩니다. RAM의 크기가 작다면 CPU가 보조기억장치에서 데이터를 자주 가져와야 하므로 성능 저하가 발생할 수 있습니다.
RAM은 이름에서 알 수 있듯이 임의 접근 방식(Random Access)으로, 저장된 요소에 순차적으로 접근할 필요 없이 임의의 위치에 곧장 접근이 가능합니다. 즉, 메모리를 위에서부터 아래로 순서대로 데이터를 접근하는 것이 아닌 주소를 통해 직접적으로 접근합니다.
RAM은 휘발성 저장장치로, 컴퓨터 전원이 꺼지면 메모리에 저장되어 있는 정보가 모두 삭제됩니다.
DRAM(Dynamic RAM)
- 특성: 시간이 지나면 저장된 데이터가 점차 사라지는 RAM이다.
- 장점: 소비 전력이 낮고, 저렴하며, 집적도가 높아 대용량 메모리를 설계하기 용이하다.
- 단점: 데이터의 소멸을 막기 위해 일정 주기로 데이터를 다시 저장해야 한다.
SRAM(Static RAM)
- 특성: 시간이 지나도 저장된 데이터가 사라지지 않는 RAM으로, 그렇다고 비휘발성은 아니다. 전원이 공급되지 않으면 저장된 내용이 소실된다. 주로 캐시 메모리 등에서 사용된다.
- 장점: DRAM에 비해 속도가 빠르다.
- 단점: 소비 전력이 크고, 가격이 비싼며, 집적도가 낮아 대용량으로 만들기 어렵다.
SDRAM(Synchronous Dynamic RAM)
- 특성: 클럭 신호와 동기화된 형태의 DRAM으로, 클럭에 맞춰 작동하며 CPU와 정보를 주고받을 수 있다.
DDR SDRAM(Double Data Rate SDRAM)
- 특성: 대역폭을 넓혀 속도를 빠르게 만든 SDRAM으로, 한 클럭당 두 번씩 CPU와 데이터를 주고받을 수 있다.
- 장점: SDRAM보다 전송 속도가 두 배 가량 빠르다.
DDR2 SDRAM
- 특성: DDR SDRAM보다 대역폭이 두 배 넓은 SDRAM이다.
빅 엔디안과 리틀 엔디안
메인 메모리는 대부분 데이터를 바이트 단위로 저장하고 관리합니다.
하지만 메모리는 데이터를 CPU로부터 바이트 단위로 받아들이지 않고, 일반적으로 4바이트 또는 8바이트인 워드 단위로 받아들입니다. 왜냐? 워드가 CPU가 한 번에 다루는 데이터의 단위이기 때문입니다.
그렇기 때문에 여러 바이트로 구성된 데이터는 여러 주소에 걸쳐서 저장됩니다.
가령 한 주소에 1바이트씩 저장하는 메모리에서는 4바이트의 데이터를 4개의 주소에 나누어 저장합니다.
ex) 16진수 데이터 0A0B0C0D는 0A, 0B, 0C, 0D로 나누어 4개의 주소에 저장됩니다.
빅 엔디안과 리틀 엔디안은 메인 메모리에 바이트를 저장하는 순서에 따라 나뉩니다.
빅 엔디안(Big Endian)
낮은 번지의 주소에 상위 바이트부터 저장하는 방식입니다.
0A0B0C0D에서 가장 상위 바이트는 0A입니다. 그리고 해당 그림에서 메모리의 가장 낮은 번지는 a입니다.
따라서 메모리의 가장 낮은 번지(a)에 가장 상위 바이트(0A)를 저장하고, 그다음 주소(a+1)에 0B를 저장하는 식으로 진행됩니다.
리틀 엔디안(Little Endian)
낮은 번지의 주소에 하위 바이트부터 저장하는 방식입니다.
0A0B0C0D에서 가장 하위 바이트는 0D이므로, 메모리의 가장 낮은 번지(a)에 가장 하위 바이트(0D)를 저장하고, 그다음 주소(a+1)에 0C를 저장하는 식으로 진행됩니다.
빅 엔디안은 낮은 주소에 큰 상위 바이트를 저장합니다. 이는 사람이 숫자를 읽고 쓰는 방법과 유사합니다.
그렇기 때문에 메모리 값을 직접 읽거나 디버깅할 때 편리하다는 장점이 있습니다.
반면, 리틀 엔디안은 하위 바이트부터 먼저 읽기 때문에 메모리 값을 직접 읽고 쓰기에는 불편하지만 수치 계산이 편리합니다. 사람이 123 + 678을 계산할 때 일의 자릿수부터 계산하는 것처럼, 컴퓨터도 가장 작은 값부터 시작하여 저장된 데이터의 시작점에서 수치를 계산해 나갑니다
엔디안 확인하기
본인 컴퓨터의 엔디안을 확인하는 코드는 아래와 같습니다.
저는 C언어를 사용해서 확인했습니다.
#include <stdio.h>
void main() {
int hexNum = 0x0A0B0C0D;
if (*((char*)&hexNum) == 0x0D) {
printf("little endian system\n");
}
else {
printf("big endian system\n");
}
}
제 노트북이 빅 엔디안이라면 hexNum의 시작 주소에는 0x0A가 저장될 것입니다.
반면, 리틀 엔디안이라면 hexNum의 시작 주소에는 0x0D가 저장됩니다.
코드로 확인한 결과 제 노트북은 리틀 엔디안 시스템이며, ARM의 CPU를 사용하고 있습니다.
ARM은 빅 엔디안과 리틀 엔디안 모두 지원하지만, 디폴트 값으로 리틀 엔디안 방식을 사용한다고 합니다.
그러면 제 노트북은 결국은 바이 엔디안이네요..
참고
강민철. 『 이것이 취업을 위한 컴퓨터 과학이다 』
[컴퓨터 구조] Memory
컴퓨터의 역사에 관한 레포트를 쓰기 위해 학교 도서관에 왔다고 가정해봅니다.많은 책들을 뽑아 책상에 앉아 자료 조사를 하는 도중, 컴퓨터에 대한 많은 내용을 찾았지만, 그 중 EDSAC에 대한
velog.io
[Embedded] Endian 구조
엔디안(Endian) 이란 엔디안이란 컴퓨터의 메모리와 같이 데이터를 저장하는 공간에서 여러 개의 연속된 ...
blog.naver.com
'컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 캐시 메모리 파헤치기 (0) | 2025.01.12 |
---|---|
[컴퓨터 구조] CPU 파헤치기 (1) | 2025.01.10 |
느리더라도 단단하게 성장하고자 합니다!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!