CS/[도서] 이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접

[운영체제] 3-6. (1) 파일 시스템 (File System)

annovation 2025. 8. 4. 22:01

파일 시스템 (File System)

 

 마지막으로 운영체제가 어떻게 보조기억장치를 효과적으로 관리하는지 알아보자. 운영체제는 파일 시스템(File system)이라는 내부 프로그램을 통해서 보조기억장치에 있는 데이터를 관리한다.

 

💡파일 시스템(File system)

  • 파일 시스템(File system)은 운영체제가 보조기억장치(HDD, SSD 등)에 저장된 정보를 파일디렉터리(폴더)의 형태로 저장·관리할 수 있도록 하는 운영체제 내부 프로그램이다.
  • 파일 시스템 덕분에, 보조기억장치에 있는 많은 데이터를 파일/디렉터리 형태로 효율적으로 관리할 수 있다.
  • 한 운영체제 내에서도 여러 파일 시스템을 사용할 수 있고 파일 시스템이 달라지면 보조기억장치의 정보를 다루는 방법도 달라진다.
    • 예시 1 : Windows + Linux 멀티부팅
      • C: 드라이브 → NTFS (Windows 표준 파일 시스템)
      • D: 드라이브 → exFAT 또는 FAT32 (USB나 외장하드에서 주로 사용)
      • E: 드라이브 → EXT4 (Linux에서 주로 사용)
      • → 이런 식으로 하나의 운영체제(Windows 또는 Linux)가 여러 파일 시스템을 동시에 지원하며 읽고 쓸 수 있음
    • 예시 2 : USB, 외장하드, SD카드 등
      • 내장 SSD/HDD는 NTFS
      • USB 메모리는 FAT32/exFAT
      • 외장하드는 EXT4 
      • → 각기 다른 파일 시스템이 장치마다 적용되어 있어도, 운영체제가 모두 지원만 하면 동시에 접근 가능

파일과 디렉터리

 

 파일 시스템을 이해하기 위해 파일디렉터리가 무엇으로 이루어져있고, 보조기억장치에 어떻게 저장되는지 이해해야한다.

 

💡파일

  • 파일은 크게 이름, 실행 정보, 부가 정보(속성/메타데이터)로 구성된다.
  • 부가 정보(속성/메타데이터)에는 파일의 형식, 위치, 크기, 생성/수정/접근 시간 등 다양한 정보가 포함된다.
  • 파일 시스템이 다루는 모든 파일의 조작은 운영체제를 통해 이뤄지므로, 파일을 다루는 시스템 콜을 이용해야 한다.

 

🔎 파일 속성 예시 (stat, 파일 속성 창)

Linux stat 명령어

  • Linux의 stat 명령어 또는 Windows 속성창에서 파일의 메타데이터를 확인 가능
    • inode(아이노드) 번호, 권한, 링크 수, 크기, 소유자, 그룹, 접근/수정/변경 시간 등
    • inode는 유닉스 계열 파일 시스템에서 파일의 메타데이터를 저장하는 자료구조

 

💡시스템 콜(System Call)

  • 운영체제(OS)의 커널 기능(하드웨어 제어, 파일 접근, 프로세스 관리, 메모리 관리 등)을 사용자 프로그램(일반 애플리케이션)이 직접 사용할 수 없으니, 운영체제에게 특별히 요청하는 함수 호출(인터페이스)입니다.
  • 사용자 프로그램은 보안, 안정성, 시스템 보호를 위해 하드웨어 자원(메모리, 파일, 네트워크 등)에 직접 접근할 수 없고 대신 대신 운영체제 커널만이 하드웨어를 직접 제어
  • 그래서 “이 파일을 읽고 싶다”, “메모리를 더 할당받고 싶다”, “프로세스를 생성하고 싶다” 등의 요청은 시스템 콜을 통해서만 할 수 있음

 

💡파일 디스크립터(File Descriptor)

 

 프로세스가 시스템 콜을 통해 읽고 쓸 수 있는 10개의 파일을 할당받았다면 프로세스는 할당 받아 사용 중인 파일을 구분할 수 있어야 한다. 이를 위해 프로세스는 파일 디스크립터(File Descriptor)라는 정보를 사용한다. (윈도우에서는 파일 핸들(File Handle)이라고 부른다.)

  • 프로세스가 열 수 있는 파일(또는 입출력 자원)을 구분하는 정수 값(식별자)
  • 운영체제는 프로세스가 새로 파일을 열거나 생성할 때 해당 파일에 대한 파일 디스크립터를 프로세스에 할당한다. 즉, 각 프로세스는 자신이 열어서 사용하는 파일마다 고유한 디스크립터 번호를 받는다.
  • 프로세스는 시스템 콜을 통해 여러 개의 파일을 열 수 있고, 각각의 열린 파일은 파일 디스크립터(정수값)로만 식별된다.

 

