파일 시스템
보조기억장치의 정보를 파일 및 디렉터리(폴더)의 형태로 저장 & 관리 할 수 있게 하는
운영체제의 내부 프로그램
파일
구성 요소
- 파일의 이름
- 파일을 실행하기 위한 정보
- 파일과 관련한 부가정보(속성 또는 메타데이터)
여기엔 파일의 형식,위치,크기 등 파일과 관련한 다양한 정보가 있음.
이러한 파일을 다루는 모든 작업이 운영체제에 의해 이루어진다.
→ 따라서 시스템 콜을 이용해야 한다.
파일 디스크립터 (File Descriptor, FD)란?
1️⃣ 운영체제가 파일, 소켓, 파이프 등 입출력 리소스를 추적하는 정수형 식별자.
2️⃣ 파일을 열면 커널이 해당 파일에 고유한 번호(FD)를 할당하여 관리.
3️⃣ 파일 디스크립터의 기본 값 (POSIX 기준)
- 0 → 표준 입력(Standard Input, stdin)
- 1 → 표준 출력(Standard Output, stdout)
- 2 → 표준 오류(Standard Error, stderr)
4️⃣ 멀티태스킹 환경에서 각 프로세스는 고유한 FD 테이블을 가짐 → 같은 파일이라도 FD는 다를 수 있음. 5️⃣ 윈도우에선 **파일 핸들(file handle)**이라 부름
파일 디스크립터는 파일만 식별하지 않는다.
- 입출력장치
- 파이프(IPC 수단)
- 소켓
디렉터리(directory) - windows에선 folder
- 파일을 체계적으로 관리하기 위한 폴더 개념으로, 파일 또는 다른 디렉터리를 포함할 수 있음
- 디렉터리는 계층 구조(Tree Structure)로 되어 있으며, 최상위 디렉터리부터 하위 디렉터리로 확장됨.
트리구조 디렉터리
트리구조로 되어 있는 디렉터리 형태다.
🔥 1. 주요 디렉터리 개념
개념 설명
루트 디렉터리 (Root Directory) | 파일 시스템의 최상위 디렉터리 |
(/ or C:\\) | |
최상위 디렉터리 (Top-Level Directory) | 루트 디렉터리 바로 아래의 주요 디렉터리 |
하위 디렉터리 (Subdirectory) | 특정 디렉터리 안에 포함된 또 다른 디렉터리 |
현재 디렉터리 (Current Directory) | 현재 작업 중인 디렉터리 |
(pwd로 확인 가능) | |
부모 디렉터리 (Parent Directory) | 현재 디렉터리의 상위 디렉터리 (..로 이동 가능) |
🔥 2. 디렉터리 경로(Path)
유형 설명 예제
절대 경로 (Absolute Path) | 루트(/)부터 시작하는 전체 경로 | /home/user/docs/file.txt |
상대 경로 (Relative Path) | 현재 위치 기준 경로 | ../docs/file.txt |
👉 절대 경로는 전체 경로를 사용하고, 상대 경로는 현재 디렉터리를 기준으로 접근!
🔥 3. 디렉터리 엔트리 (Directory Entry)
- 디렉터리가 내부적으로 파일을 관리하는 방식
- 디렉터리에는 파일명, 파일 크기, 위치(인덱스 노드, Inode) 등이 저장됨
📌 예제 (리눅스 ls -i 명령어)
$ ls -i
123456 file1.txt 123457 file2.txt
👉 파일마다 고유한 Inode(인덱스 노드) 번호를 가지며, 파일 시스템은 이 Inode를 참조하여 실제 파일을 찾음
🔥 4. 파일 시스템 구조
/
├── bin/ # 실행 파일 (명령어)
├── etc/ # 설정 파일
├── home/ # 사용자 홈 디렉터리
│ ├── user1/
│ ├── user2/
│ └── user3/
├── var/ # 로그, 캐시 파일
├── tmp/ # 임시 파일
└── dev/ # 장치 파일
📌 예제: /home/user/docs/file.txt
- / → 루트 디렉터리
- home/ → 루트 아래 최상위 디렉터리
- user/ → 특정 사용자 디렉터리
- docs/ → 하위 디렉터리
- file.txt → 최종 파일
✅ 한 줄 요약
- 디렉터리 = 파일을 저장하는 폴더 구조
- 루트 디렉터리 /에서 계층적으로 확장
- 절대 경로(/home/user/file) vs 상대 경로(../file)
- 디렉터리 엔트리는 파일 정보를 저장하며, Inode와 연결됨
파일 할당
이번엔 파일과 디렉터리가 어떻게 보조기억장치(ssd) 안에 저장되는지 알아보겠다.
운영체제는 파일과 디렉터리를 **블록(block)**이라는 단위로 읽고 쓴다.
1. 연결 할당 (Linked Allocation)
📌 개념
- 파일을 여러 개의 블록으로 나누고, 각 블록이 다음 블록을 가리키는 포인터를 포함하는 방식
- 물리적으로 연속된 공간이 필요 없고, 파일 크기를 동적으로 확장 가능
📌 구조 예시
[ 블록 1 ] → [ 블록 4 ] → [ 블록 8 ] → [ 블록 10 ] (연결 리스트 형태)
📌 장점
- 외부 단편화 없음 (비연속 블록 할당 가능)
- 파일 크기 유동적 관리 가능
📌 단점
- 랜덤 접근이 어렵다 (중간 블록을 읽으려면 처음부터 따라가야 함)
- 포인터 오버헤드 발생 (각 블록마다 포인터 저장 공간 필요)
🔥 2. 색인 블록 (Indexed Block)
📌 개념
- 파일을 이루는 모든 블록의 주소
- 블록에다가 인덱스 번호 메기는 거임.
- 파일마다 색인 블록(Index Block)을 하나 만들고, 해당 파일이 사용하는 모든 블록의 주소를 저장
- 연결 리스트 대신, 색인 블록을 참조하여 직접 접근 가능
📌 구조 예시
[Index Block]
├──> [ 블록 2 ]
├──> [ 블록 5 ]
├──> [ 블록 7 ]
├──> [ 블록 9 ]
📌 장점
- 랜덤 접근 가능 (원하는 블록을 바로 찾을 수 있음)
- 외부 단편화 없음
📌 단점
- 색인 블록 자체가 크면 메모리 낭비
- 파일이 매우 클 경우, 하나의 색인 블록만으로는 부족할 수 있음
🔥 3. 색인 할당 (Indexed Allocation)
📌 개념
- 색인 블록 방식을 확장한 개념으로, 색인 블록을 계층적으로 관리하여 더 많은 파일을 할당 가능하게 함
- 1차 색인 블록이 부족하면 2차 색인 블록을 추가하여 대용량 파일을 지원
📌 구조 예시 (계층적 색인)
[Index Block 1] → [ 블록 3 ] → [ 블록 7 ] → [Index Block 2] → [ 블록 9 ] → [ 블록 11 ]
📌 장점
- 랜덤 접근 가능하며, 매우 큰 파일도 저장 가능
- 효율적인 디스크 공간 활용
📌 단점
- 색인 블록이 많아지면 관리 오버헤드 증가
- 색인 블록을 저장할 추가 공간 필요
✅ 한 줄 요약
할당 방식 방식 장점 단점
연결 할당 | 블록끼리 연결 리스트 형태 | 외부 단편화 없음, 파일 크기 확장 가능 | 랜덤 접근 불가, 포인터 오버헤드 |
색인 블록 | 별도 색인 블록에서 블록 주소 저장 | 랜덤 접근 가능, 외부 단편화 없음 | 색인 블록 크기 제한 |
색인 할당 | 계층적 색인 관리 | 대용량 파일 지원, 랜덤 접근 가능 | 색인 관리 오버헤드 증가 |
👉 연결 할당은 순차 접근, 색인 블록 & 색인 할당은 랜덤 접근 가능
파티셔닝 : 보조기억장치의 영역을 구획하는 작업
이건 걍 맥에서 보는게 빠르다.
파티션 : 하나의 영역
포메팅(formating)
- 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정
- 새로운 데이터를 쓸 준비하는 작업
디스크 포멧 종류
- 윈도우: NT 파일 시스템(NTFS), Resilient File System(ReFS) 등
- 리눅스: EXT, EXT2, EXT3, EXT4, XFS, ZFS 등
- 맥OS: APFS(Apple File System) 등
🔥 아이노드(Inode) 기반 파일 시스템이란?
✅ 아이노드(Inode) = 파일의 메타데이터(정보)와 실제 데이터 블록 위치를 저장하는 구조
📌 아이노드 기반 파일 시스템 특징
1️⃣ 파일의 실제 데이터와 메타데이터(파일 크기, 소유자, 권한 등)를 분리하여 저장
2️⃣ 파일 시스템이 파일을 찾을 때, 디렉터리에서 아이노드를 참조하여 물리적 위치를 검색
3️⃣ 파일 이름이 아닌 아이노드 번호(Inode Number)로 파일을 관리
4️⃣ 대표적인 아이노드 기반 파일 시스템: EXT(EXT2, EXT3, EXT4), XFS, ZFS, UFS 등
📌 아이노드 구조 예시
[디렉터리 엔트리]
파일명 → 아이노드 번호
file1.txt → 12345
file2.txt → 67890
[아이노드 12345] // 이런게 들어있음
- 파일 크기: 10MB
- 소유자: root
- 데이터 블록 위치: [Block 5] → [Block 9] → [Block 12]
👉 **즉, 아이노드 기반 파일 시스템은 "파일의 정보(아이노드)와 실제 데이터를 따로 저장하는 방식"**이라,
👉 빠른 파일 검색과 효율적인 메모리 관리를 가능하게 함
✅ 아이노드(Inode) 기반 파일 시스템은 어디에서 사용될까?
📌 대표적으로 "리눅스 & 유닉스 계열 OS에서 사용"
- EXT(EXT2, EXT3, EXT4) → 리눅스 기본 파일 시스템
- XFS, ZFS → 고성능, 대용량 저장소 시스템
- UFS → BSD 및 Solaris 같은 유닉스 계열 OS
🔥 아이노드가 실제로 어떻게 쓰이는지 예제
💡 리눅스에서 ls -i 명령어를 실행하면, 파일의 아이노드 번호를 볼 수 있음!
$ ls -i
12345 file1.txt
67890 file2.txt
👉 file1.txt는 아이노드 번호 12345, file2.txt는 아이노드 번호 67890
✅ 즉, 파일을 열 때 OS는 "파일명"을 직접 찾는 게 아니라 "아이노드 번호"를 먼저 찾고, 그걸 통해 파일의 위치를 알아냄!
🔥 아이노드 기반 파일 시스템이 좋은 이유
장점 설명
빠른 검색 | 파일명이 아니라 "아이노드 번호"로 찾기 때문에 속도가 빠름 |
파일 이름 변경 가능 | 파일 이름을 바꿔도 아이노드는 그대로라 문제 없음 |
다중 하드링크 지원 | 여러 개의 파일명이 같은 아이노드를 가리킬 수 있음 (하드링크) |
🔥 아이노드 기반 파일 시스템이 쓰이는 곳
1️⃣ 리눅스 서버 (웹 서버, DB 서버, 클라우드 서버 등)
2️⃣ 고성능 저장 시스템 (XFS, ZFS 기반 스토리지)
3️⃣ 임베디드 시스템 (라즈베리파이, IoT 기)
4️⃣ 네트워크 파일 시스템(NFS) (원격으로 파일 공유하는 시스템)
👉 즉, 리눅스/유닉스 계열에서 쓰이는 파일 시스템의 핵심 개념이고, 서버 환경에서 특히 많이 사용됨
마운트
어떤 저장장치의 파일 시스템에서 다른 저장장치의 파일 시스템으로 접근할 수 있도록
파일 시스템을 편입시키는 작업
=⇒ 말이 어려운데 그냥 usb 꽂는 행위임
'Study > CS' 카테고리의 다른 글
4.1 ~ 4.4 자료구조 (1) | 2025.02.26 |
---|---|
03 - 5 가상 메모리 (0) | 2025.02.19 |
03 - 4 CPU 스케줄링 (0) | 2025.02.19 |
03-3 동기화와 교착 상태 (0) | 2025.02.12 |
03-2 프로세스와 스레드 (1) | 2025.02.12 |