////
Search

6 : 파일 시스템

보조기억장치의 정보 저장 및 관리 프로그램
보조기억장치의 정보를 파일 및 디렉터리(폴더)의 형태로 저장하고 관리할 수 있도록 하는 운영체제 내부 프로그램 (파일 시스템 덕분에 보조기억장치에 있는 많은 정보의 덩어리를 파일과 디렉터리의 형태로 저장 및 관리 가능)

파일과 디렉터리

파일시스템 이해를 위해, 먼저 파일과 디렉터리가 무엇으로 이뤄져 있는지, 파일과 디렉터리가 보조기억장치에 어떻게 저장될 수 있는지 이해 필요

파일

구성 요소
파일 이름
파일 실행을 위한 정보
파일 관련 부가 정보(= 속성, 메타데이터) : 파일 형식, 위치, 크기 등 다양한 정보 포함
파일을 다루는 모든 작업이 운영체제에 의해 이뤄짐 → 응용 프로그램은 임의로 파일을 할당받아 조작하고 저장할 수 없고, 파일을 다루는 시스템 콜을 이용해야함
프로세스가 시스템 콜을 통해 읽고 쓸 수 있는 10개의 파일을 할당받았다면, 프로세스는 할당을 받아 사용 중인 파일을 구분할 수 있어야 함. 이를 위해 프로세스는 파일 디스크립터(file descriptor)라는 정보 사용(윈도우에선, 파일 핸들)
파일 디스크립터 : 저수준에서 파일을 식별하는 정보(0 이상의 정수 형태)
즉, 프로세스가 어떤 파일이나 자원에 접근하기 위해 운영체제로부터 받는 고유 번호(ID)
운영체제는 모든 입출력(I/O)을 추상화해서 처리 : 파일, 키보드, 네트워크 상관없이 모두 파일처럼 다루는 일관된 방식 사용 → 각 자원에 대해 파일 디스크립터라는 번호로 구분해 사용
운영체제는 프로세스가 새로 파일을 열거나 생성할 때, 해당 파일에 대한 파일 디스크립터를 프로세스에 할당

디렉터리

여러 파일들을 일목요연하게 관리하기 위해 디렉터리를 이용(윈도우에선, 디렉터리를 폴더라고 부름)
오늘날의 디렉터리는 계층적 구조를 띄고 있음(= 트리 자료구조)
오늘날의 디렉터리는 여러 계층을 가진 트리 구조 디렉터리로 관리된다고 함
최상위 디렉터리와 서브 디렉터리(하위 디렉터리) 존재 가능
서브 디렉터리도 또 다른 서브 디렉터리를 포함 가능
루트 디렉터리(최상위 디렉터리) : 슬래시(/)로 표현
슬래시(/) : 디렉터리를 구분하는 구분자로도 사용
경로(Path) : 디렉터리 정보를 활용해 파일 위치를 특정하는 정보
윈도우 운영체제에서는 최상위 디렉터리를 C:W 로 표현하고, 백슬래시(\ )를 디렉터리 구분자로 사용
많은 운영체제에서는 디렉터리를 조금 특별한 파일로 간주(정확히는, 디렉터리에 속한 요소의 관련 정보가 포함된 파일로 간주)
디렉터리 테이블 : 디렉터리에 속한 요소의 관련 정보는 테이블(표)의 형태로 표현됨
디렉터리 엔트리(Directory Entry) : 테이블 형태로 표현된 정보의 행 하나하나
파일 이름, 파일이 저장된 위치를 유추 가능한 정보가 반드시 포함됨
디렉터리 엔트리를 통해 보조기억장치에 저장되어 있는 위치를 알 수 있기에, 디렉터리에 속한 파일 위치를 읽어 실행할 수도, 디렉토리에 속한 다른 디렉터리의 위치를 찾아 이동할 수도 있음
. : 현재 디렉터리가 저장된 위치 정보
.. : 상위 디렉터리
일부 파일 시스템은 디렉터리 엔트리에 파일 이름과 저장된 위치를 유추할 수 있는 정보뿐만 아니라 여러 파일의 속성(EX : 생성시간, 수정시간, 크기 등)을 함께 명시하기도 함

파일 할당

파일과 디렉터리가 보조기억장치 안에 저장되는 방법
블록(Block) : 운영체제가 파일과 디렉터리를 읽고 쓰는 단위
하나의 파일이 보조기억장치에 저장될 때는 하나 이상의 블록을 할당받아 저장
블록 하나 : 보통 4096바이트 정도(2^12 * 8 비트)

방법 1 : 연결 할당

각 블록의 일부에 다음 블록의 주소를 저장하여 각각의 블록이 다음 블록을 가리키는 형태로 할당
디렉터리 엔트리에는 파일 이름, 파일을 이루는 첫 번째 블록 단위의 길이가 명시 → 디렉터리 엔트리만 확인해도 어떤 파일이 어디에 저장되어 있는지 알 수 있음

방법 2 : 색인 할당