🔎 파일 디스크립터(File Descriptor) 예시

 

1. 파일 디스크립터로 파일 열기

int file_descriptor1 = open("example.txt", O_WRONLY);
printf("파일 디스크립터: %d\n", file_descriptor1);

int file_descriptor2 = open("example2.txt", O_WRONLY);
printf("파일 디스크립터: %d\n", file_descriptor2);

int file_descriptor3 = open("example3.txt", O_WRONLY);
printf("파일 디스크립터: %d\n", file_descriptor3);
  • open() 시스템 콜로 각각의 파일(example.txt, example2.txt, example3.txt)을 쓰기 모드(O_WRONLY)로 연다.
  • open() 함수는 파일이 성공적으로 열리면 해당 파일을 식별할 수 있는 정수값(파일 디스크립터)을 반환
  • 예를 들어, file_descriptor1, file_descriptor2, file_descriptor3는 각각 3, 4, 5와 같은 값을 가질 수 있음 (일반적으로 0, 1, 2는 표준 입력/출력/에러에 예약되어 있음)
  • 즉, 운영체제 입장에서는 파일 이름이 아니라 이 '번호'로만 파일을 구분함

 

2. 파일 디스크립터로 파일에 쓰기

write(file_descriptor1, text, sizeof(text) - 1);
write(file_descriptor2, text, sizeof(text) - 1);
write(file_descriptor3, text, sizeof(text) - 1);
  • write() 시스템 콜은 첫 번째 인자로 파일 디스크립터 번호를 받음
  • 즉, 3번 파일에 쓰고 싶으면 write(3, ...), 4번 파일이면 write(4, ...)
  • 파일 이름이 아니라 디스크립터 번호로만 파일을 식별

 

3. 파일 닫기

close(file_descriptor1);
close(file_descriptor2);
close(file_descriptor3);
  • 파일 작업이 끝나면 반드시 close() 시스템 콜로 파일을 닫아야 함
  • 역시 파일 이름이 아니라 디스크립터 번호를 넘겨서 닫음

 

🔎 참고로, 파일 디스크립터는 파일만을 식별하지 않는다!

  • 파일뿐 아니라, 표준 입력(키보드), 표준 출력(모니터), 표준 에러(모니터), 파이프, 소켓 등
  • 운영체제에서 입출력이 가능한 거의 모든 대상을 "파일 디스크립터"라는 정수값으로 관리
  • 표준 파일 디스크립터 번호
파일 디스크립터 번호 용도
0 표준 입력 (stdin, 키보드)
1 표준 출력 (stdout, 모니터)
2 표준 에러 (stderr)

 

 

💡디렉터리

  • 운영체제는 여러 파일을 일목요연하게 관리하기 위해 디렉터리(Directory) 구조를 사용한다.
  • 윈도우에서는 ‘폴더(folder)’라고 부르며, 계층적(트리 구조)으로 디렉터리가 구성된다.

 

🔎 트리 구조 디렉터리(Tree-structured directory)

트리 구조 디렉터리(Tree-structured directory)

  • 트리 구조 디렉터리는 최상위 디렉터리(루트, /)와 그 하위에 여러 서브디렉터리가 포함된 계층적 구조를 가진다.
  • 각 디렉터리(폴더)는 파일과 또 다른 하위 디렉터리를 포함할 수 있다.
  • 루트 디렉터리에서 시작해, 하위 디렉터리를 계층적으로 연결하여 파일 또는 폴더의 위치를 경로(path)로 표현한다.
    • ex. /home/ann/a.sh  /(루트) 아래 home 디렉터리, 그 안의 ann 디렉터리, 그 하위의 a.sh 파일을 의미
  • 트리 구조 덕분에 파일과 폴더를 체계적으로 관리할 수 있고, 각 파일/폴더는 경로로 고유하게 구분된다.
윈도우에서는 보통 드라이브 문자(C:\ 등)가 최상위 디렉터리 역할

 

 

