Project 1, 2 개발 및 리팩터링 하다가 겨우 살아 돌아왔습니다. 이번 팀은 G.O.A.T입니다. 다들 너무 잘해 앞으로 저도 분발하겠습니다. 이걸 보고 있는 임 씨 두 분 앞으로 내가 잘할게!
가상메모리는 마치 아파트 건물의 주소 체계와 비슷합니다. 실제 방(물리 메모리)이 어디에 있든 상관없이, 우리는 "101동 502호"라는 가상 주소만 알면 찾아갈 수 있죠. PintOS도 이와 동일한 방식으로 메모리를 관리합니다.
1. PintOS 가상메모리 전체 구조 이해하기

전체 메모리 맵 구조
PintOS의 메모리는 크게 커널 영역과 사용자 영역으로 나뉩니다
| 주소 범위 | 영역 이름 | 설명 및 용도 |
| 0xFFFFFFFF ~ 0xFFF00000 | 커널 상단 미사용 영역 | 보호 목적으로 사용되지 않는 영역 |
| 0xFFF00000 ~ 0xFFC00000 | 페이지 디렉터리 / 테이블 | 가상 메모리 관리 구조체 |
| 0xFFC00000 ~ 0xFF800000 | 커널 스택 | 커널 쓰레드별 스택 (4KB씩) |
| 0xFF800000 ~ 0xFF000000 | 커널 힙 | 커널 동적 메모리 (↑ 위로 성장) |
| 0xFF000000 ~ 0xFE000000 | 커널 .bss/.data | 커널 전역 변수 영역 |
| 0xFE000000 ~ 0xC0000000 | 커널 .text | 커널 실행 코드 영역 |
| 0xC0000000 | 커널 영역 시작점 | PHYSBASE - 커널 전용 주소 공간 |
비유하자면 0 xC0000000(PHYSBASE)를 기준으로 위쪽은 "관리사무소 전용 공간"(커널), 아래쪽은 "주민들이 사용하는 공간"(사용자)입니다.
1. 1 프로세스별 메모리 매핑과 Frame Table
위에 그림에서 보시는 것처럼, 각 프로세스는 독립적인 가상주소 공간을 가집니다.
핵심 구성 요소
Physical Memory (물리 메모리)
- 실제 RAM의 물리적 공간
- User Pool : 사용자 프로세스들이 공유하는 영역
- Kernel Pool : 커널 전용 메모리 영역
- 모든 프로세스가 공유하는 자원
각 프로세스의 가상 메모리 영역
- Stack : 함수 호출, 지역 변수 저장(주소가 아래로 감)
- BSS : 초기화되지 않은 전역 변수
- Text : 실행 가능한 코드
1:1 Mapping in PintOS
- 가상주소와 물리주소가 일대일로 대응되는 구간 존재
- PHYSBASE(0 xC0000000) 기준으로 간단한 변환
Frame Table의 역할
- "주차장 관리시스템"과 같습니다
- 각 주차공간(물리메모리 프레임)에 어떤 차(페이지)가 주차되어 있는지 관리
- 프로세스 1의 page table과 프로세스 2의 page table이 각각 독립적으로 관리
2. 프로세스 메타데이터와 페이지 테이블 구조

2.1 4단계 페이지 테이블 구조
| 레벨 | 이름 | 설명 |
| Level 4 | PML4 | 최상위 페이지 테이블 (비유 : 시/도) |
| Level 3 | PDPT | Page Directory Pointer Table (비유 : 시/군/구) |
| Level 2 | PD | Page Directory (비유 : 동/면) |
| Level 1 | PT | Page Table (비유 : 번지) |
중요한 점: 모든 메타데이터와 테이블은 kernel pool에 독립적으로 존재합니다.
3. ELF 파일의 실제 메모리 레이아웃

주요 섹션별 상세 분석
| 섹션 이름 | 시작 주소 | 크기 | 정렬 기준 | 설명 |
| .text | 0x080420000 | 약 140KB | 4KB | 실행 코드, 읽기 전용 |
| .rodata | 0x080422f40 | 약 23KB | 32B | 상수, 문자열 리터럴 |
| .data | 0x080429000 | 약 2.2KB | 32B | 초기화된 전역/정적 변수 |
| .bss | 0x0804298c0 | 약 0.9KB | 32B | 초기화되지 않은 전역/정적 변수 |
위에 그림은 kaist 조교님의 질문에 대한 답변을 정리한 것입니다.
PintOS의 메모리 구조

draw io로 그리셨습니다. 저도 이거 보고 많이 도움 받았습니다.
shout out to yujin thanks a lot
코치님 감사합니다.
추가로 필요한 자료를 git wiki에 정리를 해놓았습니다.
https://github.com/Week12-13-GOAT/pintos-vm/wiki
보시고 깃에 star 한 번씩만 클릭 부탁드립니다. 두 번 ❌ ❌ ❌
