반응형
| 항목 | 논리적 주소 | 물리적 주소 |
| 의미 | CPU가 프로세스를 실행할 때 생성하는 주소 | 실제 RAM에서의 물리적인 위치 |
| 생성 위치 | CPU의 메모리 관리 장치가 생성 | 운영체제와 MMU가 변환해서 접근 |
| 사용 주체 | CPU와 실행중인 프로그램 입장(내가 쓰는 주소) | 운영체제/하드웨어 입장(진짜 위치) |
| 관계 | 논리 주소→ 물리주소로 변환되어야 실행 가능 | 변환된 결과 주소 |
| 예시 | 0x0000, 0x00A4 (내 프로그램 기준 주소) | 0xA124, 0xB568 (RAM 상 실제 위치) |
모든 프로세스는 자기 자신을 기준으로 논리적 주소는 번지 부터 시작하는 것처럼 보임!
- MMU : CPU 안에 있는 주소 변환 장치로, 논리적 주소(가상 주소)를 물리적 주소로 변환하는 역할
- 메모리 보호 : 다른 프로세스 메모리 접근 막음
- 페이지 테이블 관리 : 페이징 기법에서 주소 변환 시 테이블 참조
- TLB 캐시 접근 : 빠른 주소 변환을 위해 캐시 먼저 확인
- 가상 메모리, 페이징, 보호 기능 사용 가능하도록 도움
- 주소 바인딩 : CPU가 기계어 명령을 수행하기 위해 프로세스의 논리적 주소가 실제 물리적 메모리의 어느 위치에 매핑되는지 확인 하는 과정


MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환하는 과정!
베이스 레지스터에 15000이 저장되어 있고 CPU가 발생시킨 논리 주소가 100번지라면 이 논리 주소는 물리 주소 15100번지로 변환됨
| 항목 | 값 |
| 베이스 레지스터 | 15000 |
| 한계 레지스터 | 5000 |
| 접근 가능한 논리 주소 | 0 ~ 4999 |
| 매핑되는 물리 주소 | 15000 ~ 19999 |
| 논리 주소 100 → 물리 주소 | ✅ 15100 |
| 논리 주소 6000 → 물리 주소 | ❌ 트랩 발생 (접근 불가!) → 인터럽트! |
논리 주소 + 베이스 레지스터 = 물리 주소
운영체제가 새로운 프로세스를 실행시키려고 메모리에 적재(load)할 때, 아래 2개를 설정함!
- 베이스 레지스터 : 프로세스가 사용할 수 있는 메모리의 시작 주소
- 한계 레지스터 : 그 프로세스가 사용할 수 있는 최대 크기(= 길이)를 제한
만약에 프로세스가 여러 개라면?
프로세스 논리 주소 범위 베이스 레지스터 물리 주소 범위
| A | 0 ~ 999 | 10000 | 10000 ~ 10999 |
| B | 0 ~ 1999 | 20000 | 20000 ~ 21999 |
| C | 0 ~ 1499 | 30000 | 30000 ~ 31499 |
각자 논리 주소는 0부터 시작하지만
실제 메모리(RAM)에서는 전혀 다른 영역에 적재되도록 함!
왜 둘이 나뉘어 있을까?
- 보안성: 프로세스가 서로의 메모리를 건드리지 못하게 분리할 수 있음
- 효율성: 물리 메모리 부족 시 가상 메모리 활용 가능
- 가상 주소 공간 제공: 물리 메모리보다 큰 주소 공간 제공 가능
주소 변환이 어떻게 이뤄질까?
- CPU가 논리적 주소를 생성
- MMU (Memory Management Unit)가 이를 받아
- 페이지 테이블 / TLB를 통해 물리적 주소로 변환
- 해당 RAM 위치에 접근
반응형
'CS 공부 > OS 운영체제' 카테고리의 다른 글
| (OS) 단편화 (0) | 2025.05.11 |
|---|---|
| (OS) 스레드 (0) | 2025.05.01 |
| (OS) 프로세스 (3) (0) | 2025.05.01 |
| (OS) 프로세스 (2) (0) | 2025.05.01 |
| (OS) 프로세스 (1) (0) | 2025.05.01 |