top 명령어를 통한 리눅스 메모리 요약
1. top 명령어 메모리 지표
지표 설명
| VIRT | 커널로부터 예약받은 가상 메모리 (물리 메모리 미할당 포함) |
| RES | 실제 물리 RAM에 올라온 메모리 (가장 현실적인 지표) |
| SHR | RES 중 다른 프로세스와 공유 중인 메모리 |
실제 단독 사용량 = RES - SHR
2. SHR (공유 메모리)
- 대표 예시: glibc (대부분의 프로세스가 참조하는 표준 C 라이브러리)
- 물리 메모리에 단 1개만 적재되고 여러 프로세스가 공유
- 쓰기 발생 시 COW로 분리됨
3. VIRT와 메모리 커밋
- malloc() 호출 → 가상 주소 공간만 예약 → VIRT 증가 (메모리 커밋)
- 실제 접근 시 → Page Fault 발생 → 물리 메모리 할당 → RES 증가 (Demand Paging)
malloc() → [메모리 커밋] → VIRT ↑, RES 변화 없음
실제 접근 → [Demand Paging] → Page Fault → RES ↑
4. 지연 할당(Lazy Allocation)을 쓰는 이유
- fork() 후 자식 프로세스가 메모리를 얼마나 쓸지 모름
- 요청한 메모리를 실제로 다 안 쓸 수 있음
- 물리 메모리보다 더 많은 가상 메모리 제공 가능
- 프로세스 시작 속도 향상
5. COW (Copy-on-Write)
fork() 직후 → 부모/자식이 동일한 물리 메모리 공유 (복사 안 함)
쓰기 발생 시 → 해당 페이지만 복사 후 분리
상황 동작
| 읽기만 할 때 | 부모/자식 메모리 공유 |
| 쓰기 발생 시 | 그 페이지만 복사 후 분리 |
| exec() 즉시 호출 | 복사 자체가 불필요 → 메모리 절약 |
"실제로 쓰기 전까지는 굳이 복사하지 말자"