동적 메모리 생성하기
* 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 에 출력하도록 되어 있음
출처 : 제로베이스
'공부 Note > 시스템 프로그래밍' 카테고리의 다른 글
Chapter 08 시스템 프로그래밍 (1) (0) | 2022.02.07 |
---|---|
Chapter 07 쉘 스크립트 (0) | 2022.02.07 |
Chapter 06 시그널 (0) | 2022.02.07 |
Chapter 05 프로세스간 커뮤니케이션 (0) | 2022.02.07 |
Chapter 04 시스템 프로그래밍 (4) (0) | 2022.02.07 |