백과 블로그
홈블로그소개

백과의 개인 블로그 입니다. Contact : ksu9801@gmail.com

운영체제

운영체제의 파일 시스템

백과
2025년 8월 4일
5분 읽기
목차
📚 파일 시스템
✅ 파일과 디렉터리
📌 파일
📌 디렉터리
✅ 파일 할당
📌 읽고 쓰는 단위
📌 연결 할당
📌 색인 할당
✅ 파일 시스템
📌 아이노드 기반 파일 시스템
📌 EXT4 파일 시스템
📌 하드 링크와 심볼릭 링크
📌 마운트

목차

📚 파일 시스템
✅ 파일과 디렉터리
📌 파일
📌 디렉터리
✅ 파일 할당
📌 읽고 쓰는 단위
📌 연결 할당
📌 색인 할당
✅ 파일 시스템
📌 아이노드 기반 파일 시스템
📌 EXT4 파일 시스템
📌 하드 링크와 심볼릭 링크
📌 마운트

image

📚 파일 시스템

  • 파일 시스템 이란, 보조 기억 장치의 정보를 파일 및 디렉터리의 형태로 저장하고 관리할 수 있도록 하는 운영체제 내부 프로그램
  • 파일 시스템 덕분에, 보조기억 장치에 있는 수많은 정보의 덩어리를 파일과 디렉터리의 형태로 저장하고 관리할 수 있다.
  • 한 운영체제 내에서 여러 파일 시스템을 사용 할 수 있고, 파일 시스템이 달라지면 보조기억장치의 정보를 다루는 방법도 달라진다.

✅ 파일과 디렉터리

  • 파일 시스템을 이해하려면, 파일과 디렉터리가 보조기억장치에 어떻게 저장될 수 있는지 이해해야 한다.

📌 파일


  • 파일은 파일의 이름, 파일을 실행하기 위한 정보, 파일과 관련한 부가 정보로 구성되어 있다.
  • 여기서 파일과 관련한 부가 정보를 속성 혹은 메타데이터 라고 부른다.
    • 여기에는, 파일의 형싣, 위치, 크기등 이 포함된다.
  • 이러한 파일을 다루는 모든 작업은 운영체제에 의해서 이뤄진다.
    • 즉, 응용 프로그램은 임의로 파일을 할당받아 조작하고 저장할 수 없고, 파일을 다루는 시스템 콜을 이용해야 한다.

image

  • 프로세스가 시스템 콜을 통해 읽고 쓸 수 있는 10개의 파일을 할당 받았다면, 프로세스는 할당을 받아 사용중인 파일을 구분할 수 있어야 한다.
  • 이를 위해 프로세스는 파일 디스크립터 (윈도우는 파일 핸들) 정보를 사용합니다.
  • 운영체제는 프로세스가 새로 파일을 열거나 생성할 때, 해당 파일에 대한 파일 디스크립터를 프로세스에 할당합니다.

파일 디스크립터 관련 글

  • 정리가 잘되어 있는 포스팅이 있어, 연관 링크를 통해 소개 드립니다.

파일 디스크립터는 파일만 식별하지 않는다. 파일 디스크립터는, 파일 뿐만 아니라, 입출력 장치, 파이프, 소켓 또한 식별합니다.

번호용도C/C++ 매크로
0표준 입력STDIN_FILENO
1표준 출력STDOUT_FILENO
2표준 에러 출력STDERR_FILENO
3↑파일, 소켓 등(사용자가 open 등으로 얻는 디스크립터)

📌 디렉터리


리눅스 기준으로 설명됩니다.

  • 운영체제는 파일을 일목요연하게 관리하기 위해 디렉터리를 이용합니다.
    • 윈도우는 폴더라고 부릅니다.
  • 디렉터리는 트리 구조로 관리된다.

image

  • 여기서 최상위 노드에 있는 디렉터리를 루트 디렉터리 라고 한다.
    • 흔히, 슬래시(/) 로 표현
  • 슬래시는 디렉터리를 구분하는 구분자로도 사용된다.
    • 위 사진에서, bin 폴더와 pi 폴더는, /bin, /home/pi 로 표현할 수 있다.
    • 이렇게 디렉터리 정보를 활용해 파일 위치를 특정하는 정보를 경로라고 한다.

