[40일차] | 컴퓨터 밑바닥의 비밀 | 책너두

Heechan Kang·2024년 5월 30일
0
post-thumbnail

6.5 mmap: 메모리 읽기와 쓰기 방식으로 파일 처리하기

  • 대부분의 경우 프로그래머들은 디스크가 아닌 메모리에 데이터를 읽고쓴다.
  • 메모리에서 변수로 작업하는 것에 비해, 디스크에 읽고 쓰는 작업은 번거롭다.
  • 이는 디스크와 메모리의 차이로 인한 것이다.
    • 메모리와 디스크의 주소 지정 방법이 다르다.
    • 두 장치간의 속도 차이가 크다.

6.5.1 파일과 가상 메모리

  • 이렇게 다른 메모리와 디스크를 연관짓는 방법은, 가상 메모리를 활용하는 것이다.
  • 가상 메모리는 이름 그대로 '가상'이기에, 다루기 편하고 프로그래머가 '수작'을 부릴 여지가 많다.
  • 이러한 가상 메모리를 활용해 디스크의 공간을 메모리처럼 프로세스의 주소공간에 사상(mapping) 할 수 있다.

6.5.2 마술사 운영 체제

  • 이러한 동작은 모두 운영체제 덕분에 가능하다.
  • 이 과정은, 아래와 같은 과정을 거친다.
    • 특정 파일을 읽기위해 600~799 범위의 주소 공간을 읽으려고 시도한다.
    • 아직 파일이 메모리에 없다면, 페이지 누락 인터럽트가 발생한다.
    • 디스크 IO가 발생하며 디스크의 파일이 가상 메모리에 사상된다.
    • 프로그램은 가상 메모리에 접근하여 읽고쓰기를 계속한다.
    • 운영체제가 가상 메모리와 디스크 사이의 읽고 쓰기 작업을 계속한다.

6.5.3 mmap 대 전통적인 read/write

  • read/write 함수는 디스크에서 파일을 읽고 쓸 때 커널을 거쳐야 한다.
    • 이는 상당한 오버헤드를 발생시킨다.
  • mmap의 경우 커널을 거치지 않는다.
    • 따라서, 시스템 콜과 복사에 대한 부담이 적다.
    • 다만 별도의 데이터 구조 사용과 페이지 누락 문제가 존재한다.
  • 결과적으로 둘 중 어느 것이 무조건 낫다고 말할 수 없다.

6.5.4 큰 파일 처리

  • 일반적인 read/write는 파일을 메모리에 직접 복사한 후 작업을 수행한다.
    • 이는 파일의 크기가 커질수록 메모리 크기의 제약을 받는다.
    • 이로인해 부분적인 작업을 수행해야 하며, 임의 접근의 경우 더욱 어려워진다.
  • 반면, 이런 점에서 mmap은 큰 파일을 처리할 때 유용하다.
    • 이는 파일을 가상메모리에 사상하므로, 실제 메모리 크기의 제약을 받지 않는다.
    • 또한 쓰기작업도 사상된 파일에 직접 쓸 수 있다.

6.5.5 동적 링크 라이브러리와 공유 메모리

  • 동적 링크 라이브러리는 아래와 같은 특징을 가진다.
    • 많은 프로세스가 하나의 파일을 참조한다.
    • 읽기 전용이다.
  • 이러한 동적 링크 라이브러리를 매 프로세스마다 메모리에 복사한다면, 상당한 메모리가 낭비될 것이다.
  • 따라서, 이 경우에도 mmap을 사용하면, 메모리를 공유할 수 있다.
    • 물리 메모리에 적재된 하나의 라이브러리를 여러 가상 메모리에 사상할 수 있다.

6.5.6 mmap 직접 조작하기

  • 생략

6.6 컴퓨터 시스템의 각 부분에서 얼만큼 지연이 일어날까?

  • 컴퓨터 시스템의 각 작업에서 발생하는 지연시간(2012)

6.7 요약

  • 생략
profile
안녕하세요!

0개의 댓글