본문으로 이동
  • 현재 모든 문서는 작성 중입니다. 보시는 데 불편함이 있더라도 양해 부탁드립니다.

운영체제 기본/Linux/메모리 매핑: 두 판 사이의 차이

~ldmsys
문장형 절 제목을 직관적인 명사형으로 통일하고 기존 절 링크 보존
직접 관련된 총론 링크와 선행 개념 안내 정리
 
(같은 사용자의 중간 판 8개는 보이지 않습니다)
1번째 줄: 1번째 줄:
[[운영체제 기본|운영체제 기본 목차]] · 관련 총론: [[운영체제 기본/가상 메모리|가상 메모리]]
{{이전 다음 문서
|이전=
|목차=[[운영체제 기본|운영체제 기본 목차]]
|다음=
}}


<code>read()</code>는 사용자 버퍼로 파일 데이터를 읽어 온다. <code>mmap()</code>은 파일의 범위를 가상 주소 공간에 연결하고, 프로그램은 그 주소를 메모리처럼 읽는다. '''매핑을 만드는 시점과 파일 데이터에 실제로 접근하는 시점은 다르다.'''
<code>mmap()</code>은 프로세스의 가상 주소 구간을 만들고, 그 구간의 접근을 무엇으로 뒷받침할지 정한다. 대상은 파일 데이터만이 아니다. 새로 마련할 익명 메모리, 파일의 페이지 캐시, 장치의 메모리 매핑 입출력(MMIO) 영역을 같은 주소 공간 안에 배치할 수 있다.


Linux v6.12에서 일반 파일을 읽기 전용으로 매핑하는 경로를 다룬다. 파일과 VMA를 연결하는 공통 경로를 설명하고, 시스템 콜과 페이지 폴트 진입은 x86-64와 RISC-V RV64를 비교한다.
Linux v6.12의 공통 매핑·페이지 폴트 경로를 먼저 살펴보고, 각 매핑이 실제 접근을 처리하는 방식을 비교한다. 시스템 콜과 CPU 예외 진입은 x86-64와 RISC-V RV64를 함께 다룬다.
 
== 관련 총론 ==
* [[운영체제 기본/가상 메모리|가상 메모리]]: 페이지 테이블·페이지 폴트·쓰기 시 복사.
* [[운영체제 기본/파일과 입출력|파일과 입출력]]: 파일 데이터의 버퍼링과 변경의 가시성.
* [[운영체제 기본/장치 제어와 입출력|장치 제어와 입출력]]: MMIO와 장치 레지스터 접근.
* [[운영체제 기본/프로세스 간 통신|프로세스 간 통신]]: 공유 매핑을 통한 데이터 교환과 동기화.


<span id="읽는_순서"></span>
== 문서 구성 ==
== 문서 구성 ==
# [[운영체제 기본/Linux의 파일 메모리 매핑/mmap과 주소 공간|mmap과 주소 공간]]: 파일을 매핑하는 코드와 커널의 주소 영역 설정.
# [[운영체제 기본/Linux/메모리 매핑/mmap과 주소 공간|mmap과 주소 공간]]: 인자, VMA, 매핑 대상의 연결과 수명.
# [[운영체제 기본/Linux의 파일 메모리 매핑/첫 접근과 페이지 폴트|첫 접근과 페이지 폴트]]: 매핑된 주소의 첫 접근에서 파일 데이터를 읽을 수 있게 되기까지.
# [[운영체제 기본/Linux/메모리 매핑/페이지 폴트 처리|페이지 폴트 처리]]: CPU 예외, 접근 권한 검사, PTE 설치와 명령 재시도.
# [[운영체제 기본/Linux/메모리 매핑/익명 메모리 매핑|익명 메모리 매핑]]: 지연 할당, 0 페이지, fork 이후 COW.
# [[운영체제 기본/Linux/메모리 매핑/파일 매핑과 COW|파일 매핑과 COW]]: 파일 읽기, MAP_PRIVATE의 쓰기 시 복사, MAP_SHARED의 변경 반영.
# [[운영체제 기본/Linux/메모리 매핑/MMIO 장치 매핑|MMIO 장치 매핑]]: 장치 드라이버, 물리 주소 구간, 메모리 속성과 장치 접근.
 
== 관련 각론 ==
* [[운영체제 기본/Linux/파일 시스템 콜|Linux의 파일 시스템 콜]]
* [[운영체제 기본/Linux/파일시스템/페이지 캐시|페이지 캐시]]


== 관련 문서 ==
{{이전 다음 문서
* [[운영체제 기본/가상 메모리#페이지 폴트의 처리|가상 메모리의 페이지 폴트 처리]]
|이전=
* [[운영체제 기본/Linux의 파일 읽기|read()를 통한 파일 읽기]]
|목차=[[운영체제 기본|운영체제 기본 목차]]
* [[운영체제 기본/파일과 입출력|파일과 입출력]]
|다음=
}}
{{운영체제 기본 둘러보기}}

2026년 11월 1일 (일) 04:03 기준 최신판

mmap()은 프로세스의 가상 주소 구간을 만들고, 그 구간의 접근을 무엇으로 뒷받침할지 정한다. 대상은 파일 데이터만이 아니다. 새로 마련할 익명 메모리, 파일의 페이지 캐시, 장치의 메모리 매핑 입출력(MMIO) 영역을 같은 주소 공간 안에 배치할 수 있다.

Linux v6.12의 공통 매핑·페이지 폴트 경로를 먼저 살펴보고, 각 매핑이 실제 접근을 처리하는 방식을 비교한다. 시스템 콜과 CPU 예외 진입은 x86-64와 RISC-V RV64를 함께 다룬다.

관련 총론

문서 구성

  1. mmap과 주소 공간: 인자, VMA, 매핑 대상의 연결과 수명.
  2. 페이지 폴트 처리: CPU 예외, 접근 권한 검사, PTE 설치와 명령 재시도.
  3. 익명 메모리 매핑: 지연 할당, 0 페이지, fork 이후 COW.
  4. 파일 매핑과 COW: 파일 읽기, MAP_PRIVATE의 쓰기 시 복사, MAP_SHARED의 변경 반영.
  5. MMIO 장치 매핑: 장치 드라이버, 물리 주소 구간, 메모리 속성과 장치 접근.

관련 각론