Last update: @1/7/2023
•
파일 시스템
: 파일과 디렉터리를 보조기억장치에 일목요연하게 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램
◦
파티셔닝(partitioning)
: 보조기억장치의 파티션(논리적인 영역)을 나누는 작업
◦
포매팅(formating)
: 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업
▪
저수준 포매팅
: 저장 장치를 생성할 당시 공장에서 수행되는 물리적인 포매팅
▪
논리적 포매팅
: 파일 시스템을 생성하는 포매팅
◦
파일 시스템에는 여러 종류가 있고 파티션마다 다른 파일 시스템을 설정할 수도 있음
•
파일 할당 방법
◦
운영체제는 파일과 디렉터리를 블록(block) 단위로 읽고 씀(윈도우에서는 블럭을 클러스터라고 부름)
▪
따라서 하나의 파일이 보조기억장치에 저장될 때는 하나 이상의 블록에 걸쳐 저장됨
▪
하드 디스크의 가장 작은 저장 단위는 섹터이지만 운영체제는 섹터를 블록으로 묶은 뒤 블록 단위로 파일을 관리함
▪
모든 섹터를 관리하기에는 너무 많고 크기도 작기 때문
◦
파일을 보조기억장치에 할당하는 방법
▪
연속할당(continuous allocation)
: 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식
•
디렉터리 엔트리에 파일 이름과 더불어 첫 번째 블록 주소와 블록 단위의 길이를 명시함
•
구현이 단순하지만 외부 단편화를 야기함
▪
불연속 할당(오늘날까지 사용되는 방식)
•
연결 할당(linked allocation)
: 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당하는 방식
◦
디렉터리 엔트리에 연속 할당과 마찬가지로 파일 이름과 함께 첫 번째 블록 주소와 블록 단위의 길이를 명시함
◦
단점
▪
반드시 첫 번째 블록부터 하나씩 차례대로 읽어야 함. 즉, 임의 접근(random access) 속도가 매우 느림
▪
하드웨어 고장이나 오류 발생 시 해당 블록이후 블록은 접근할 수 없음
▪
이 문제를 해결하기위해 연결할당을 변형한 대표적인 파일 시스템이 FAT
•
색인 할당(indexed allocation)
: 각 파일을 이루는모든 블록의 주소를 색인 블록(index block)이라는 하나의 블록에 모아 관리하는 방식
◦
임의 접근이 쉽고 빠름
◦
디렉터리 엔트리에 파일 이름과 더불어 색인 블록 주소를 명시함
◦
색인 할당을 기반으로 만든 파일 시스템이 유닉스 파일 시스템임
◦
파일 시스템의 종류
▪
FAT 파일 시스템
: FAT 테이블 기반 파일 시스템
•
파일 할당 테이블(FAT; Fila Allocation Table)
: 각 블록이 가진 다음 주소를 테이블 형태로 만든 것
•
과거 MS-DOS에서 사용되었고 최근까지 USB, SD카드와 같은 저용량 저장 장치용 파일 시스템으로 많이 이용되고 있음
•
버전에 따라 FAT12, FAT16, FAT32가 있음. 숫자는 블록을 표현하는 비트 수를 의미함
•
FAT 파일 시스템에서 FAT는 파티션의 앞부분에 만들어짐
•
FAT는 실행하는 도중 메모리에 캐시될 수 있고, 다음 블록을 찾는 속도가 매우 빨라져 임의 접근 성능이 개선됨
•
FAT 시스템의 디렉터리 엔트리는 다음과 같음
•
예시
◦
위의 파일 구조에서 a.sh를 찾는 과정은
▪
루트 디렉터리 → home → 3 → minchul → 15 → a.sh → 9
▪
이후 FAT에서 9번을 시작으로 8, 11, 13을 차례대로 읽음
▪
유닉스 파일 시스템
: 색인 할당 기반의 시스템
•
i-node(index-node)
: 색인 블록
◦
i-node에는 파일 속성 정보와 열다섯 개의 블록 주소가 저장될 수 있음
•
유닉스 파일 시스템에는 파일마다 이러한 i-node가 있고, i-node마다 번호가 부여되어 있음
•
i-node는 파티션 내 특정 영역에 모여 있음
•
파일의 크기가 15 블록을 넘을 경우 처리 방법
◦
블록 주소 중 열두 개에는 직접 블록 주소를 저장
▪
파일 데이터가 직접 저장된 블록을 직접 블록(direct block)이라고 함
◦
열두 개의 블록 주소로 파일의 모든 블록을 가리킬 수 없다면 열세 번째 블록에 단일 간접 블록의 주소를 저장함
▪
단일 간접 블록(single indirect block)이란 파일 데이터가 저장된 블록이 아닌 파일 데이터를 저장한 블록 주소가 저장된 블록
◦
둘째 내용으로 충분하지 않다면 열네 번째 주소에 이중 간접 블록 주소를 저장함
▪
이중 간접 블록(double indirect block)이란 데이터 블록 주소를 저장하는 블록 주소가 젖아된 블록을 의미함
◦
셋째 내용으로 충분하지 않다면 열다섯 번째 주소에 삼중 간접 블록 주소를 저장함
▪
삼중 간접 블록(triple indirect block)이란 이중 간접 블록 주소가 저장된 블록을 말함
▪
삼중 간접 블록까지 이용하면 웬만한 크기의 파일은 모두 표현할 수 있음
•
따라서 i-node만 알면 파일 속성뿐만 아니라 파일 크기가 크더라도 파일 데이터를 모두 가리킬 수 있음. 따라서 유닉스 파일시스템의 디렉터리엔트리도 파일 이름과 i-node 번호로 구성됨
•
위의 파일 구조에서 a.sh를 찾는 과정은
◦
유닉스 파일 시스템은 root 디렉터리의 i-node를 항상 기억함 → i-node 2번으로 이동
◦
블럭 1번(루트)으로 이동 → home의 i-node인 i-node 3번으로 이동
◦
블럭 210번(home)으로 이동 → minchul의 i-node인 i-node 8번으로 이동
◦
블럭 121번(minchul)으로 이동 → a.sh의 i-node인 i-node 9번으로 이동 → 98, 12, 13블럭을 읽음
▪
이밖의 윈도우의 NTFS, 리눅스에서 사용되는 ext 파일 시스템 등이 있음
심화 학습- https://github.com/kangtegong/self-learning-cs
•
저널링 파일 시스템
◦
시스템 크래시
: 컴퓨터가 갑자기 전원이 나가거나 강제로 종료되는상황
◦
파일 시스템을 변경하던 도중에 시스템 크래시가 발생하면 파일 시스템이 훼손될 수 있음
▪
과거에는 이런 상황이 발생하면 부팅 직후 파일 시스템을 검사하고 복구하는 프로그램을 실행시켰음(리눅스의 fsck나 윈도우의 scandisk 등)
▪
이런 프로그램들은 파일 시스템 내의 모든 블록에 대해 파일 시스템을 검사하기 때문에 시간이 매우 오래 걸림
◦
저널링(journaling) 기법
: 작업 로그를 통해 시스템 크래시가 발생했을 때 빠르게 복구하기 위한 방법
▪
저널링 파일 시스템에서 파일 시스템을 변경하는 작업은 다음과 같은 순서로 수행됨
1.
작업 직전 파티션의 로그 영역에 수행하는 작업(변경 사항)에 대한 로그를 남김
2.
로그를 남긴 후 작업을 수행함
3.
작업이 끝났다면 로그를 삭제함
▪
이 경우 만약 작업 도중 시스템 크래시가 발생하면 파일 시스템 전체를 검사할 필요 없이 로그 영역에 남긴 로그만 검사해도 됨
▪
즉, 크래시 발생 직후 로그 영역을 읽어 크래시가 발생한 당시 어떤 작을 실행 중이었는지 알아낸 다음 해당 작업을 완료함
▪
MS의 NT 파일 시스템, 리눅스의 ext3, ext4 등을 포함하여 현대 대부분의 파일 시스템이 이 저널링 기능을 지원함
•
마운트(mount)
: 한 저장 장치의 파일 시스템에서 다른 저장 장치의 파일 시스템에 접근할 수 있도록 파일 시스템을 편입시키는 작업
◦
유닉스, 리눅스와 같은 운영체제에서 다양한 저장 장치를 컴퓨터에 연결할 때 mount 명령어로 빈번하게 마운트 함