파일을 이루는 블록의 주소를 색인 블록(Index Block)이라는 특별한 블록에 모아 관리하는 방식으로 할당
색인 할당을 사용하는 파일 시스템에서는 디렉터리 엔트리에 파일 이름과 함께 색인 블록 주소가 명시
색인 블록만 알면, 접근하고자 하는 파일 데이터에 접근 가능

파일 시스템

파일 시스템 종류는 다양 : 운영체제마다 각기 다른 파일 시스템을 지원하며, 같은 운영체제라도 다른 파일 시스템을 사용하거나 하나의 컴퓨터에서 여러 파일 시스템 사용 가능
참고 - 파티셔닝
하나의 보조기억장치 내에 다양한 종류의 파일 시스템 사용 가능 → 즉, 보조기억장치 내에 파일 시스템을 적용할 영역이 구분되어야 여러 종류의 파일 시스템 사용 가능
파티셔닝 : 보조기억장치의 영역을 구획하는 작업
파티셔닝은 하드 디스크를 논리적인 블록 단위로 나누어 구획하는 것
파티션 : 파티셔닝되어 나누어진 하나 하나의 영역
즉, 보조기억장치는 여러 파티션으로 분할 가능하며, 파티션마다 다른 파일 시스템을 사용 가능
다양한 파일 시스템 중 어떤 파일 시스템을 사용할 지는 보조기억장치를 포매팅할 때 결정 가능
포매팅 : 파일 시스템을 설정해 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업
운영체제 별로 지원하는 파일 시스템 종류는 매우 다양하며, 파일 시스템마다 제공되는 기능, 특성, 성능, 지원하는 최대 파일 크기 등이 다를 수 있음
윈도우 : NTFS(NT 파일 시스템), Resilient File System(ReFs) 등
리눅스 : EXT, EXT2, EXT3, EXT4, XFS, ZFS 등 ⇒ 개발자가 자주 접하게 되는 파일 시스템
아이노드(색인 블록)를 기반으로 파일을 할당
맥OS : APFS(Apple File System) 등

아이노드 기반 파일 시스템

색인 할당 기반 파일 시스템
파일마다 각각의 아이노드 존재 : 아이노드에는 각각의 번호가 부여되어 있음
출처 : https://heeya-stupidbutstudying.tistory.com/entry/Linux-ext-파일-시스템과-inode-Linux-File-System-Hierarchy 예시 : EXT4 파일 시스템으로 포맷팅된 파티션은 다음과 같이 구성
EXT4는 여러 블록의 그룹으로 구성
부트 블록 영역 : 실질적인 파일 데이터가 저장되는 영역 X. 부팅과 파티션 관리를 위한 특별한 정보가 모여 있는 영역
블록 그룹 : 대략 슈퍼 블록, 그룹 식별자, 블록 비트맵, 아이노드 비트맵, 아이노드 테이블, 데이터 블로으로 구성
아이노드는 파티션 내 특정 영역에 모여있음(다른 아이노드 기반의 파일 시스템에서도 마찬가지). 따라서 아이노드 기반 파일 시스템에서는 데이터 영역에 공간이 남아 있더라도, 아이노드 영역이 가득 차 더 이상의 아이노드를 할당할 수 없다면 운영체제는 새로운 파일을 생성 불가능
Q) 아이노드 역할?
Q) 디렉터리 테이블은 뭐고 블록 정보는 뭐지? 디렉터리 테이블을 기반으로 어떻게 블록 정보를 가져오지?

마운트

예시 : USB 메모리 저장장치
USB 메모리를 데스크탑 컴퓨터에 연결하면, 데스크탑 컴퓨터의 파일 시스템을 통해 USB 메모리의 파일 시스템에 접근 가능
USB 메모리의 파일 시스템이 데스크탑 컴퓨터의 파일 시스템에 마운트되기 때문
마운트 : 어떤 저장장치의 파일 시스템에서 다른 저장장치의 파일 시스템으로 접근할 수 있도록 파일 시스템을 편입시키는 작업
위와 같은 디렉터리 구조를 가진 데스크탑 컴퓨터의 저장 공간 & USB 메모리가 존재한다고 가정
USB 메모리의 파일 시스템을 ‘/mnt’ 경로로 마운트하는 경우 : ‘/mnt’ 경로를 통해 연결됨
데스크탑 컴퓨터의 /mnt/homework/os/a.cpp 경로를 통해 a.cpp 파일에 접근 가능
/mnt/pictures/Dog.jpg 경로를 통해 Dog.jpg 파일에도 접근 가능
일부 운영체제의 경우에는 설정에서 GUI로 마운트하거나 마운트 해제(추출) 가능
명령어를 기반으로 마운트하거나 마운트 해제도 가능
# '/dev/sda' 장치에 있는 EXT4 파일 시스템을(-t ext4) 읽기 전용으로(-o ro) '/mnt/test' 디렉터리에 마운트하라는 뜻 mount -t ext4 -o ro /dev/sda /mnt/test
Shell
복사
참고 자료