Skip to main content

파일 시스템

파일과 디렉터리

파일

하드 디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합이다. 모든 파일에는 이름과 파일을 실행하기 위한 정보, 그리고 속성(메타데이터) 정보가 있다.

파일 속성

속성 이름의미
유형운영제체가 인지하는 파일의 종류
크기파일의 현재 크기와 허용 가능한 최대 크기
보호어떤 사용자가 해당 파일을 읽고, 쓰고, 실행할 수 있는지에 대한 정보
생성 날짜파일이 생성된 날짜
마지막 접근 날짜파일에 마지막으로 접근한 날짜
마지막 수정 날짜파일이 마지막으로 수정된 날짜
생성자파일을 생성한 사용자
소유자파일을 소유한 사용자
위치파일의 보조기억장치상의 현재 위치

파일 유형

파일 유형을 나타내기 위해 흔히 사용하는 방식은 파일 이름 뒤에 붙는 확장자(Extension)를 이용하는 것이다.

파일 유형대표적인 확장자
실행 파일없는 경우, exe, com, bin
목적 파일obj, o
소스 코드 파일c, cpp, cc, java, asm, py
워드 프로세서 파일xml, rtf, doc, docx
라이브러리 파일Lib, a, so, dll
멀티미디어 파일mpeg, mov, mp3, mp4, avi
백업 / 보관 파일rar, zip, tar

디렉터리

파일을 저장하는 공간으로 윈도우 운영체제에서는 폴더(folder)라고 부른다. 디렉터리를 통해 파일을 계층적으로 관리할 수 있으며, 파일을 체계적으로 저장하고 접근할 수 있다.

절대 경로와 상대 경로

  • 절대 경로 : 루트 디렉터리에서 자기 자신까지 이르는 고유한 경로. /home/user/docs/file.txt
  • 상대 경로 : 현재 디렉터리에서 자기 자신까지 이르는 경로. docs/file.txt (현재 디렉터리가 /home/user일 때)

디렉터리 엔트리

파일이 내부에 해당 파일과 관련된 정보를 담고 있다면, 디렉터리는 내부에 해당 디렉터리에 담겨 있는 대상과 관련된 정보를 담고 있다. 즉, 디렉터리는 보조기억장치에 테이블 형태의 정보로 저장된다. 디렉터리 엔트리에는 디렉터리에 포함된 대상의 이름과 그 대상이 보조기억장치 내에 저장된 위치를 유추할 수 있는 정보 등이 담긴다.

파일 시스템

파일 시스템은 파일과 디렉터리를 보조기억장치에 일목요연하게 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램이다.

파티셔닝과 포매팅

  • 파티셔닝(Partitioning) : 하나의 물리적 디스크를 여러 개의 논리적 디스크로 나누는 작업이다. 이를 통해 여러 운영체제를 설치하거나 데이터를 분리 관리할 수 있다.
  • 포매팅(Formatting) : 파티션에 파일 시스템을 적용하는 작업이다. 포매팅을 통해 운영체제는 데이터를 저장할 수 있는 구조를 만든다.

파티션과 포매팅 후에는 파일 시스템이 설정되고, 사용자는 파일을 저장하거나 관리할 수 있게 된다.

파일 할당 방법

운영체제는 파일과 디렉터리를 블록 단위로 읽고 쓴다. 즉, 하나의 파일이 보조기억장치에 저장될 때는 하나 이상의 블록에 걸쳐 저장된다.

연속 할당 (Contiguous Allocation)

파일이 저장 장치 내에서 연속적인 공간을 차지하도록 블록을 할당하는 파일 할당 방식이다. 연속으로 할당된 파일에 접근하기 위해서는 파일의 첫 번째 블록 주소와 블록 단위의 길이만 알면 된다. 때문에 연속 할당을 사용하는 파일 시스템에서는 디렉터리 엔트리에 파일 이름과 더불어 첫 번째 블록 주소와 블록 단위의 길이를 명시한다. 연속 할당 방식은 구현이 단순하지만 외부 단편화를 야기한다는 단점이 있다.

연결 할당 (Linked Allocation)

각 블록 일부에 다른 블록의 주소를 저장하여 각 블록의 다음 블록을 가리키는 형태로 할당하는 파일 할당 방식이다. 즉, 파일을 이루는 데이터를 연결 리스트로 관리한다. 연결 할당은 불연속 할당의 일종이기에 파일이 여러 블록에 흩어져 저장되어도 무방하다.

