보조기억장치의 정보 저장 및 관리 프로그램
보조기억장치의 정보를 파일 및 디렉터리(폴더)의 형태로 저장하고 관리할 수 있도록 하는 운영체제 내부 프로그램
(파일 시스템 덕분에 보조기억장치에 있는 많은 정보의 덩어리를 파일과 디렉터리의 형태로 저장 및 관리 가능)
파일과 디렉터리
파일시스템 이해를 위해, 먼저 파일과 디렉터리가 무엇으로 이뤄져 있는지, 파일과 디렉터리가 보조기억장치에 어떻게 저장될 수 있는지 이해 필요
파일
•
구성 요소
◦
파일 이름
◦
파일 실행을 위한 정보
◦
파일 관련 부가 정보(= 속성, 메타데이터) : 파일 형식, 위치, 크기 등 다양한 정보 포함
•
파일을 다루는 모든 작업이 운영체제에 의해 이뤄짐 → 응용 프로그램은 임의로 파일을 할당받아 조작하고 저장할 수 없고, 파일을 다루는 시스템 콜을 이용해야함
◦
프로세스가 시스템 콜을 통해 읽고 쓸 수 있는 10개의 파일을 할당받았다면, 프로세스는 할당을 받아 사용 중인 파일을 구분할 수 있어야 함. 이를 위해 프로세스는 파일 디스크립터(file descriptor)라는 정보 사용(윈도우에선, 파일 핸들)
▪
파일 디스크립터 : 저수준에서 파일을 식별하는 정보(0 이상의 정수 형태)
•
즉, 프로세스가 어떤 파일이나 자원에 접근하기 위해 운영체제로부터 받는 고유 번호(ID)
•
운영체제는 모든 입출력(I/O)을 추상화해서 처리 : 파일, 키보드, 네트워크 상관없이 모두 파일처럼 다루는 일관된 방식 사용 → 각 자원에 대해 파일 디스크립터라는 번호로 구분해 사용
▪
운영체제는 프로세스가 새로 파일을 열거나 생성할 때, 해당 파일에 대한 파일 디스크립터를 프로세스에 할당
디렉터리
•
여러 파일들을 일목요연하게 관리하기 위해 디렉터리를 이용(윈도우에선, 디렉터리를 폴더라고 부름)
◦
오늘날의 디렉터리는 계층적 구조를 띄고 있음(= 트리 자료구조)
◦
오늘날의 디렉터리는 여러 계층을 가진 트리 구조 디렉터리로 관리된다고 함
▪
최상위 디렉터리와 서브 디렉터리(하위 디렉터리) 존재 가능
•
서브 디렉터리도 또 다른 서브 디렉터리를 포함 가능
•
루트 디렉터리(최상위 디렉터리) : 슬래시(/)로 표현
◦
슬래시(/) : 디렉터리를 구분하는 구분자로도 사용
◦
경로(Path) : 디렉터리 정보를 활용해 파일 위치를 특정하는 정보
윈도우 운영체제에서는 최상위 디렉터리를 C:W 로 표현하고, 백슬래시(\ )를 디렉터리 구분자로 사용
◦
많은 운영체제에서는 디렉터리를 조금 특별한 파일로 간주(정확히는, 디렉터리에 속한 요소의 관련 정보가 포함된 파일로 간주)
▪
디렉터리 테이블 : 디렉터리에 속한 요소의 관련 정보는 테이블(표)의 형태로 표현됨
▪
디렉터리 엔트리(Directory Entry) : 테이블 형태로 표현된 정보의 행 하나하나
•
파일 이름, 파일이 저장된 위치를 유추 가능한 정보가 반드시 포함됨
•
디렉터리 엔트리를 통해 보조기억장치에 저장되어 있는 위치를 알 수 있기에, 디렉터리에 속한 파일 위치를 읽어 실행할 수도, 디렉토리에 속한 다른 디렉터리의 위치를 찾아 이동할 수도 있음
. : 현재 디렉터리가 저장된 위치 정보
.. : 상위 디렉터리
•
일부 파일 시스템은 디렉터리 엔트리에 파일 이름과 저장된 위치를 유추할 수 있는 정보뿐만 아니라 여러 파일의 속성(EX : 생성시간, 수정시간, 크기 등)을 함께 명시하기도 함
파일 할당
파일과 디렉터리가 보조기억장치 안에 저장되는 방법
•
블록(Block) : 운영체제가 파일과 디렉터리를 읽고 쓰는 단위
◦
하나의 파일이 보조기억장치에 저장될 때는 하나 이상의 블록을 할당받아 저장
◦
블록 하나 : 보통 4096바이트 정도(2^12 * 8 비트)
방법 1 : 연결 할당
•
각 블록의 일부에 다음 블록의 주소를 저장하여 각각의 블록이 다음 블록을 가리키는 형태로 할당
•
디렉터리 엔트리에는 파일 이름, 파일을 이루는 첫 번째 블록 단위의 길이가 명시 → 디렉터리 엔트리만 확인해도 어떤 파일이 어디에 저장되어 있는지 알 수 있음
(블록이 없는 경우 : -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
복사
참고 자료







