CS:APP 컴퓨터 시스템 9.8: 요구 페이징, mmap(), 메모리 관리
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

[CS:APP] 컴퓨터 시스템 9.8

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

DevOps

대상자

운영체제 및 시스템 프로그래머, 메모리 관리 및 가상 메모리 구조에 관심 있는 개발자

핵심 요약

  • 요구 페이징은 프로그램이 페이지를 실제로 접근할 때까지 메모리에 로드하지 않고, 필요 시 디스크에서 메모리로 가져오는 방식
  • 익명 파일은 가상 페이지를 0으로 초기화하고, 스왑 파일을 통해 메모리와 디스크 간 스왑이 가능하며, demand-zero-pages라고 불림
  • mmap()은 파일 또는 익명 메모리 영역을 가상 메모리에 직접 매핑하여, 포인터로 접근 가능하며, MAP_SHARED 옵션으로 프로세스 간 메모리 공유 가능

섹션별 세부 요약

요구 페이징과 스왑 파일

  • 요구 페이징은 프로그램이 페이지를 처음 접근할 때까지 메모리에 로드하지 않음
  • 스왑 파일은 메모리가 부족할 때, 일시적으로 데이터를 디스크에 저장하여 관리
  • 리눅스는 메모리 매핑을 통해 디스크에 있는 객체와 가상 메모리 영역을 연결

일반 파일과 익명 파일의 매핑

  • 일반 파일은 요구 페이징으로 인해 필요할 때만 메모리에 로드되고, 나머지 영역은 0으로 채움
  • 익명 파일은 커널이 생성한 0으로 채워진 가상 페이지로 매핑되며, demand-zero-pages라고 불림
  • CPU가 익명 파일의 가상 페이지를 처음 접근하면, 희생 페이지를 찾아 0으로 덮어쓰고, 페이지 테이블을 갱신

fork와 exeve의 메모리 영역 관리

  • fork()는 부모의 가상 메모리 구조를 복사하고, 모든 페이지를 copy-on-write로 설정
  • exeve()는 기존 사용자 영역을 삭제하고, 새 프로그램의 코드/데이터/스택/힙 영역을 새로 매핑

mmap() 함수의 주요 목적

  • mmap()은 파일을 메모리처럼 접근 가능하게 하여, 포인터로 읽기/쓰기 가능
  • MAP_SHARED 옵션을 통해 여러 프로세스가 동일한 물리 메모리 영역을 공유 가능
  • 메모리 동적 할당 시, malloc() 대신 사용 가능하며, 힙 영역 외 메모리도 매핑 가능

결론

  • *mmap()요구 페이징은 메모리 효율성을 높이는 핵심 기술로, 특히 대규모 데이터 처리 및 프로세스 간 공유 메모리 구현 시 유용하며, MAP_SHARED** 옵션을 통해 IPC를 간편하게 수행할 수 있다.