[CSAPP 9장 완전 정복] 9.4 메모리 관리를 위한 도구로서의 VM - 할당과 회수의 비밀

2025. 4. 22. 19:48·크래프톤 정글/컴퓨터구조(CSAPP)
목차
  1. 메모리 관리를 위한 도구로서의 VM - 할당과 회수의 비밀
  2. 공간을 줄 수 있는 구조, 가상 메모리
  3. 스택과 힙은 어떻게 VM 위에 구축될까?
  4. malloc, free는 어떻게 동작할까?
  5. 메모리 회수의 주체
  6. 핵심 요약

메모리 관리를 위한 도구로서의 VM - 할당과 회수의 비밀

개발자에게 메모리는 숫자와 주소가 뒤섞인 혼란의 세계일 수 있습니다. 하지만 운영체제와 가상 메모리 시스템은 이 복잡한 세계를
논리적이고 안전하며 효율적인 공간으로 정리해주죠.

 

이번 절에서는 CSAPP 9.4절을 바탕으로, 가상 메모리(Virtual Memory)가 어떻게 메모리 할당과 회수를 가능하게 해주는지 정리해 보겠습니다.

 

 

공간을 줄 수 있는 구조, 가상 메모리

가상 메모리는 프로세스에게 독립적인 주소 공간을 제공하며, 그 공간 안에서 스택과 힙을 자유롭게 확장하거나 줄일 수 있는 유연성을 제공합니다.

 

 

스택과 힙은 어떻게 VM 위에 구축될까?

힙(Heap)

  • 동적 메모리 할당 (malloc, free)이 일어나는 영역
  • 아래에서 위 방향으로 확장
  • 내부에서는 운영체제가 brk() 시스템 호출 등을 통해 힙 영역을 늘리거나 줄임

 

스택(Stack)

  • 함수 호출, 지역 변수 저장 등에 사용
  • 위에서 아래 방향으로 확장
  • 함수 호출 시 스택 프레임이 생성되고, 복귀 시 파괴됨

 

구조 요약 (x86-64 가상 주소 기준)

// 높은 주소 //
───────────────────────────────
커널 영역 (사용자 접근 불가)
───────────────────────────────
[스택 영역] ↓ (함수 호출마다 쌓임)
    ...
───────────────────────────────
[빈 공간]
───────────────────────────────
[힙 영역] ↑ (malloc 시 확장)
───────────────────────────────
글로벌/정적 데이터 (.data, .bss)
───────────────────────────────
텍스트 (.text) — 코드 영역
// 낮은 주소//

이러한 구조 덕분에 스택과 힙은 충돌이 일어나지 않는 선에서 자유롭게 확장이 가능합니다.

 

 

malloc, free는 어떻게 동작할까?

malloc()

  • 힙 영역에서 지정한 크기의 공간만큼 가상 주소 공간 상의 메모리 블록을 예약
  • 실제 메모리 할당은 운영체제 요청(sbrk, mmap)을 통해 이뤄짐
  • 메모리 할당자는 내부에서 빈 블록 목록(Free List) 등을 유지하며 동작

 

free()

  • malloc으로 얻은 블록을 다시 재사용 가능하도록 반환
  • 실질적으로는 메모리를 제거하지 않고, 다시 사용할 수 있도록 표시

 

VM이 필요한 이유

  • 힙 공간을 자유롭게 확장하려면 주소 공간을 조작할 수 있어야 함
  • VM 덕분에 실제 물리 메모리를 건드리지 않고도 논리적으로만 공간 확보 가능
  • 서로 다른 프로세스가 동일한 주소(예: 0x555555...)를 사용하더라도 충돌이 없음

 

메모리 회수의 주체

  • 할당된 메모리는 사용자가 free()를 호출해야 회수됨
  • 사용하지 않고 남겨두면 메모리 누수(leak)가 발생
  • OS는 프로세스가 종료될 때 전체 주소 공간을 회수하지만, 실행 중에는 사용자가 직접 관리해야 함

 

핵심 요약

  • 힙은 malloc/free로 동작하며, 아래에서 위 방향으로 확장된다
  • 스택은 함수 호출, 지역 변수 저장에 사용되며 위에서 아래 방향으로 확장된다
  • 가상 메모리는 스택과 힙이 서로 충돌하지 않도록 논리적으로 분리된 공간을 제공한다
  • malloc/free는 실제로는 가상 주소 공간에서 메모리를 확보하거나 재사용 가능 상태로 표시한다
  • 메모리 누수는 사용자가 free() 호출을 빠뜨릴 때 발생하며, OS는 프로세스 종료 시에만 전체 메모리를 회수한다
저작자표시 비영리 변경금지 (새창열림)

'크래프톤 정글 > 컴퓨터구조(CSAPP)' 카테고리의 다른 글

[CSAPP 9장 완전 정복] 9.6 주소의 번역 - 가상 주소는 어떻게 물리 주소로 바뀔까?  (0) 2025.04.23
[CSAPP 9장 완전 정복] 9.5 메모리 보호 - 가상 메모리가 제공하는 고립과 안전  (0) 2025.04.22
[CSAPP 9장 완전 정복] 9.3 캐싱 도구로서의 VM(가상 메모리) - 지역성과 페이지  (0) 2025.04.22
[CSAPP 9장 완전정복] 9.1~9.2 가상 메모리의 시작 - 주소와 주소 공간 이해하기  (0) 2025.04.22
[CSAPP 8장 완전 정복] 8.7~8.8 프로세스 도구 실전 사용 + 8장 전체 요약  (0) 2025.04.21
  1. 메모리 관리를 위한 도구로서의 VM - 할당과 회수의 비밀
  2. 공간을 줄 수 있는 구조, 가상 메모리
  3. 스택과 힙은 어떻게 VM 위에 구축될까?
  4. malloc, free는 어떻게 동작할까?
  5. 메모리 회수의 주체
  6. 핵심 요약
'크래프톤 정글/컴퓨터구조(CSAPP)' 카테고리의 다른 글
  • [CSAPP 9장 완전 정복] 9.6 주소의 번역 - 가상 주소는 어떻게 물리 주소로 바뀔까?
  • [CSAPP 9장 완전 정복] 9.5 메모리 보호 - 가상 메모리가 제공하는 고립과 안전
  • [CSAPP 9장 완전 정복] 9.3 캐싱 도구로서의 VM(가상 메모리) - 지역성과 페이지
  • [CSAPP 9장 완전정복] 9.1~9.2 가상 메모리의 시작 - 주소와 주소 공간 이해하기
그냥사람_
그냥사람_
IT 관련 포스팅을 합니다. 크래프톤 정글 8기 정경호
  • 그냥사람_
    그냥코딩
    그냥사람_
  • 전체
    오늘
    어제
    • 글 전체보기 N
      • 크래프톤 정글 N
        • 로드 투 정글(입학시험)
        • CS기초(키워드, 개념정리)
        • 컴퓨터구조(CSAPP)
        • Code 정글(C언어)
        • Equipped in 정글(나만무) N
        • 마이 정글(WIL, 에세이)
      • 자료구조&알고리즘
        • 자료구조
        • 알고리즘
      • 일상
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
그냥사람_
[CSAPP 9장 완전 정복] 9.4 메모리 관리를 위한 도구로서의 VM - 할당과 회수의 비밀

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.