학습목표
- 파일 시스템의 역할을 이해하고 파일의 속성, 작업 유형, 구조를 알아본다
- 디렉터리의 개념과 구조를 살펴보고 디렉터리가 어떻게 운영되는지 이해한다
- 디스크 파일 할당 방식을 알아본다
- 파티셔닝과 포매팅이 무엇인지 이해한다
- 파일 시스템의 파일 할당 방법을 알아본다
파일과 파일 시스템
파일
정의
- 하드 디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합을 의미
- 파일은 의미 있고 관련 있는 정보를 모은 논리적 단위를 의미
구성요소
- 속성: 이름과 파일을 실행하기 위한 정보
- 메타데이터: 파일 관련 부가 정보
파일 유형
텍스트 파일:
- 확장자: .txt, .log, .ini, .conf
- 설명: 일반 텍스트 데이터를 저장하며, 텍스트 편집기로 열 수 있습니다.
문서 파일:
- 확장자: .doc 또는 .docx (Microsoft Word), .odt (OpenDocument Text), .pdf (Portable Document Format), .rtf (Rich Text Format)
- 설명: 서식이 있는 텍스트와 이미지를 포함할 수 있는 문서 파일입니다.
스프레드시트 파일:
- 확장자: .xls 또는 .xlsx (Microsoft Excel), .ods (OpenDocument Spreadsheet)
- 설명: 셀 기반의 데이터와 수식을 저장하는 표 형식 파일입니다.
프레젠테이션 파일:
- 확장자: .ppt 또는 .pptx (Microsoft PowerPoint), .odp (OpenDocument Presentation)
- 설명: 슬라이드 기반의 프레젠테이션 자료를 저장합니다.
파일 시스템이 만들어진 이유
저장매체에 효율적으로 파일을 저장하는 방법
가능한 연속적인 공간에 파일을 저장하는 것이 좋음
- 외부 단편화, 파일 사이즈 변경 문제로 불연속 공간에 파일 저장 기능 지원 필요
- 블록 체인: 블록을 링크드 리스트로 연결
- 끝에 있는 블록을 찾으려면, 맨 처음 블록부터 주소를 따라가야 함
- 인덱스 블록 기법: 각 블록에 대한 위치 정보를 기록해서, 한번에 끝 블록을 찾아길 수 있도록 함
파일시스템
정의
- 파일 시스템은 파일의 이름과 해당 파일이 시작되는 블록 주소를 가진 파일 테이블을 관리한다.
- 파일시스템은 전체 디스크 공간을 같은 크기로 나누고 각 공간에 주소를 붙여서 관리하는데 이때 같은 크기로 나뉜 공간을 하나의 블록이라고 한다.
- 응용 프로그램이 어떤 파일에서 데이터를 읽고자 하면 파일 관리자는 파일 테이블에서 해당 파일의 블록 주소를 찾아 그 위치에서 데이터를 읽어온다.
파일 시스템 종류
연속 할당
- 파일을 구성하는 데이터를 디스크상에 연속적으로 배열하는 방식
- 실제로는 잘 사용을 안함
- 파일을 저장하거나 삭제하다 보면 빈 공간이 생기는데, 디스크에 남은 공간 중 파일의 크기와 맞는 연속된 공간이 없을 때는 연속 할당이 불가능 하기 때문
불연속 할당
- 비어 있는 블록에 데이터를 분산하여 저장하고 이에 관한 정보를 파일 시스템이 관리하는 방식
- 대표적인 블연속 할당 방식으로 연결 리스트를 이용한 연결 할당과 인덱스를 이용한 인덱스 할당이 있음
연결 할당

개념
- 연결 할당은 파일에 속한 데이터를 연결 리스트로 관리하는 방식입니다.
- 파일의 맨 끝에 해당하는 블록에는 링크 대신 널을 삽입합니다.
- 파일 테이블에는 시작 블록에 대한 정보만 저장하고, 나머지 데이터는 시작 블록부터 연결하여 저정합니다.
- 연결 할당의 단점은 오직 순차적인 접근 파일에 대해서만 효율적으로 사용될 수 있고 파일의 i번째 블록을 탐색하기 위해서는 파일의 시작 부분부터 시작하여 탐색해야 한다는 점입니다.
- 또한 최대 할당 크기에 제한이 있는것 또한 단점입니다.
인덱스 할당

