가상 메모리의 시작 - 주소와 주소 공간 이해하기
프로그램은 메모리 없이 존재할 수 없습니다. 우리가 int x = 10;
같은 간단한 코드를 짤 때조차, 운영체제는 이때도 이미 복잡한 주소 변환과 공간 분리 작업을 수행하고 있죠. 이 글에서는 CSAPP 9.1~9.2절의 내용을 바탕으로, 가상 메모리(Virtual Memory)의 시작점인 주소의 개념, 주소 공간의 구성을 차근차근 살펴보겠습니다.
9.1 물리 및 가상주소 방식
주소의 종류
- 물리 주소(Physical Address): 실제 DRAM 하드웨어 메모리의 위치를 나타내는 주소
- 가상 주소(Virtual Address): 프로그램 입장에서 사용하는 논리적인 주소
프로그램은 가상 주소만 알고 있고, 운영체제가 이를 물리 주소로 매핑해 줍니다.
주소를 변환하는 이유
- 프로세스 간 메모리 격리
- 보안 강화(커널 접근 제한)
- 메모리 관리 유연성
- 코드 재배치 없이 실행 가능
주소를 변환하는 과정
가상 주소 (Virtual Address)
↓ 주소 변환
물리 주소 (Physical Address)
↓ 실제 DRAM 접근
이 변환은 CPU 내부에 있는 주소 변환 전용 하드웨어인 MMU와 운영체제가 협력해서 수행합니다.
9.2 주소 공간 (Address Space)
주소 공간이란, 한 프로세스가 참조할 수 있는 모든 주소의 논리적인 집합을 말합니다. 곧 가상 주소의 전체 범위를 의미하며 각 프로세스마다 고유한 주소 공간을 가지고 있습니다.
주소 공간의 중요성
- 모든 프로세스가 동일한 주소를 써도 충돌 없이 실행 가능
- 운영체제가 각 프로세스의 가상 주소를 서로 다른 물리 주소로 매핑해 줌
주소 공간 구조 예시 (x86-64 기준)
영역 | 용도 | 특징 |
텍스트(.text) | 실행 코드 | 읽기 전용 |
데이터(.data) | 전역/정적 변수 | 초기화 데이터 |
BSS(.bss) | 초기화되지 않은 전역 변수 | 0으로 채워짐 |
힙(heap) | 동적 할당 공간 (malloc) | 위로 확장 |
스택(stack) | 함수 호출, 지역 변수 | 아래로 확장 |
커널 영역 | 커널 코드/데이터 | 사용자 접근 불가 (상위 영역) |
사용자 프로그램은 보통 가상 주소의 하위 영역(lower half)만 사용하고, 커널은 상위 영역(upper half)을 독점적으로 차지합니다.
사용자/커널 주소 공간의 분리
커널은 사용자 프로그램이 침범할 수 없는 영역에 위치하고 있고, 사용자 프로세스는 시스템 호출을 통해서만 커널에 접근이 가능합니다. 이 구조 덕분에 다음과 같은 장점들이 생깁니다.
- 시스템 안정성 확보
- 프로세스 간 고립성을 유지
- 보안 침해 방지
핵심 요약
- 가상 주소는 프로그램이 사용하는 논리 주소이다
- 물리 주소는 실제 하드웨어 메모리의 위치이다
- 주소 공간은 한 프로세스가 사용하는 가상 주소 전체이다
- 사용자/커널 공간은 보호와 분리를 위한 메모리 구조이다
- 주소 변환은 가상 주소를 물리 주소로 매핑하는 과정이며, OS가 매핑 정보를 관리하고 MMU가 실시간 변환을 수행한다
'크래프톤 정글 > 컴퓨터구조(CSAPP)' 카테고리의 다른 글
[CSAPP 9장 완전 정복] 9.4 메모리 관리를 위한 도구로서의 VM - 할당과 회수의 비밀 (0) | 2025.04.22 |
---|---|
[CSAPP 9장 완전 정복] 9.3 캐싱 도구로서의 VM(가상 메모리) - 지역성과 페이지 (0) | 2025.04.22 |
[CSAPP 8장 완전 정복] 8.7~8.8 프로세스 도구 실전 사용 + 8장 전체 요약 (0) | 2025.04.21 |
[CSAPP 8장 완전 정복] 8.6 비지역 점프 - setjmp, longjmp로 흐름 전환하기 (0) | 2025.04.21 |
[CSAPP 8장 완전 정복] 8.5 시그널, 비동기 흐름의 시작 (0) | 2025.04.21 |