파일과 디렉터리를 별개인가?

  • 그렇지 않고, 디렉터리를 조금 특별한 파일로 간주합니다.
  • 데럭터리에 속한 요소의 관련 정보가 테이블의 형태로 표현되고, 테이블 형태로 표현된 정보의 행 하나 하나를 디렉터리 엔트리라고 한다.
  • 디렉터리 엔트리에는 파일의 이름과 파일이 저장된 위치를 유추할 수 있는 정보가 반드시 포함되어 있어야 한다. image

✅ 파일 할당

  • 파일과 디렉터리는 어떻게 보조기억장치에 저장되는지 확인해보자.

📌 읽고 쓰는 단위


  • 운영체네는 파일과 디렉터리를 블록이라는 단위로 읽고 쓴다.
  • 하나의 파일이 보조기억장치에 저장될 때는 하나 이상의 블록을 할당받아 저장된다.
    • 보통 블럭은 4096바이트 정도이다.

image

  • 파일 시스템에 따라, 파일 및 디렉터리를 어떤 번호의 블록에 어떻게 할당하는지 다를 수 있다.
    • 연결 할당, 색인 할당 등이 있다.

📌 연결 할당


  • 연결 할당 방법은, 각 블록의 일부에 다음 블록의 주소를 저장하여 각각의 블록이 다름 블록을 가르키는 형태로 할당하는 방법이다.
    • Linked List 자료구조를 생각하면 된다.

image

📌 색인 할당


  • 색인 할당 방식은, 파일을 이루는 모든 블록의 주소를 색인 블록이라는 특별한 블록에 모아 관리하는 할당 방식이다.
  • 색인 할당을 사용하는 파일 시스템에서는 디렉터리 엔트리에 파일 이름과 함께 색인 블록 주소를 명시한다. image

✅ 파일 시스템

  • 파일 시스템은 다양하고, 운영체제마다 각기 다른 파일 시스템을 지원한다.
  • 같은 운영체제라도 다른 파일 시스템을 사용하거나 하나의 컴퓨터에서 여러 파일 시스템을 사용할 수 있습니다.

파티셔닝

  • 하나의 보조기억 장치 내에는 다양한 종류의 파일 시스템이 사용될 수 있다.
  • 그렇게 되려면 보조기억장치 내에 파일 시스템을 적용할 영역이 구분되어야 한다.
  • 이때, 영역을 구획하는 작업을 파티셔닝이라고 한다.
  • 다양한 파일 시스템 중 어떤 파일 시스템을 사용할지는 보조 기억 장치를 포매팅 할때 결정합니다.

포매팅은, 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업 흔히 말하는 포멧 작업

  • USB 메모리를 포멧할때, 리눅스 운영체제를 설치하는 과정에서, 각각 어떤 파일 시스템을 고를것인지 선택할 수 있다.

image

각 운영체제별로 지원하는 파일 시스템의 종류는 정말 다양하다. 대표적으로 아래와 같은 종류가 있다.

  • 윈도우 : NT 파일 시스템(NTFS), Resilient File System(ReFS)
  • 리눅스 : EXT, EXT2, EXT3, EXT4, XFS, ZFS 등
  • 맥OS : APFS
  • 이중 리눅스 계열의 파일 시스템(EXT, XFS 등)은 개발자가 자주 접하게 될 텐데, 아이노드라는 색인 블록을 기반으로 파일을 할당합니다.

📌 아이노드 기반 파일 시스템


  • 아이노드 기반 파일 시스템에서는 파일마다 각각의 아이노드를 가지고 있다.
  • 아이노드는, 파일이 저장된 위치와 속성 등 사실상 파일의 모든 것이 담겨 있다. (파일의 이름 제외)
  • 아이노드 기반 파일시스템을 사용하는 맥OS 나 리눅스 운영체제의 경우, ls -li 명령어를 통해 확인할 수 있다.
ubuntu@ip-10-0-1-85:~$ ls -li
total 8
263266 drwxr-xr-x 7 root root   4096 Jul  3 00:32 server
262601 drwxr-xr-x 2  999 ubuntu 4096 Jul  3 00:32 slowlogs
  • EXT4 파일 시스템을 통해, 아이노드 기반 파일 시스템의 구성을 살펴보자.

