본문 바로가기
TIL (Today I Learned)/컴퓨터 시스템(CS)

[CS] 표준 입출력, Buffered IO #1

by 둥굴프 2022. 12. 14.
이 포스팅은 한국기술교육대학교 김덕수 교수님의 시스템 프로그래밍 (CSE 232)를 참고하여 작성되었습니다.

 

Block

- 파일 시스템의 추상화된 개념. 물리적 Disk를 추상.

운영체제 입장에서 file system은 block들의 나열이다.

- Block의 크기는 일반적으로 512~8192 bytes (2^n)

Sector size < Block size < Page size

- Disk (or block device) access의 최소 단위

 

File IO vs Disk IO

- File IO with system call

Access in a unit of byte

- Disk IO

Access in a unit of block

 

매번 byte단위로 Disk에 접근하는 것은 비효율적이다.

Buffer에 byte를 저장하고 일정 데이터가 쌓이면 커널이 Page write-back을 통해 Disk로 데이터를 이동시킨다.

 

Kernel buffer (Page cache)

- Page write-back 시점

(커널의) 메모리 공간이 부족할 때

내용이 변경 된 후, 일정 시간이 지나면

fsync(2) 호출 : 강제 동기화

 

- Write-back 시점은 user 입장에서 예측하기 어려움

비효율적일 수 있음

 

User-buffered IO

- What is your solution?

RAM(memory)상에 Buffer를 직접 만든다.

적절한 시점에 write한다.

 

쉽게 구현 가능하다.

하지만, block size와 system call 등을 알아야한다. (귀찮음)

이를 해결하기 위한 것이 stdio.h 표준 입출력 라이브러리다.

 

 

 

긴 글 읽어주셔서 감사드립니다.

22.12.14

댓글