Search

15-2 파일 시스템

Last update: @1/7/2023
혼자 공부하는 컴퓨터구조 + 운영체제

운영체제

09 운영체제 시작하기

10 프로세스와 스레드

11 CPU 스케줄링

12 프로세스 동기화

13 교착 상태

14 가상 메모리

15 파일 시스템

파일 시스템 : 파일과 디렉터리를 보조기억장치에 일목요연하게 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램
파티셔닝(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 명령어로 빈번하게 마운트 함