Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 네트워크
- reversing
- TryHackMe
- C
- Amazon S3
- AWS 인프라 분석
- AWS 사고 사례 분석
- AWS 보안 사고 사례 모음
- AWS 아키텍처 분석
- AWS 침해사고 사례 분석
- 리버싱
- AWS 3 Tier Architecture
- AWS 보안 아키텍처 분석
- AWS IAM Role
- dreamhack
- AWS 침해 사고 사례 분석
- AWS Active Directory
- 운영체제
- 드림핵
- reversing.kr
- terraform
- AWS
- python
- AWS 인프라 아키텍처
- programmers
- 프로그래머스
- 침입 차단 시스템(IPS)
- IAM Federation
- network
- operating system
Archives
- Today
- Total
lhywk 님의 블로그
[운영체제 OS] File System 본문
1. 파일의 기본 개념 및 분류
1-1 파일의 정의
- 개념적: 정보의 집합.
- 물리적: 저장 매체에 기록된 바이트의 나열.
1-2 파일의 유형
- 텍스트 파일: ASCII나 유니코드로 구성되어 사람이 읽을 수 있는 파일.
- 이진 파일: 0과 1의 이진 데이터로 인코딩 되어 전용 소프트웨어가 필요한 파일(hwp, exe jpg 등).
1-3 파일 식별 방법
- 사용자: 확장자(.txt, .jpg)를 통해 구분.
- 운영체제: 파일 헤더에 포함된 매직 넘버(Magic Number) 또는 시그니처를 통해 실제 파일 형식을 확인.
2. 블록 단위 및 레코드 저장 방식
- 블록
- 논리적인 데이터 저장 단위
- 디스크(보조기억장치)와 주기억장치(RAM) 사이에서 데이터를 전송할 때 사용하는 기본 단위이다.
- 하나의 파일은 여러 개의 레코드로 구성되며, 이 레코드들은 디스크상의 물리적 단위인 블록에 저장된다.
- 블로킹 인수 (Blocking Factor, Bf)
- 하나의 블록에 온전히 저장될 수 있는 레코드의 평균 개수를 의미한다.
- 계산 공식:
- Bf = floor(B / R) (B를 R로 나눈 몫)
- 여기서 B는 블록의 크기(Block size), R은 레코드의 크기(Record size)이다.
- B를 R로 나눈 나머지 공간은 해당 블록에서 사용되지 못하고 버려지는 공간(단편화)이 된다.
- 필요한 블록의 수 (b)
- 의미: 총 r개의 레코드로 구성된 파일을 저장하기 위해 필요한 전체 블록의 개수이다.
- 계산 공식:
- b = ceil(r / Bf) (r을 Bf로 나눈 값을 올림 처리)
- 여기서 r은 전체 레코드의 개수이다.
3. 하드디스크 플래터(platter) 구조

1. 물리적 구동 장치
- 플래터 (Platter): 실제 데이터가 기록되는 물리적인 장소이다.
- 헤드 (Head): 플래터 표면 위를 아주 미세한 간격으로 떠서 움직이며 데이터를 읽거나(Read) 쓰는(Write) 장치이다. 플래터의 각 면마다 헤드가 존재한다.
- 액추에이터 암 (Actuator Arm): 헤드를 원하는 위치(트랙)로 이동시키는 기계 팔 역할을 한다.
2. 데이터 저장 단위 (논리적/물리적 구분)
- 트랙 (Track): 플래터의 중심축을 기준으로 동심원을 그리며 나눈 구역이다. 운동장의 트랙과 같은 형태이다.
- 섹터 (Sector):
- 트랙을 일정 크기로 등분한 구역이다.
- 하드디스크의 물리적인 최소 저장 단위이다.
- 일반적으로 하나의 섹터는 512 바이트(Byte) 또는 4KB의 크기를 가진다.
- 클러스터 (Cluster):
- 여러 개의 섹터를 묶은 논리적인 단위이다.
- 운영체제(OS)가 파일을 읽고 쓸 때 처리하는 기본 단위이다.
- 파일 크기가 작아도 최소 한 개의 클러스터를 차지하므로, 클러스터 크기가 크면 공간 낭비가 발생할 수 있다.
3. 입체적 저장 단위
- 실린더 (Cylinder): 여러 장의 플래터가 겹쳐져 있을 때, 같은 위치(반지름)에 있는 트랙들의 집합이다.
4. 파일시스템
파일 시스템의 가장 핵심적인 역할은 물리적인 저장장치를 추상화(Abstraction)를 통해 사용자가 이해하기 쉬운 논리적인 형태로 표현하는 것이다. 복잡한 섹터나 블록 주소 대신 '파일'과 '디렉터리'라는 논리적 단위를 제공하여 사용자가 데이터의 물리적 위치를 몰라도 접근할 수 있게 한다.

