Open file state

open 이후의 파일 연산은 디스크가 아니라 열린 파일 상태를 거쳐 간다

파일 디스크립터는 프로세스와 커널의 열린 파일 테이블을 잇고, 커널은 파일 포인터·모드·참조 수·잠금 상태를 관리한다.

프로세스

fd = open(path, flags) 정수 핸들을 받고 이후 연산은 fd로 요청한다.
read / write / lseek 현재 파일 포인터를 기준으로 데이터 위치가 결정된다.

커널 열린 파일 테이블

fd 3 -> open file entry

offset read와 write 뒤 자동으로 전진한다.
flags O_RDONLY, O_WRONLY, O_APPEND 같은 접근 모드다.
ref count 복제된 fd와 공유 상태를 추적한다.

파일 시스템

inode 속성과 블록 위치
blocks 실제 데이터 조각
mode 권한 검사 기준
lock 동시 수정 조정
create 새 inode와 디렉토리 항목을 만든다.
open fd와 열린 파일 엔트리를 할당한다.
read/write offset 위치에서 데이터를 옮긴다.
seek offset을 원하는 위치로 바꾼다.
close fd를 해제하고 버퍼를 반영한다.

접근 방식

  • 순차 접근 read 뒤 offset이 앞으로 간다.
  • 직접 접근 lseek 뒤 원하는 위치를 읽는다.

잠금 기준

  • 권고적 잠금 프로세스가 규칙을 지킨다.
  • 레코드 잠금 파일 일부만 보호해 병행성을 남긴다.

닫지 않으면 생기는 문제

close가 빠지면 열린 파일 카운트가 줄지 않아 fd 누수가 생긴다. 서버에서는 결국 open 실패로 이어질 수 있다.