개념
- 인덱스 할당의 문제인 최대 할당 크기를 문제를 해결할수있는 할당입니다.
- 데이블의 블록 포인터가 데이터 블록을 연결하는 것이 아니라, 데이터의 인덱스를 담고 있는 인덱스 블록을 연결합니다.
인덱스 블록은 실제 데이터의 위치에 관한 정보를 순서대로 보관하고 있습니다.
작동방식
- 인덱스 할당 방식에서는 테이블이 꽉 차 더 이상 데이터를 연결할 수 없을 때 인덱스 블록을 연결하는 간접 인덱스 블록을 만들면 테이블을 무한히 확장할 수 있습니다.
- 위와 같은 방식을 사용하는 파일 시스템이 유닉스 운영체제의 아이노드입니다.


구성요소
- 아이노드 테이블은 파일 제어 블록, 블록 포인터, 간접 포인터, 이중 간접 포인터, 삼중 간접 포인터로 구성됩니다.
파일 제어블록
- 파일 소유자와 각종 속성을 나타냅니다.
파일에 대한 모든 권환의 정보를 포함하고 있기 때문에 슈퍼 블록이라고 합니다.
블록 포인터
- 데이터가 있는 블록의 위치를 직접 연결하는 포인터입니다.
- Inode에서 데이터 블록을 직접 가리키는 포인터로, 파일 시스템이 파일 데이터를 빠르게 접근할 수 있게 해줍니다.
간접 포인터
- 크기가 작은 파일은 직접 연결된 블록 포인터로 빠르게 접근할 수 있습니다.
하지만 파일 크기가 커서 블록 포인터가 다 차면 인덱스 블록을 생성한 후 간접 포인터를 생성하여 인덱스 블록을 연결합니다.
이중/삼중 간접 포인터
- 보통의 경우 인덱스 블록 하나는 256개의 블록을 지정할 수 있습니다. 파일크기가 커서 인덱스 블록 하나로도 다 연결할 수 없을 때 이중 간접 포인터를 사용하고, 이보다 더 필요한 경우에는 삼중 간접 포인터를 사용하여 연결할수있습니다.
- 이중 간접 포인터는 256X256개의 인덱스 블록을, 삼중 간접 포인터는 256X256X256개의 인덱스 블록을 연결할 수 있습니다.
inode와 파일

파일: inode 고유값과 자료구조에 의해 주요 정보 관리합니다.
-
'파일이름:inode' 로 파일이름은 inode 번호와 매칭합니다.
-
파일 시스템에서는 inode를 기반으로 파일 엑세스 합니다.
-
inode 기반 메타 데이터 저장합니다.
-
파일에 대한 메타데이터와 데이터를 가리키는 포인터(직접, 간접)를 포함하는 구조체. 이미지에서 주요 정보 요소들을 포함.
정리하면 파일 시스템 기본 구조는 다음과 같습니다.
파일 시스템 기본 구조
- 수퍼 블록: 파일 시스템 정보
- 아이노드 블록: 파일 상세 정보
- 데이터 블록: 실제 데이터
작동 원리
디렉토리 엔트리
- 디렉토리 탐색
- 파일 데이터 접근
보편적으로 파일 데이터 접근은 다음과 같이 진행됩니다.