디렉터리 엔트리에는 연속 할당과 마찬가지로 파일 이름과 함께 첫 번째 블록 주소와 블록 단위의 길이를 명시한다.

단점

  1. 파일의 중간 부분부터 접근하고 싶어도 반드시 파일의 첫 번째 블록부터 접근하여 하나씩 차례대로 읽어야 하기 때문에 임의 접근(Random Access)이 어렵다.
  2. 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근이 불가능하다.

색인 할당 (Indexed Allocation)

파일의 모든 블록 주소를 색인 블록에 모아 관리하는 파일 할당 방식이다. 색인 할당은 연결 할당과는 달리 파일 내 임의의 위치에 접근하기 쉽다. 파일의 i번째 데이터 블록에 접근하고 싶다면 색인 블록의 i번째 항목이 가리키는 블록에 접근하면 되기 때문이다.

디렉터리 엔트리에는 파일 이름과 더불어 색인 블록 주소를 명시한다.

파일 시스템

FAT 파일 시스템

연결 할당의 단점을 보완한 파일 시스템으로 블록 안에 다음 블록의 주소를 저장하지 않고 각 블록에 포함된 다음 블록의 주소들을 한데 모아 테이블 형태로 관리한다. 이러한 테이블을 파일 할당 테이블(FAT, File Allocation Table)이라고 한다. 파일의 첫 번째 블록 주소만 알면 FAT를 통해 파일의 데이터가 담긴 모든 블록에 접근할 수 있기 때문에 디렉터리 엔트리에는 파일 이름과 더불어 파일의 첫 번째 블록 주소가 명시된다.

마이크로소프트의 운영체제인 MS-DOS에서 사용되었고 최근까지 USB 메모리, SD 카드와 같은 저용량 저장 장치용 파일 시스템으로 많이 이용되고 있다.

FAT 파일 시스템에서 FAT는 파티션의 앞부분에 만들어진다. FAT 영역에 FAT가 저장되고, 뒤이어 루트 디렉터리가 저장되는 영역이 있으며, 그 뒤에 서브 디렉터리와 파일들을 위한 영역이 있다.

FAT는 하드 디스크 파티션의 시작 부분에 있지만, 실행하는 도중 FAT가 메모리에 캐시될 수 있다. FAT가 메모리에 적재된 채 실행되면 기존 연결 할당보다 다음 블록을 찾는 속도가 매우 빨라지고, 결과적으로 연결 할당 방식보다 임의 접근의 성능이 개선된다.

유닉스 파일 시스템

색인 할당 기반의 파일 시스템으로, 유닉스 파일 시스템에서는 색인 블록을 i(index)-node라고 부른다. i-node에는 파일 속성 정보와 열다섯 개의 블록 주소가 저장될 수 있다. 유닉스 파일 시스템에서 파일 속성 정보는 i-node에 표현된다.

i-node 하나는 기본적으로 열다섯 개의 블록 주소를 저장할 수 있기 때문에 크기가 큰 파일은 아래와 같은 방식으로 저장한다.

  1. 블록 주소 중 열두 개에는 직접 블록(Direct Block) 주소를 저장한다. 직접 블록이란 파일 데이터가 저장된 블록을 말한다.
  2. 1번 내용으로 충분하지 않다면 열세 번째 주소에 단일 간접 블록 주소(Single Indirect Block)를 저장한다. 단일 간접 블록이란 파일 데이터가 저장된 블록이 아닌 파일 데이터를 저장한 블록 주소가 저장된 i-node 블록이다.
  3. 2번 내용으로 충분하지 않다면 열네 번째 주소에 이중 간접 블록 주소(Double Indirect Block)를 저장한다. 이중 간접 블록이란 데이터 블록 주소를 저장하는 블록 주소가 저장된 i-node 블록(단일 간접 블록들의 주소를 저장하는 i-node 블록)이다.
  4. 3번 내용으로 충분하지 않다면 열다섯 번째 주소에 이중 간접 블록들의 주소를 저장하는 삼중 간접 블록(Triple Indirect Block)주소를 저장한다.

참조

https://www.hanbit.co.kr/store/books/look.php?p_code=B9177037040&utm_source=hongong

https://csnote.net