Just do IT
article thumbnail

동적 메모리 생성하기

   * heap 영역에 생성 - mollac 함수

 

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

   * [start+offset] ~ [start+offset+length] 만큼의 물리 메모리 공간을 mapping 요청

   * 보통 start: NULL 또는 0 사용, offset: mapping되기 원하는 물리 메모리 주소로 지정

   * prot: 보호 모드 설정

      - PROT_READ(읽기 가능)

      - PROT_WRITE(쓰기 가능)

      - PROT_EXEC(실행 가능)

      - PROT_NONE(접근 불가)

   * flags: 메모리 주소 공간 설정

      - MAP_SHARED(다른 프로세스와 공유 가능)

      - MAP_PRIVATE(프로세스 내에서만 사용 가능)

      - MAP_FIXED(지정된 주소로 공간 지정)

   * fd: device file 대한 file descriptor

 

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

   1. mmap 실행 , 가상 메모리 주소에 file 주소 매핑 (가상 메모리 이해)

   2. 해당 메모리 접근 (요구 페이징, lazy allocation)

      - 페이지 폴트 인터럽트 발생

      - OS에서 file data 복사해서 물리 메모리 페이지에 넣어줌

   3. 메모리 read : 해당 물리 페이지 데이터를 읽으면

   4. 메모리 werite : 해당 물리 페이지 데이터 수정 , 페이지 상태 flag dirty bit 1 수정

   5. 파일 close 물리 페이지 데이터가 file 업데이트 (성능 개선)

 

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

   * 장점

      - read() write() 반복적인 파일 접근을 방지하여 성능 개선

      - mapping 영역은 파일 처리를 위한 lseek() 사용하지 않고 간단한 포인터 조작으로 탐색 가능하다

   * 단점

      - mmap 페이지 사이즈 단위로 매핑

      - 페이지 사이즈 단위의 정수배가 아닌 경우, 페이지 정도의 공간 추가 할당 남은 공간을 0으로 채워주게 된다

 

Inode 방식 파일 시스템

 

Inode 메타데이터

   * stat 함수

   * stat 구조체

 

하드 링크와 inode -st_nlink

 

가상 파일 시스템 - st_dev

 

Standard Stream (표준 입출력) 파일 시스템콜

   * command 실행되는 프로세스는 가지 스트림을 가지고 있다

      - 표준 입력 스트림 (Standard Input Stream) stdin

      - 표준 출력 스트림 (Standard Output Stream) stdout

      - 오류 출력 스트림 (Standard Error Stream) stderr

   * 모든 스트림은 일반적인 plain text console 출력하도록 되어 있음

 

출처 : 제로베이스

profile

Just do IT

@AmyG

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!