WIL Virtual Memory - Memory Mapped file

김지수·2022년 12월 12일
0

SW사관학교정글5기

목록 보기
11/13

📌 Memory Mapped File 이란?

  • 운영체제에서 파일을 다루는 방법 중 하나
    • 프로세스의 가상 메모리 주소 공간에 파일을 매핑한 뒤 가상 메모리 주소에 직접 접근하는 것으로 파일 읽기/쓰기를 대신한다.
  • 기본 파일 입출력 API에 비해 저렴한 비용을 사용하여 파일의 내용에 접근이 가능
    • 다른 프로세스에서 동일한 파일에 메모리 맵 파일을 이용하여 접근할 경우 '공유메모리' 처럼 사용 가능
  • 중복된 내용 만큼의 메모리 절약
    • 하나의 프로세스가 동시에 여러 번 동작할 때 실행코드와 같은 읽기 전용 세그먼트를 공유할 수 있음

📌 Memory Mapped File의 장단점

📘 장점

  • 직접적인 파일 입출력을 수행할 필요 없음
    • 메모리 맵 파일을 사용하면 파일 내용이 메모리 주소에 올라가게됨으로써 파일을 모두 불러온 것 처럼 메모리 주소를 이용하여 연산 작업 가능
  • 버퍼나 파일 처리를 위한 추가적인 자료 구조가 필요 없음
    • 운영체제에서 페이징 기법을 사용하여 파일의 내용을 관리하고, 페이지 크기에 따라 적절히 파일의 내용을 읽고 쓸 수 있음
  • 대용량의 자료를 처리할 때에 효율적
    • 파일에 접근 할 때에 지연 적재를 이용하므로 필요한 부분만 파일에서 불러와 작업이 가능
  • 전통적인 파일 입출력 API를 통한 파일 처리보다 빠름
    • 4kiB 단위로 자료를 미리 불러 올 때 발생하는 페이지 부재외의 모든 작업이 실제 메모리상에서 이루어지므로 파일 처리가 빠름

📕 단점

  • 대용량 파일을 매핑할 때 외부 단편화가 있을 경우 여러움
    • mmap은 가상 주소 공간의 연속된 페이지들에 파일을 올리는 시스템 콜입니다. 만약 가상 주소 공간에 외부 단편화가 존재할 경우 파일을 작은 크기로 잘라주어 매핑 해주어야 함
  • 너무 작은 파일을 읽어올때 좋지 않음
    • 페이지 폴트가 났을 때만 파일에서 메모리로 읽어오기 때문에 페이지 폴트에 사용되는 비용을 낭비하지 않으려면 충분한 크기의 파일을 읽어 올 때 사용하는 것이 좋음
  • 파일의 offset도 페이지 정렬이 되어 있어야함
    • 만약 페이지 크기의 배수가 아닌 파일 오프셋에서 데이터를 읽어 오려고하면 읽어 오는 위치를 페이지 크기의 배수가 되도록 정렬 필요

📌 do_mmap과 do_munmap 코드

👉 do_mmap

👉 load_segment

👉 do_munmap 함수

0개의 댓글