메모리와 mmap

tycode·2021년 5월 9일
0

C.S (Computer Science)

목록 보기
21/40
post-custom-banner

동적 메모리 생성하기

  • heap 영역에 생성 - malloc 함수

파일 처리 성능 개선 기법 - 메모리에 파일 매핑

  • [start+offset] ~ [start+offset+length] 만큼의 물리 메모리 공간ㅇ르 mapping할 것을 요청
  • 보통 start: NULL 또는 0 사용, offset: mapping되기 원하는 물리 메모리 주소로 지정
  • prot: 보호 모드 설정
    • PROT_READ(읽기 가능)
    • PROT_WRITE(쓰기 가능)
    • PROT_EXEC(실행 가능)
    • PROT_NONE(접근 불가)
  • flags: 메모리 주소 공간 설정
    • MAP_SHARED(다른 프로세스와 공유 가능)
    • MAP_PRITVATE(프로세스 내에서만 사용 가능)
    • MAP_FIXED(지정된 주소로 공간 지정
  • fd: device file에 대한 file descriptor

mmap 동작 방식으로 이해하는 메모리 동작 총 정리

  1. mmap 실행 시, 가상 메모리 주소에 file 주소 매핑 (가상 메모리 이해)
  2. 해당 메모리 접근 시, (요구 페이징, lazy allocation)
  • 페이지 폴트 인터럽트 발생
  • OS에서 file data를 복사해서 물리 메로리 페이지에 넣어줌
  1. 메모리 read시: 해당 물리 페이지 데이터를 읽으면 됨 (메모리 access)
  2. 메모리 write시: 해당 물리 페이지 데이터 수정 후, 페이지 상태 flag 중 dirty bit를 1로 수정
  3. 파일 close 시, 물리 페이지 데이터가 file에 업데이트됨 (성능 개선)

파일, 메모리, 가상 메모리

  • 장점:

    • read() write()시 반복적인 파일 접근을 방지하여 성능 개선
    • mapping된 영역은 파일 처리를 위한 lseek()을 사용하지 ㅇ낳고 간단한 포인터 조작으로 탐색 가능
  • 단점:

    • mmap은 페이지 사이즈 단위로 매핑
      • 페이지 사이즈 단위의 정수배가 아닌 경우, 한 페이지 정도의 공간 추가 할당 및 남은 공간을 0으로 채워주게 됨

메모리에 파일 매핑

  • addr에 mapping된 물리 메모리 주소 해제한다.
  • length: mapping된 메모리의 크기 (mmap에서 지정했던 동일 값을 넣음)

  • start: mmap()를 통해 리턴 받은 메모리 맵의 시작 주소.
  • length: 동기화를 할 길이. 시작 주소로 부터 길이를 지정하면 된다
  • flags
    • MS_ASYNC: 비동기 방식, 동기화(Memory→File)하라는 명령만 내리고 결과에 관계 없이 다음 코드 실행
    • MS_SYNC: 동기 방식, 동기화(Memory→File)가 될 때까지 블럭 상태로 대기
    • MS_INVALIDATE: 현재 메모리 맵을 무효화하고 파일의 데이터로 갱신. 즉, File→Memory.

inode 메타데이터 - stat함수

  • inode정보를 한번에 가져올 수 있는 함수

stat 구조체

post-custom-banner

0개의 댓글