📌 EXT4 파일 시스템


  • EXT4는 아이노드 기반의 색인 할당 방식으로, 위에 소개한 것 처럼, 블록으로 나눠 구성한다.

image

  • 부트 블록 하나와, 블록 그룹들로 나눠져 있다.
  • 부트 블록에는, 부팅과 파티션 관리를 위한 특별한 정보가 모여있는 영역이다.
  • 각 블록 그룹은, 슈퍼 블록, 그룹 식별자, 블록 비트맵, 아이노드 비트맵, 아이노드 테이블, 데이터 블록 으로 구성되어있다.

image

  • 아이노드는 보는 것 처럼, 파티션 내, 특정 영역에 모여 있게 된다.
  • 즉, 아이노드 기반 파일 시스템에서는 데이터 영역에 공간이 남아 있더라도, 아이노드 영역이 가득 차 더 이상의 아이노드를 할당할 수 없다면 운영체제는 새로운 파일을 생성할 수 없게 된다.

블록 하나에는 하나의 파일만 들어가나요?

  • 정확하게는 블록의 데이터 블록에는 하나의 파일의 일부만 저장되게 됩니다.
  • 쪼개진 데이터는 아이노드 테이블의 블록 포인터 정보를 통해 확인할 수 있다.

📌 하드 링크와 심볼릭 링크


  • 이 아이노드 시스템을 잘 이용하면 다음과 같은 링크 파일을 만들 수 있다.
  • 하드 링크 파일 : 원본 파일과 같은 아이노드를 공유하는 파일
  • 심볼릭 링크 파일 : 원본 파일을 가르키는 파일
  • 하드 링크 파일은, 같은 아이노드 번호를 갖는 파일을 생성하는 작업이므로, 하드 링크 파일과 원본 파일은 같은 파일 데이터를 공유하며, 하드 링크 파일 수정 시 원본 파일도 변경된다.
  • 심볼릭 링크 파일은, 파일 데이터를 공유하지 않고, 원본 파일의 위치만을 저장하기 때문에, 원본 파일에 영향을 끼치지는 않는다.
    • 윈도우의 바로가기 기능과 동일

📌 마운트


  • 마운트는, 어떤 저장장치의 파일 시스템에서 다른 저장장치의 파일시스템으로 접근할 수 있도록 파일 시스템에 편입시키는 작업을 의미.
    • 마운트 덕분에, USB 메모리를 테스크탑에 연결하면, 테스크톱에서 USB 메모리의 파일 시스템에 접근할 수 있게 된다.
  • 아래와 같은 데스크톱과 USB 메모리가 있다.

image

  • USB 메모리의 파일 시스템을 컴퓨터의 '/mnt' 경로로 마운트 하면, 다음과 같은 형태의 경로를 가지게 된다.

image

  • 유닉스나 리눅스 같은 운영체에서는 다음 명령어를 통해 파일 시스템을 마운트 할 수 있다.
$ mount -t ext4 -o ro /dev/sda /mnt/test
# /dev/sda 장치에 있는, EXT4 파일 시스템을, 읽기 전용으로(-o ro) /mnt/test 디렉토리에 마운트 해라

윈도우의 마운트(드라이브 연결) 방식 **윈도우에서는 "드라이브 문자(C:, D:, E: ...)"**가 마운트 지점(Mount Point) 역할을 한다. USB나 새 하드디스크, 파티션 등 저장장치를 연결하면 자동으로 드라이브 문자가 할당되고, 바로 접근 가능해진다. 예: USB 연결 → "E:", 외장하드 연결 → "F:" 이 과정을 윈도우에서는 **"자동 마운트(Automount)"**라고 부른다.

  • 리눅스/유닉스 vs 윈도우
리눅스/유닉스윈도우
마운트 방식원하는 디렉토리(예: /mnt, /media)에 수동 또는 자동 마운트드라이브 문자(C:, D:)로 자동 마운트
자동 마운트기본적으로 수동, 일부 상황(USB 등)은 자동거의 모든 경우 자동 마운트
마운트 포인트폴더(디렉토리)드라이브 문자