C언어 학습 노트 : 14. 파일 시스템 기본 이론#

1. 파일 시스템의 정의#

  • 파일 시스템은 2차 저장장치(디스크 등)를 관리하는 방법이다.
  • 운영체제(OS)가 저장 장치에 대한 논리적 추상화를 제공하여, 사용자는 파일 단위로 데이터를 관리할 수 있다.
  • 파일은 프로세스가 접근 주체이며, 운영체제가 접근 권한과 동시성 문제를 제어한다.

2. 파일과 입출력#

  • 파일 오픈(open) → 사용 준비.

  • 파일 클로즈(close) → 자원 해제, 커널 테이블에서 제거.

  • 모든 파일은 반드시 open → 작업 → close 순서를 따라야 한다.

  • 버퍼(Buffer): 파일 입출력 과정에서 중간 저장 공간을 둔다.

    • Buffered I/O: 표준 라이브러리(fopen, fread 등)가 내부 버퍼를 사용해 성능을 높인다.
    • Unbuffered I/O: 시스템 호출(read, write)을 통해 즉시 장치에 접근한다.

3. 장치와 파일 추상화#

  • 운영체제는 장치를 파일로 추상화한다.

    • 예: 콘솔(모니터 + 키보드)은 /dev/tty 같은 장치 파일로 표현된다.
  • 따라서 입출력 방식이 파일, 소켓, 파이프 등 다양한 형태에서 동일한 인터페이스로 제공된다.


4. 핵심 포인트#

  1. 파일 시스템은 2차 저장 장치를 관리하는 운영체제의 핵심 구성 요소이다.
  2. 파일은 프로세스가 접근 주체이며, 동시 접근은 운영체제가 관리한다.
  3. 입출력 과정에는 버퍼링이 개입할 수 있으며, 이는 성능 최적화를 위한 핵심 기법이다.
  4. 장치는 파일로 추상화되므로, 다양한 입출력이 일관된 인터페이스를 가진다.
  5. 모든 파일은 open → 작업 → close 흐름을 지켜야 한다.

5. 지속적으로 관리할 내용#

  • 파일 시스템 종류(FAT, NTFS, ext4 등)에 따른 차이.
  • 동기 I/O vs 비동기 I/O.
  • 파일 권한(Unix 권한 비트, Windows ACL)과 보안.
  • 저널링(journaling)과 파일 시스템 복구 기법.

6. 실제 적용 예시#

  • 프로젝트에서 로그 파일 기록 시: fopen → fprintf → fclose 흐름 유지.
  • 네트워크 소켓 프로그래밍에서도 open/read/write/close 패턴이 동일하게 적용된다.
  • 성능이 중요한 경우 Buffered I/O vs Unbuffered I/O 차이를 고려해야 한다.

느낀점#

공부를 하고 나중에 올리는데 나는 C언어가 아니라 운영체제인줄 알고 태그나 카테고리 분류를 잘못할 뻔했다. 그만큼 C언어를 배우다보면 운영체제와 네트워크와 맞물려 있는 부분이 있는 것 같다.

파일시스템은 궁금해서 그랬는지 더 호기심이 가는 챕터였다. 나는 C언어에서 파일시스템을 좋아하나보다..