리눅스 파일 탐색: 예 ‑ /home/ubuntu/link.txt
- 각 디렉토리 엔트리(dentry)를 탐색
각 엔트리는 해당 디렉토리 파일/디렉토리 정보를 가지고 있음
- '/' dentry 에서 'home'을 찾고, 'home'에서 'ubuntu'를 찾고, 'ubuntu'에서 link.txt 파일
이름에 해당하는 inode를 얻음
- 파일의 데이터를 접근할 때는 파일 Inode의 포인터를 사용합니다.
- 작은 파일의 경우 직접 블록 포인터를 사용하여 데이터를 직접 접근할 수 있습니다.
- 파일이 커질수록 간접 포인터, 이중 간접 포인터, 삼중 간접 포인터를 사용하여 데이터를 관리합니다.
세부적으로 작은 파일과 큰 파일에 대해서 구분지어서 보겠습니다.
작은 파일:
- 파일 크기가 작으면 직접 블록 포인터를 사용하여 데이터를 접근합니다.
- 예: 첫 번째 직접 포인터가 가리키는 데이터 블록을 읽음.
큰 파일:
- 파일 크기가 커져 직접 포인터로는 충분하지 않을 경우 단일 간접 포인터를 사용합니다.
- 단일 간접 포인터가 가리키는 인덱스 블록에서 추가 데이터 블록의 포인터를 찾아 데이터를 접근합니다.
- 파일이 더 커지면 이중 간접 포인터를 사용하여 두 단계의 인덱스 블록을 통해 데이터를 접근합니다.
- 삼중 간접 포인터는 세 단계의 인덱스 블록을 통해 매우 큰 파일의 데이터를 접근합니다
.
-
실제 작동 예시
파일 file.txt 읽기 예시:
1. 사용자가 /home/user/file.txt를 열려고 하면, 파일 시스템은 먼저 디렉토리 구조를 탐색합니다.
2. 루트 디렉토리에서 home 디렉토리를 찾고, home 디렉토리에서 user 디렉토리를 찾습니다.
3. user 디렉토리에서 file.txt의 Inode 번호를 확인하고 해당 Inode를 읽습니다.
4. file.txt의 Inode는 파일의 메타데이터와 데이터 블록 포인터를 포함합니다.
5. 파일이 작다면 직접 블록 포인터를 사용하여 데이터를 읽습니다.
6. 파일이 크다면 단일 간접 포인터, 이중 간접 포인터, 삼중 간접 포인터를 통해 데이터를 차례로 읽습니다.
파일 file.txt 쓰기 예시:
- 사용자가 /home/user/file.txt에 데이터를 쓰려고 하면, 파일 시스템은 먼저 디렉토리 구조를 탐색하여 file.txt의 Inode를 찾습니다.
- 파일 크기가 작아서 직접 블록 포인터가 충분하다면, 해당 포인터가 가리키는 데이터 블록에 데이터를 씁니다.
- 파일 크기가 커지면 단일 간접 포인터, 이중 간접 포인터, 삼중 간접 포인터를 사용하여 추가 데이터 블록을 가리키도록 합니다.
- 새로운 데이터가 기존 블록을 초과할 경우, 추가 데이터 블록을 할당하고 간접 포인터를 통해 데이터를 연결합니다.
정리
Directory Inode
- 디렉토리 내의 파일 및 서브디렉토리의 Inode 번호와 이름을 매핑하여 파일 시스템이 경로를 따라 파일을 찾을 수 있게 합니다.
File Inode
- 파일의 메타데이터와 데이터 블록 포인터를 통해 파일 시스템이 파일 데이터를 효율적으로 관리하고 접근할 수 있게 합니다.
가상 파일 시스템(Virtual File System)

- Network등 다양한 기기도 동일한 파일 시스템 인터페이스를 통해 관리 가능
- 예: read/write 시스템콜 사용, 각 기기별 read_spec/write_spec 코드 구현 (운영체제 내부)
파티셔닝과 포매팅
파티셔닝(Partitioning):
개념과 정의
- 파티셔닝은 하드 드라이브나 SSD와 같은 저장 장치를 논리적으로 분할하여 여러 개의 독립된 섹션(파티션)으로 나누는 과정입니다.
- 각 파티션은 별도의 파일시스템을 가질 수 있으며, 운영체제는 각 파티션을 독립된 드라이브처럼 취급합니다.
언제 사용하는지
- 새로운 저장 장치를 설치했을 때, 또는 기존 저장 장치를 재구성할 필요가 있을 때 파티셔닝을 사용합니다.
어떻게 사용하는지
- 파티셔닝은 디스크 관리 도구(예: Windows의 디스크 관리, Linux의 fdisk 또는 gparted)를 사용하여 수행할 수 있습니다.
- 사용자는 저장 장치의 크기와 필요에 따라 파티션의 수와 크기를 결정할 수 있습니다.
작동 원리
- 파티셔닝 도구는 저장 장치의 주소 공간을 분할하고, 각 파티션에 대한 메타데이터를 생성하여 파티션 테이블에 저장합니다.
장단점
- 장점은 데이터 관리와 보안을 향상시키고, 운영체제의 설치와 백업을 용이하게 합니다.
- 단점은 파티션을 잘못 설정하면 데이터 손실이 발생할 수 있으며, 파티션 크기를 변경하기 어려울 수 있습니다.
개념과 정의
- 포매팅은 파티션에 파일시스템을 생성하여 데이터를 저장하고 검색할 수 있도록 구조화하는 과정입니다.
- 포매팅은 일반적으로 두 가지 유형이 있습니다:
- 저수준 포매팅(물리적 포맷)과 고수준 포매팅(논리적 포맷).
언제 사용하는지
- 새로운 파티션을 생성한 후 또는 기존 파티션을 재사용하기 전에 포매팅을 사용합니다.
어떻게 사용하는지
- 운영 체제의 디스크 관리 도구나 설치 프로그램을 통해 포메팅을 진행할 수 있습니다.
- 포메팅 시 파일 시스템의 유형(예: NTFS, FAT32, ext4 등)을 선택할 수 있습니다.
작동 원리
- 포매팅 과정에서 파일시스템의 메타데이터가 생성되며, 디렉토리 구조와 파일 할당 테이블이 초기화됩니다.
장단점
- 장점은 파일시스템을 초기화하여 깨끗한 상태로 만들고, 데이터를 안전하게 저장할 수 있도록 합니다.
- 단점은 포매팅 과정에서 기존 데이터가 모두 삭제될 수 있다는 점입니다.
디렉터리의 구조