물리적 저장과 논리적 접근의 관계
- 논리적 접근: 사용자는 data.txt라는 파일 이름과 그 안의 내용(1, 2, 3...)만을 보고 데이터에 접근.
- 물리적 매핑: 실제 데이터는 그림의 원통(디스크) 내부의 특정 블록(Block) 위치에 물리적으로 흩어져서 저장.
- 연결: 파일 시스템은 사용자가 보는 data.txt라는 논리적 파일이 실제 디스크의 어떤 블록에 위치하는지를 중간에서 연결하고 관리하는 역할을 수행.
5. 논리적 구조
5.1 평면 디렉터리 구조

파일 시스템 전체에 오직 하나의 디렉터리만 존재하는 구조
5.2 2단계 디렉터리 구조

- 시스템의 중앙에 마스터 파일 디렉터리(MFD)가 있고, 그 아래에 각 사용자별로 사용자 파일 디렉터리(UFD)를 하나씩 배정하는 계층적 방식.
- 구조적 특징
- Master File Directory (MFD): 각 사용자의 계정(User 1, User 2 등)을 관리하며, 해당 사용자의 디렉터리를 가리킨다.
- User File Directory (UFD): 각 사용자가 자신만의 파일을 저장하는 공간.
5.3 계층 디렉터리 구조

- 사용자가 자신의 파일을 나름대로의 기준에 맞춰 분류하고, 별도의 디렉터리를 만들어 보관할 수 있는 트리 형태의 구조
- 구조적 특징
- 루트(root): 최상위 디렉터리를 의미
- 하위 디렉터리: 루트 아래에 계층적으로 계속해서 새로운 하위 디렉터리를 생성
- UNIX/Linux, Windows, MS-DOS 등 대부분의 현대 운영체제에서 채택하고 있는 표준적인 디렉터리 구조
5.4 그래프 디렉터리 구조

- 단순한 계층 분리를 넘어, 서로 다른 디렉터리에 있는 파일이나 서브 디렉터리를 공유(Share)할 수 있도록 연결하는 방식
- 특징 및 형태
- Acyclic Graph (비순환 그래프): 사이클(루프)이 형성되지 않도록 제한하여 공유하는 형태
- General Graph (일반 그래프): 사이클 허용 여부를 포함하여 더 자유롭게 연결되는 형태
6. FAT 파일 시스템 (File Allocation Table)
파일 조각(클러스터)들이 어디에 연결되어 있는지 기록한 연결 리스트 형태의 지도이다.

- FAT12/16/32: 숫자는 클러스터를 표현하는 비트 수를 의미한다. 비트 수가 클수록 더 큰 용량의 디스크를 지원한다.

- 예약된 영역 (0번, 1번 항목)
- Media Type (매체 유형): 테이블의 가장 첫 부분(0x0000)에는 현재 디스크가 어떤 매체인지(예: 하드디스크, 플로피디스크 등)를 식별하는 값이다.
- Partition Status (파티션 상태): 그 뒤에는 파티션의 상태 정보가 기록된다.
- 데이터 클러스터 영역 (Cluster 2 ~ )
- 실제 파일 데이터가 저장되는 공간에 대한 관리는 Cluster 2부터 시작된다.
- Cluster 2, Cluster 3, Cluster 4 등으로 표기된 각 칸(Entry)은 실제 데이터 영역의 클러스터와 1:1로 대응된다.
작동 원리
- FAT 테이블의 각 칸에는 다음 파일 조각이 위치한 클러스터 번호가 적힌다.
- 예를 들어, 하나의 파일이 클러스터 2, 3, 4번에 나누어 저장되어 있다고 가정하면 작동 방식은 다음과 같다.
- Cluster 2 칸을 읽으면 -> 값으로 3이 들어있어 다음 위치를 가리킨다.
- Cluster 3 칸을 읽으면 -> 값으로 4가 들어있다.
- Cluster 4 칸을 읽으면 -> 파일 끝(EOF)이라는 표시가 들어있어 파일 읽기를 멈춘다.
- 이처럼 FAT 테이블만 보고도 흩어진 데이터 조각들을 순서대로 찾아갈 수 있게 된다.