🔎 디렉터리 엔트리(Directory Entry)

 

 여기까지 보았을 때, 파일과 디렉터리가 별개의 것이라고 생각할 수 있지만, 디렉터리는 일종의 '특수 파일'로 내부에 하위 파일/디렉터리의 목록을 엔트리(테이블) 형태로 저장한다.

  • 디렉터리 엔트리(Directory Entry)는 디렉터리에 속한 요소의 관련 정보가 포함된 파일이다.
  • 디렉터리에 속한 요소의 관련 정보는 테이블(표) 형태로 표현되며, 테이블 형태로 표현된 정보의 행을 디렉터리 엔트리(Directory Entry)라고 한다.
  • 디렉터리 엔트리에는 파일/디렉터리 이름파일이 저장된 위치 정보(주소, 아이노드 등)가 반드시 포함되어 있다.
  • 디렉터리 탐색 시, 디렉터리 엔트리의 이름을 따라 실제 파일/디렉터리 위치(주소)를 찾아간다. 디렉터리 엔트리를 통해 보조기억장치에 저장되어 있는 위치를 알 수 있는 것이다.

 

디렉터리 엔트리(Directory Entry) 예시

디렉터리 엔트리(Directory Entry)

 

  • .. : 상위 디렉터리(부모)를 가리킴
  • . : 자기 자신(현재 디렉터리)를 가리킴
  • minchul, guest : 각각의 하위 디렉터리(폴더)의 위치를 가리키는 정보

 


보조기억장치 내 저장 방식

 

💡파일 할당

 

이번에는 파일과 디렉터리가 어떻게 보조기억장치 안에 저장되는지 알아보자.

  • 운영체제는 블록(block) 단위로 파일/디렉터리를 보조기억장치에 저장
  • 보통 1블록 = 4096바이트
  • 각 파일 시스템마다 파일이 저장되는 방식(할당 방식)이 다르다.

 

💡저장 방식(할당 방식)의 종류

 

1. 연결 할당 (Linked Allocation)

 연결 할당 (Linked Allocation)

  • 각 블록이 연결리스트처럼 구성된 형태로, 블록 내부에 다음 블록의 주소가 저장되어있는 형태로 할당하는 방식이다.
  • 디렉터리 엔트리에는 첫 번째 블록의 주소 파일의 길이만 저장
  • 파일에 접근할 때는 첫 블록부터 시작해서, 각 블록이 가리키는 주소를 따라가며 모든 데이터를 읽어옴
  • 장점 : 파일이 연속된 공간에 저장되지 않아도 됨
  • 단점 : 임의 접근(random access)이 느림

 

2. 색인 할당 (Indexed Allocation)

 

색인 할당 (Indexed Allocation)

  • 각 파일의 모든 블록 주소를 색인 블록(index block)에 저장
  • 색인 블록에 모든 데이터 블록의 번호가 리스트로 저장됨
  • 디렉터리 엔트리에는 색인 블록의 주소만 저장
  • 장점 : 임의 접근(random access) 용이, 파일 단편화에도 유연
  • 단점 : 색인 블록도 별도 공간 필요

출처

https://www.hanbit.co.kr/store/books/look.php?p_code=B3079890360

 

이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접

기술 면접과 실무에 필요한 CS 지식, 한 권으로 끝내자!

www.hanbit.co.kr


이미지 출처

1) Linux stat 명령어

https://www.geeksforgeeks.org/linux-unix/stat-command-in-linux-with-examples/

 

Stat command in Linux with examples - GeeksforGeeks

Discover the powerful 'stat' command in Linux: Learn how to view detailed file and filesystem information, customize outputs, and effectively manage system data.

www.geeksforgeeks.org

2) 트리 구조 디렉터리

https://wonit.tistory.com/196

 

[자료 구조] - 트리 자료 구조(1)-기본 트리 용어 및 개념 정리 :: Tree Data Structure.

트리 자료구조 트리 자료구조는 우리가 일상을 살면서 모르지만 자주 마주하고 사용하는 개념이다. 이를테면 우리 부모와 자식의 관계 또한 트리 구조이다. 트리 하면 가장 대표적으로 표현하

wonit.tistory.com

3) 디렉터리 엔트리

https://velog.io/@thdgusrbek/파일과-디렉터리

 

파일과 디렉터리

: 파일과 디렉터리를 관리하는 운영체제 내의 프로그램: 보조기억장치의 데이터 덩어리보조기억장치에 저장된 관련 정보의 집합의미 있고 관련 있는 정보를 모은 논리적 단위파일을 이루는 정

velog.io

4) 연결 할당, 색인 할당

https://www.youtube.com/watch?v=-wnNn4ILev4&ab_channel=%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4