우리가 어떤 파일을 열거나 저장할 때, 그 이면에서는 운영체제가 파일을 관리하고 읽고 쓰는 작업을 대신 처리하고 있습니다. 이런 역할을 담당하는 부분이 바로
파일 시스템 인터페이스
입니다.
이 글의 썸네일은 계층 구조로 정리된 디렉터리와 여러 종류의 파일들이 아이콘처럼 연결된 모습으로, 운영체제가 사용자와 파일을 어떻게 이어주는지를 시각화한 이미지입니다.
이번 글에서는 파일 시스템의 기본 개념부터, 디렉터리 구조, 보호 방식, 메모리 사상 파일 등 실제로 자주 사용하는 기능들을 하나하나 살펴보겠습니다.
운영체제에서
파일(file)
이란 데이터를 연속적으로 저장한 논리적인 단위입니다. 예를 들어 텍스트 파일, 이미지 파일, 실행 파일 등 다양한 종류의 데이터가 모두 '파일'이라는 이름으로 관리됩니다.
이름(Name)
: 사용자가 파일을 식별할 수 있게 하는 텍스트
형식(Type)
: 텍스트, 바이너리 등 데이터 종류
위치(Location)
: 디스크 상의 주소 또는 포인터
크기(Size)
: 파일이 차지하는 바이트 수
보호 정보(Protection)
: 접근 권한, 읽기/쓰기 허가 등
파일을 사용할 때, 운영체제는 어떤 방식으로 데이터를 읽고 쓸지를 결정해야 합니다. 이를
접근 방식(access method)
이라고 합니다.
✅
1. 순차 접근(Sequential Access) 🔗
가장 일반적인 방식으로, 앞에서부터 차례대로 데이터를 읽는 방식입니다.
예: 텍스트 파일, 음악 파일, 영상 스트리밍 등
예: 앞에서부터 → A → B → C 순서로만 접근 가능
✅
2. 직접 접근(Direct Access) 🔗
특정 위치의 데이터를 바로 찾아가는 방식입니다. 레코드나 블록 단위로 나뉜 데이터를 다룰 때 사용합니다.
예: 데이터베이스 파일, 블록 장치 파일 등
예: 임의의 위치 → 바로 C → B → A 순서로 접근 가능
✅
3. 인덱스 접근(Index Access) 🔗
인덱스를 사용해 원하는 위치로 바로 이동하는 구조입니다. 책의 목차처럼 필요한 내용을 빠르게 찾을 수 있습니다.
인덱스 접근은 단순히 목차처럼 이동하는 비유 외에도, 시스템 내부에서는 다음과 같은 방식으로 구현됩니다
- 디스크에 저장된 각 파일은 '인덱스 블록(inode 또는 index table)'을 가지고 있습니다.
- 이 블록에는 각 데이터 블록의 주소가 순서대로 기록되어 있습니다.
- 따라서 원하는 레코드 번호를 알면 해당 인덱스를 조회해서 바로 접근 가능합니다.
예: 3번째 블록 주소 → Index[3] → 0x00FA4
이 방식은 대규모 데이터베이스, 로그 시스템, 파일 시스템 구현에서 많이 활용됩니다.

세 가지 접근 방식(순차, 직접, 인덱스)을 비교하는 구조도
디렉터리는 파일을
논리적으로 분류하고 정리하는 공간
입니다. 마치 책장을 폴더로 나누어 책을 정리하듯, 디렉터리는 파일들을 구조적으로 관리해줍니다.
- 모든 파일이 같은 디렉터리에 있음
- 단순하지만 이름 충돌이 잦음
- 사용자마다 독립된 디렉터리
- 사용자 간 파일 이름 중복 허용
- 폴더 안에 폴더, 그 안에 또 파일이 있는 일반적인 방식
- 파일 시스템 대부분이 사용

트리 구조 디렉터리 예시
- 심볼릭 링크나 바로가기 등을 통해 한 파일이 여러 위치에서 접근 가능
운영체제는 각 파일에 대해
누가 무엇을 할 수 있는지
를 제어합니다. 이를
파일 보호(file protection)
라고 합니다.
읽기(Read)
: 내용을 보기만 가능
쓰기(Write)
: 내용을 수정 가능
실행(Execute)
: 프로그램으로 실행 가능
운영체제는 다음과 같은 방식으로 권한을 관리합니다:
- 사용자(user)
- 그룹(group)
- 기타 사용자(others)
리눅스나 유닉스 시스템에서 파일 보호 권한은
rwxr-x--x
같은 형태로 표시됩니다. 9개의 문자열을 3개씩 묶어서 각 권한을 표시합니다.
r, w, x 순서로 읽기, 쓰기, 실행 권한을 표시합니다.
위치 | 권한 | 의미 |
---|
사용자 (user) | rwx | 읽기, 쓰기, 실행 가능 |
---|
그룹 (group) | r-x | 읽기, 실행만 가능 (쓰기 불가) |
---|
기타 사용자 (others) | --x | 실행만 가능 (읽기/쓰기 불가) |
---|
예: chmod 751 somefile.txt
→ rwxr-x--x
- 사용자는 모든 권한
- 그룹은 읽기+실행
- 나머지 사용자들은 실행만 가능
이 구조는 프로세스 격리, 보안 설정, 접근 제한에 중요한 역할을 합니다.
🚀
메모리 사상 파일 (Memory-mapped Files) 🔗
프로세스가 파일을 열면, 운영체제는 파일 내용을 메모리에 매핑할 수 있습니다. 이를
메모리 사상 파일(memory-mapped file)
이라고 부릅니다.
👨💻
즉, 파일을 디스크에서 읽는 것이 아니라 마치 메모리의 일부처럼 접근할 수 있게 해주는 기법입니다.
파일을 메모리에 매핑해서 사용하는 메모리 사상 방식은 기존의
read()
방식보다 성능 면에서 훨씬 유리합니다.
예를 들어, 텍스트 파일을 100MB 읽는 경우
read()
방식: 매번 시스템 콜을 통해 디스크에서 버퍼로 읽고, 복사하여 처리 → 복사 및 이동 오버헤드 발생
mmap()
방식: 파일이 메모리처럼 접근되므로 포인터
하나로 바로 읽고 수정 가능 → 오버헤드 최소화
실제 벤치마크에서는 mmap
방식이 read
대비 1.5~2배 이상 빠르게 동작하는 경우가 많습니다.
- 파일을
mmap()
시스템 콜로 메모리에 매핑
- 이후
read()
없이 포인터처럼 데이터 접근 가능
- 변경된 내용은 나중에 파일에 반영
기존 방식은 매번 디스크에서 데이터를 읽어야 하지만, mmap은 메모리에서 바로 접근하므로 속도가 훨씬 빠릅니다. 대량 파일 처리 시 수백 MB/s 이상의 차이가 날 수 있습니다.
이는 데이터베이스, 캐시 시스템, 고속 I/O 등에 많이 활용됩니다.
파일 시스템 인터페이스는 모든 프로그램의 기반이 되는 구조입니다.
이번 글에서는 파일 시스템의 핵심 인터페이스인
파일 구조, 접근 방식, 디렉터리 구성, 보호 기법
을 중심으로 정리했습니다. 다음 글에서는 실제
파일 시스템 구현
을 중심으로 깊이 있게 들어가겠습니다.