메모리 주소 공간: 논리 주소 vs 물리 주소 요약
1. 주소 공간의 개념
(1) 논리 주소(Logical Address) vs 물리 주소(Physical Address)
- CPU와 실행 중인 프로그램이 바라보는 주소를 논리 주소라고 함.
- 실제 메모리(하드웨어)에서 바라보는 주소를 물리 주소라고 함.
- 프로그램이 실행될 때마다 메모리에 로드되는 위치(물리 주소)는 다를 수 있음.
- 따라서 프로그램마다 논리 주소를 부여하고, 이를 물리 주소로 변환하여 실행.

2. 논리 주소와 물리 주소의 차이
| 구분 | 논리 주소 (Logical Address) | 물리 주소 (Physical Address) |
|---|
| 정의 | CPU 및 프로그램이 인식하는 주소 | 실제 메모리의 주소 (RAM 내 위치) |
| 역할 | 프로그램 실행을 위해 사용 | 하드웨어에서 실제 데이터 저장 위치 |
| 특징 | 모든 프로그램이 0번지부터 시작 | 메모리에서 중복 없이 할당 |
| 예시 | 프로그램 A의 0번지, 100번지 등 | 실제 RAM의 15000번지, 15100번지 등 |
3. 논리 주소와 물리 주소 변환
(1) MMU (Memory Management Unit, 메모리 관리 장치)
- CPU가 실행하는 모든 주소는 논리 주소.
- MMU(메모리 관리 장치)가 논리 주소를 물리 주소로 변환.
- 논리 주소를 변환할 때 베이스 레지스터(Base Register)를 활용.

(2) 변환 방식
- 물리 주소 = 베이스 레지스터 값 + 논리 주소
- 프로그램이 로드될 때, 시작 주소(베이스 레지스터 값)를 저장하고, 이후 논리 주소를 더해 물리 주소를 찾음.
(3) 예시
예제 1: 프로그램 A가 메모리에 로드된 경우
-
프로그램 A가 15000번지부터 로드됨
-
논리 주소 100번지 → 물리 주소 변환
- 물리 주소 = 베이스 레지스터 값(15000) + 논리 주소(100)
- 결과: 15100번지가 실제 사용 주소

예제 2: 프로그램 C가 메모리에 로드된 경우
- 프로그램 C가 45000번지부터 로드됨
- 논리 주소 100번지 → 물리 주소 변환
- 물리 주소 = 베이스 레지스터 값(45000) + 논리 주소(100)
- 결과: 45100번지가 실제 사용 주소

4. 메모리 보호 (Memory Protection)
(1) 왜 메모리를 보호해야 하는가?
- 프로그램이 다른 프로그램의 메모리 영역을 침범하면 심각한 오류 발생.
- 예를 들어, 인터넷 브라우저가 게임 프로그램의 데이터를 덮어쓴다면? → 오류 발생.
(2) 해결책: 리미트 레지스터 (Limit Register)
- 한계 레지스터(Limit Register)를 사용하여 논리 주소의 최대 크기를 설정.
- 프로그램이 허용된 논리 주소 범위를 초과하면 실행을 차단.

(3) 예시
예제 1: 정상적인 접근
- 프로그램 A의 논리 주소 범위: 0 ~ 99번지
- 베이스 레지스터 = 1000, 리미트 레지스터 = 100
- 접근하려는 주소 = 50번지 → 정상 (0~99 범위 내)

예제 2: 잘못된 접근 (다른 프로그램 침범)
- 논리 주소 150번지를 접근하려 하면?
- 한계 레지스터(100) 초과 → 실행 차단
- 다른 프로그램 메모리를 침범하는 것을 방지.

5. 메모리 보호 기법 요약
| 보호 기법 | 역할 |
|---|
| MMU (Memory Management Unit) | 논리 주소 → 물리 주소 변환 |
| 베이스 레지스터 (Base Register) | 프로그램의 시작 주소 저장 |
| 리미트 레지스터 (Limit Register) | 프로그램이 접근할 수 있는 논리 주소 범위 설정 |
| 주소 검사(Address Checking) | 프로그램이 허용된 주소를 초과하면 실행 차단 |

6. 결론
- CPU와 프로그램은 논리 주소를 사용하고, 실제 메모리는 물리 주소를 사용.
- 논리 주소는 MMU를 통해 물리 주소로 변환됨.
- 변환 과정에서 베이스 레지스터와 리미트 레지스터를 활용.
- 리미트 레지스터를 통해 프로그램이 다른 프로그램의 메모리를 침범하지 못하도록 보호.
이제 메모리 주소 체계와 보호 방식이 더 명확해졌을 거예요! 🚀