FAT32 클러스터 맵 분석 - 6개의 클러스터가 할당되어 있다.
클러스터가 연속적이지 않을 수 있다 → 노란색, 7개의 클러스가 할당되고 포인터로 연결되어 있다.
초록색 → 단일 클러스터
리틀 엔디안 방식으로 읽기
- 표의 각 칸은 하나의 클러스터를 의미하며, 그 칸 안에 적힌 16진수(Hex) 값은 다음에 이어질 클러스터의 번호
- 상단의 +0 ~ +F는 오프셋(Offset)을, 좌측의 +0000 ~ +0070은 메모리 주소를 나타내며 이를 조합하여 위치를 찾는다.
클러스터 체인의 작동 원리
- 하늘색, 노란색, 빨간색 등으로 칠해진 영역이 보인다. 이것이 하나의 파일이 여러 클러스터에 나뉘어 저장된 연결 고리
- 하늘색 체인 예시:
- 오프셋 +C 위치에 04라는 값이 있다. 이는 "다음 데이터 조각은 4번 클러스터에 있다"는 뜻이다.
- 4번 위치(Offset +0010의 첫 번째 칸)로 가보면 05라는 값이 적혀 있다. 즉, "다음은 5번 클러스터로 가라"는 의미이다.
- 5번 위치에는 06, 6번 위치에는 07... 이런 식으로 08까지 숫자가 순차적으로 연결되어 있는 것을 확인할 수 있다.
- 이것이 FAT 시스템이 흩어진 파일 조각을 순서대로 찾아가는 연결 리스트(Linked List) 방식이다.
특수 마커
- EOF (End of File):
- 연결을 따라가다가 더 이상 갈 곳이 없으면 파일이 끝났음을 알려야 한다.
- 노란색 체인 끝부분이나 회색 부분 등을 보면 0F FF FF FF와 같은 값이 기록된 것을 볼 수 있다.
- 이 값을 만나면 운영체제는 파일의 끝으로 인식하고 읽기를 종료한다.
- Bad Cluster (결함 블록):
- 빨간색으로 표시된 영역에 0F FF FF F7와 같은 값이 보인다.
- 이는 해당 클러스터에 물리적인 오류 등이 있어 사용할 수 없음을 표시하는 배드 클러스터(Bad Cluster) 마커이다.
7. EXT 파일 시스템과 Inode
리눅스의 표준인 EXT 파일 시스템은 Inode라는 구조체를 사용하여 파일을 관리한다.
Inode에는 15개의 인덱스 포인터가 있다.

| 방식 | 설명 | 계산 예시 (Block: 1KB, Addr: 4Byte) |
| 직접 블록 (0~11번) | 실제 데이터 블록을 바로 가리킴 | 12×1KB=12KB |
| 단일 간접 블록 (12번) | 주소들이 담긴 블록을 한 번 거침 | 256×1KB=256KB |
| 이중 간접 블록 (13번) | 주소 블록을 두 번 거침 | 256×256×1KB=64MB |
| 삼중 간접 블록 (14번) | 주소 블록을 세 번 거침 | 2563×1KB=16GB |
최대 파일 크기 : 16GB + 64MB + 256KB + 12KB
출처
- William Stallings, 운영체제 내부구조 및 설계원리
'Operating System' 카테고리의 다른 글
| [운영체제 OS] Scheduling (1) | 2026.02.01 |
|---|---|
| [운영체제 OS] Virtual Memory (0) | 2026.02.01 |
| [운영체제 OS] Memory Management (1) | 2026.02.01 |
| [운영체제 OS] Deadlock (1) | 2026.02.01 |
| [운영체제 OS] Concurrency (0) | 2026.02.01 |