개발자공부일기
RAM 본문
RAM의 정의와 역할
- CPU와 보조기억장치 간에는 큰 데이터 전송 속도 차이가 있고, 두 장치 사이에 운영 체제가 중재 역할을 하므로, CPU는 보조기억장치에 직접 접근할 수 없다. 이 문제를 해결하기 위해, 실행될 프로그램이나 데이터는 보조기억장치에서 먼저 주 메모리인 RAM으로 복사된다. RAM은 휘발성 메모리로, 전원이 꺼지면 그 내용이 사라지지만, CPU가 빠르게 접근하여 데이터를 읽고 쓸 수 있게 한다.
- RAM의 용량은 시스템 성능에 큰 영향을 미친다. RAM의 용량이 클수록 보조기억장치에서 더 많은 데이터를 미리 로드하여 저장할 수 있게 되는데, 이는 여러 프로그램을 동시에 실행하거나 대용량 데이터를 처리하는 데 매우 유리하다.
- CPU가 작업을 수행하기 위해 필요한 임시 데이터를 저장하고, 저장장치(HDD/SSD)보다 훨씬 빠른 속도로 데이터를 처리합니다.
- 프로그램 실행, 데이터 처리, 캐싱 등의 작업에 활용됩니다.
물리 주소와 논리 주소
컴퓨터 시스템은 메모리를 관리하고 프로그램들이 메모리를 효과적으로 사용할 수 있게 하는 여러 가지 방법을 갖고 있다. 이 중에 하나가 바로 물리 주소와 논리 주소를 사용하는 것이다. 이 두 주소체계는 메모리 관리의 핵심적인 부분을 차지하며, 운영체제와 하드웨어의 상호작용에 있어 중요한 역할을 한다.
물리 주소는 메모리 하드웨어에서의 실제적인 위치를 가리키는 값이다. 이 주소는 실제로 메모리 모듈에 있는 특정 셀을 가리키며, 이 셀에는 프로그램의 코드나 데이터가 저장될 수 있다. 이는 각 프로그램이 메모리의 어느 부분을 사용하고 있는지, 어떤 부분이 비어 있는지 등을 정확하게 알려주는 중요한 정보로 활용된다. 또한, 여러 프로그램이 메모리를 공유하는 멀티태스킹 환경에서는 프로그램 간의 메모리 충돌을 방지하기 위해 물리 주소를 통해 메모리를 분리하고 관리하는 역할도 한다.
논리 주소는 CPU가 프로그램에게 제공하는 주소다. 프로그램이 실행되면 운영체제는 프로그램에게 독립적인 메모리 공간을 제공하는데, 이 공간은 0번지부터 시작하는 논리 주소로 구성된다. 프로그램은 이 논리 주소를 통해 메모리에 접근하며, 이런 방식으로 각 프로그램은 자신만의 독립된 메모리 공간을 가질 수 있게 된다. 논리 주소를 사용함으로써 동일한 논리 주소를 여러 프로그램이 공유하면서도 각자의 메모리 공간을 유지할 수 있다.
하지만 CPU가 이해하는 주소가 논리 주소라고는 해도, CPU가 메모리와 상호작용하려면 논리 주소와 물리 주소 간의 변환이 필요하다. 즉, 논리 주소가 실제 메모리에 접근할 때 물리 주소로 변환되어야 한다. 이러한 과정은 CPU와 주소 버스 사이에 위치한 메모리 관리 장치(Memory Management Unit, MMU)에 의해 수행된다. MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환한다. 예를 들어 현재 베이스 레지스터에 1500이 저장되어 있고, CPU가 발생시킨 논리 주소가 100번지라면 이 논리 주소는 물리 주소 1600번지로 변환된다.
RAM의 구조
RAM은 다음과 같은 기본 구조로 이루어져 있습니다.
1) 셀(Cell)
- RAM은 셀(Cell)이라는 작은 단위들로 구성됩니다.
- 각 셀은 비트(Bit)를 저장하며, 0 또는 1의 값을 가집니다.
- 셀은 행(Row)과 열(Column)로 조직화되어 있으며, 이 조합으로 특정 비트를 읽거나 쓸 수 있습니다.
2) 어드레스(Address Bus)
- CPU가 RAM에 접근할 때 데이터를 저장하거나 읽기 위한 주소를 지정합니다.
- 주소 버스는 RAM의 특정 위치를 선택하여 데이터를 읽거나 씁니다.
3) 데이터(Data Bus)
- 주소가 선택되면, 데이터 버스는 해당 주소에서 데이터를 전송합니다.
- 데이터 버스는 실제로 읽기/쓰기 작업이 수행되는 통로 역할을 합니다.
4) 제어(Control Bus)
- CPU와 RAM 간의 읽기(Read) 또는 쓰기(Write) 동작을 제어합니다.
- 제어 신호를 통해 RAM이 CPU의 명령을 올바르게 처리하도록 지시합니다.
RAM의 논리적 메모리 영역 구조
RAM은 실행 중인 프로그램과 시스템의 효율적인 동작을 위해 스택(Stack), 힙(Heap), 텍스트(Text), 데이터(Data) 등의 논리적 영역으로 나뉩니다.
(1) 텍스트 영역 (Text Segment)
- 프로그램의 코드(명령어)가 저장되는 영역.
- 실행 파일의 이진 코드가 로드되며, 주로 읽기 전용(RO)으로 설정됩니다.
- 예: 함수, 조건문, 반복문의 기계어 명령.
(2) 데이터 영역 (Data Segment)
- 전역 변수와 정적 변수가 저장되는 공간.
- 프로그램 시작 시 할당되며, 종료 시 해제.
- 초기화된 데이터(Initialized Data)와 초기화되지 않은 데이터(Uninitialized Data, BSS)로 나뉩니다.
- 초기화된 데이터: 초기값이 명시된 변수.
- BSS: 초기값이 없는 전역 변수, 0으로 초기화.
(3) 힙 영역 (Heap Segment)
- 동적 메모리 할당을 위해 사용되는 영역.
- 실행 중에 malloc, calloc, new와 같은 함수로 메모리를 요청하여 사용.
- 메모리는 사용 후 free나 delete로 반환해야 함.
- 메모리 누수가 발생하기 쉬운 영역.
(4) 스택 영역 (Stack Segment)
- 함수 호출 시 지역 변수와 매개변수가 저장되는 영역.
- LIFO(Last In First Out) 방식으로 동작.
- 함수가 종료되면 해당 함수의 스택 메모리가 자동으로 해제.
- 콜 스택(Call Stack) 구조를 사용:
- 함수 호출 시 스택 프레임(Stack Frame)이 생성.
- 함수 리턴 시 스택 프레임이 제거.
RAM의 종류
1) DRAM(Dynamic RAM)
- 동적 메모리로, 데이터를 유지하기 위해 주기적으로 새로 고침(Refresh)이 필요합니다.
- 전력 소모는 적지만, 상대적으로 느립니다.
- 일반적으로 PC, 노트북의 메인 메모리로 사용됩니다.
2) SRAM(Static RAM)
- 정적 메모리로, 데이터를 유지하기 위해 새로 고침이 필요하지 않습니다.
- DRAM보다 빠르고, 전력 소모가 큽니다.
- CPU 캐시 메모리로 주로 사용됩니다.
3) VRAM(Video RAM)
- GPU에서 사용되는 메모리로, 그래픽 데이터를 처리하고 저장하는 데 특화되어 있습니다.
- 고해상도 그래픽 작업이나 게임에 사용됩니다.
RAM의 작동 원리
- 주소 지정
CPU가 특정 데이터에 접근하기 위해 RAM의 주소를 지정합니다. - 주소 디코딩
RAM의 주소 디코더(Address Decoder)가 지정된 주소를 해석하여 정확한 메모리 셀 위치를 선택합니다. - 데이터 처리
- 쓰기(Write): 비트 라인을 통해 데이터를 메모리 셀에 저장.
- 읽기(Read): 메모리 셀에 저장된 데이터를 비트 라인을 통해 읽어옴.
- 출력 또는 저장 완료
데이터가 I/O 버퍼를 통해 CPU로 전달되거나, RAM 내 저장이 완료됩니다.
RAM과 저장장치의 차이
- RAM: 데이터의 임시 저장, 휘발성, 빠른 속도
- 저장장치(HDD/SSD): 데이터의 영구 저장, 비휘발성, 느린 속도
RAM은 저장장치보다 수십 배 이상 빠르지만, 용량당 비용이 더 높고 데이터를 영구적으로 보관할 수 없습니다.
RAM의 최신 기술
1) DDR (Double Data Rate)
- RAM 기술의 발전으로, DDR → DDR2 → DDR3 → DDR4 → DDR5로 계속 진화하고 있습니다.
- 각 세대는 더 높은 속도, 더 낮은 전력 소비, 더 높은 대역폭을 제공합니다.
2) ECC (Error-Correcting Code) RAM
- 메모리 오류를 탐지하고 수정할 수 있는 기능이 있는 RAM입니다.
- 주로 서버나 데이터 센터에서 사용됩니다.
3) LPDDR (Low Power DDR)
- 모바일 기기에서 사용되는 저전력 RAM입니다.
- 스마트폰, 태블릿 등에 적합합니다.
RAM의 한계와 보완
- RAM의 휘발성 때문에, 데이터를 영구적으로 보관할 수 없습니다.
- 이 한계를 보완하기 위해 SSD와 같은 비휘발성 메모리가 도입되었고, 일부 시스템에서는 하이브리드 메모리를 사용하여 RAM과 SSD를 결합하기도 합니다.
'TIL(Today I Learned)' 카테고리의 다른 글
운영체제 (0) | 2025.01.15 |
---|---|
버퍼 객체 (0) | 2025.01.14 |
지연 숨기기(Latency Hiding) (0) | 2025.01.10 |
대칭키, 비대칭키 암호화 (0) | 2025.01.08 |
게임에서 쓰이는 삼각함수 (0) | 2025.01.07 |