OS

[운영체제] 파일 시스템이란??

ch010104 2025. 6. 2. 13:52

1. 파일 시스템이란?

1) 파일이란?

  • 관련된 정보의 논리적 집합
  • 사용자는 파일을 논리적으로 다루지만, 운영체제는 물리적으로 저장 장치에 맵핑함

2) 파일 시스템이란?

  • 운영체제의 구성요소로서 두 가지 주요 기능을 담당함
  1. 파일 관리 기능 제공
    • 생성, 삭제, 읽기, 쓰기, 공유, 보호 등
  2. 저장 장치에 파일 저장
    • ex) FAT, NTFS, ext2/3, NFS 등 다양한 파일 시스템 존재

2. 파일의 구성 요소

1) 파일의 종류

  • 프로그램 파일: 소스 코드, 오브젝트 파일 등
  • 데이터 파일: 텍스트, 이미지, 음성 등 바이너리 데이터

2) 파일의 구조

  • 바이트 나열 (비구조적)
  • 고정/가변 크기 레코드 (간단 구조)
  • 포맷화된 문서 (복잡 구조)

 

💡 운영체제는 대부분 파일을 바이트 나열로 처리

 

3) 파일의 속성 (Attributes)

  • 이름, 확장자, 위치, 크기, 생성/수정 시간, 사용자, 접근 권한 등
  • 보통 디렉토리에 메타데이터 형태로 저장됨

4) 파일 조작 연산

  • create(), read(), write(), open(), close(), seek(), truncate(), delete()

예시 코드

int wfd, rfd;
char buf[256];
rfd = open("./readme", O_RDONLY, S_IRUSR);
wfd = open("./outfile", O_WRONLY, S_IWUSR);
read(rfd, buf, sizeof(buf));
write(wfd, buf, sizeof(buf));
close(wfd);
close(rfd);

3. 디렉토리 (Directory)

1) 디렉토리란?

  • 파일 정보를 관리하는 구조체
  • 사용자 파일 관리, 보호, 공유 기능 제공

2) 디렉토리 조작 연산

  • mkdir, rmdir, opendir, closedir, readdir, stat

4. 디렉토리 구조의 유형

 

1) 단일 디렉토리 구조 (Single-Level Directory)

 

구조

  • 모든 파일이 하나의 디렉토리에 존재
  • 시스템 전체에 하나의 전역 디렉토리만 존재함

특징

  • 매우 단순한 구조
  • 파일 검색이 빠르고 간단함

단점

  • 이름 충돌(Name Conflict) 발생: 같은 이름의 파일을 만들 수 없음
  • 파일 그룹화 불가능: 관련 파일을 분류하거나 관리하기 어려움

예시

/
├── file1.txt
├── file2.txt
└── program.c

2) 2단계 디렉토리 구조 (Two-Level Directory)

 

구조

  • 각 사용자마다 고유한 디렉토리를 가짐
  • 사용자 디렉토리 아래에 각자의 파일을 보관

특징

  • 사용자 간 파일 이름 충돌 없음 (각 사용자 영역이 독립적)
  • 사용자가 자신의 디렉토리 내에서 자유롭게 파일을 생성

단점

  • 사용자 내에서 이름 충돌 가능
  • 파일을 공유하거나 그룹화하기 어려움

예시

/
├── userA
│   ├── report.doc
│   └── code.c
└── userB
    ├── report.doc
    └── image.jpg

3) 트리 구조 디렉토리 (Tree-Structured Directory)

 

구조

  • 루트 디렉토리를 중심으로 서브 디렉토리를 계층적으로 확장
  • 파일과 디렉토리는 유일한 경로를 가짐

특징

  • 효율적인 파일 검색 가능
  • 파일과 디렉토리를 그룹핑 및 정리 가능
  • 동일한 파일 이름을 서로 다른 디렉토리에서 허용

단점

  • 파일 간 공유 불가 (같은 파일을 두 위치에서 동시에 접근 불가)

예시

/
├── home
│   ├── userA
│   │   └── project
│   │       └── report.doc
│   └── userB
│       └── image.jpg
└── etc
    └── config.txt

4) 비순환 그래프 구조 디렉토리 (Acyclic Graph Directory)

 

구조

  • 트리 구조를 확장한 형태로, 파일이나 디렉토리를 여러 사용자와 공유 가능
  • 파일 또는 디렉토리에 대해 **링크(하드 링크, 심볼릭 링크)**를 허용

특징

  • 파일 공유 가능: 협업, 라이브러리 공유 등 유용
  • 공간 낭비 없이 동일 파일을 여러 디렉토리에서 참조 가능

단점

  • 순환(Cycle) 발생 가능 → 이를 방지하기 위해 **비순환(Acyclic)**을 유지해야 함
  • 삭제 처리 복잡성: 참조 카운트(reference count)를 이용하여 마지막 참조가 제거될 때 실제 삭제

예시

/
├── userA
│   └── shared -> /common/lib/tool.jar
├── userB
│   └── shared -> /common/lib/tool.jar
└── common
    └── lib
        └── tool.jar

 


5. 디스크 공간 할당 방식

  • 운영체제는 파일을 논리 블록 단위로 나누고, 이를 디스크의 물리 블록에 매핑함
  • 이를 위한 대표적인 3가지 방식은 다음과 같음

1) 연속 할당 (Contiguous Allocation)

  • 파일을 디스크의 연속된 블록에 저장
  • 디렉토리에 시작 블록과 길이 정보 저장

장점: 빠른 순차/직접 접근
단점: 외부 단편화 발생, 공간 부족 시 파일 확장 어려움
해결책: 공간 압축


2) 연결 할당 (Linked Allocation)

  • 블록이 디스크에 흩어져 있고, 포인터로 연결
  • 디렉토리에는 시작/끝 블록만 저장
  • 각 블록은 다음 블록 번호를 포함

장점: 외부 단편화 없음
단점: 직접 접근 비효율적, 포인터 공간 소모
대표 예시: FAT(File Allocation Table)


3) 색인 할당 (Indexed Allocation)

  • 파일마다 색인 블록을 생성하여 모든 블록 번호 저장
  • 디렉토리는 색인 블록 번호만 관리

장점: 순차/직접 접근 모두 효율적, 외부 단편화 없음
단점: 작은 파일은 색인 블록이 공간 낭비 발생 가능(색인 블록에서 -1로 표시된 공간은 사용 x)