정의
- 파일들을 일목요연하게 관리하기 위해 디렉터리를 사용
- 윈도우 운영체제에서는 디렉터리를 폴더라고 부름
절대 경로와 상대 경로
절대 경로
개념과 정의
- 절대 경로는 루트 디렉토리(시작점)부터 목적지에 이르기까지의 전체 경로를 말합니다.
- 이 경로는 파일 시스템의 가장 상위에 있는 디렉토리로부터 시작하여, 해당 파일이나 디렉토리에 이르기까지의 완전한 경로를 제공합니다.
언제 사용하는지
- 파일이나 디렉토리의 위치가 변경되지 않는 경우, 혹은 시스템 전체에서 유일한 위치를 지정할 필요가 있을 때 사용합니다.
어떻게 사용하는지
- 절대 경로는 루트 디렉토리(/ 또는 C:\ 등)로 시작하여, 해당 파일이나 디렉토리까지의 경로를 모두 포함합니다. 예를 들어, 리눅스 시스템에서 /home/user/documents/report.txt는 report.txt 파일의 절대 경로입니다.
장단점
- 장점: 파일의 위치가 명확하며, 어디서든 같은 경로를 사용하여 접근할 수 있습니다.
- 단점: 경로가 길고, 파일 위치가 변경될 경우 경로를 전부 수정해야 합니다.
상대 경로
개념과 정의
- 상대 경로는 현재 작업 중인 디렉토리를 기준으로 한 파일이나 디렉토리의 위치를 말합니다.
- 상대 경로는 현재 위치에서의 상대적인 위치를 통해 파일이나 디렉토리를 찾아갑니다.
언제 사용하는지
- 현재 작업 중인 디렉토리를 기준으로 파일에 접근할 때 사용합니다. 특히, 파일의 위치가 변경될 가능성이 있거나, 이동성이 필요한 스크립트나 프로그램을 작성할 때 유용합니다.
어떻게 사용하는지
- 상대 경로는 .(현재 디렉토리)와 ..(상위 디렉토리)를 사용하여 표현됩니다.
- 예를 들어, 현재 디렉토리에서 documents 디렉토리 내의 report.txt 파일에 접근하려면 상대 경로는 documents/report.txt가 됩니다.
장단점
- 장점: 경로가 더 짧고, 파일 위치가 변경되어도 상대적인 위치가 동일하면 경로를 수정할 필요가 없습니다.
- 단점: 현재 위치에 따라 접근 방법이 달라지며, 때로는 경로가 애매모호해질 수 있습니다.
절대경로와 상대경로 차이점
- 절대 경로는 루트 디렉토리부터의 전체 경로를 사용하는 반면, 상대 경로는 현재 디렉토리를 기준으로 한 위치를 사용합니다.
사용 예시:
절대 경로 예시
- /user/documents/project/report.txt
- 시스템의 부팅 스크립트나 환경 설정 파일에서 특정 파일을 참조할 때 절대 경로를 사용합니다.
상대 경로 예시
- 만약 현재 디렉토리가 /user/documents라면, project/report.txt는 report.txt에 대한 상대 경로입니다.
-웹 사이트 개발 시 HTML 파일 내에서 이미지나 다른 페이지로의 링크를 설정할 때 상대 경로를 사용합니다.
참고
디렉터리
연결할당방식
아이노드 파일 시스템의 구조