컴퓨터 프로그래밍 공부/컴퓨터 구조 + 운영체제

파일 시스템

게임 개발 2024. 4. 21. 22:16

 

 

파일 시스템

파일 시스템은 보조기억장치에 있는 파일과 디렉터리가 어떻게 할당하고 접근되는지에 관한 것이다.

 

파일 시스템은 파일과 디렉터리를 보조기억장치에 일목요연하게 저장하고

접근할 수 있게 하는 운영체제 내부 프로그램이다.

이러한 파일 시스템에는 다양한 종류가 있고,

하나의 컴퓨터에서 여러 파일 시스템을 사용할 수 있다.

 

해당 게시글에서는

파일 시스템이 파일과 디렉터리를 보조기억장치에 어떻게 할당하고 접근하는지 알아보자.

이러한 이론을 기반으로 만들어진 대표적인 파일 시스템인

FAT 파일 시스템유닉스 파일 시스템이 있다.

 

파티셔닝과 포매팅

 

이제 막 공장에서 생산되어 한 번도 사용된 적이 없는

새 하드 디스크 또는 SSD가 있다고 가정해보자.

이 보조기억장치에 곧바로 파일을 생성하거나 저장할 수 없다.

왜냐하면 보조기억장치를 사용하려면

파티션을 나누는 작업 (파티셔닝)과 포맷 작업(포맷팅)을 거쳐야 하기 때문이다.

 

파티셔닝

 

파티셔닝은 저장 장치의 논리적인 영역을 구획하는 작업을 의미한다.

예시를 들자면 가령 엄청나게 커다란 서랍 안에 마구 물건을 놓다보면 물건을 정돈하기가 어렵다.

하지만 서랍 칸막이를 설치하여 영역을 나누면 물건들을 정리하기가 조금 더 수월하다.

 

이렇게 칸막이로 영역을 나누는 작업이 바로 파티셔닝이다.

하드 디스크나 SSD 처럼 용량이 큰 저장 장치를 하나 이상의 논리적인 단위로 구획하는 것이다.

그리고 이렇게 파티셔닝 작업을 통해 나누어진 영역 하나하나를 파티션이라고 한다.

 

포멧하는 작업, 즉 포매팅은 저장 장치를 완전히 삭제하는 것으로 알고있는 사람이 많지만,

사실 이는 완벽하게 정확한 표현이라고 보기는 어렵다.

포메팅이란 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고,

새로운 데이터를 쓸 준비를 하는 작업을 의미한다.

즉, 어떤 종류의 파일 시스템을 사용할지는 바로 이때 결정난다.

 

포매팅의 종류에는 엄밀히 말하면

저수준 포매팅과 논리적 포매팅이 있다.

전자는 저장 장치를 생성할 당시 공자에서 수행되는 물리적인 포매팅이고,

후자는 파일 시스템을 생성하는 포매팅이다.

 

해당 게시글에서 설명하는 포매팅은 파일 시스템을 생성하는 포매팅이다.

 

가령 USB 메모리를 포매팅할 때 다음과 같은 화면을 볼 수 있다.

파일 시스템을 선택하는 항목에서, 포매팅할  때 파일 시스템이 결정된다.

 

파일 시스템에는 여러 종류가 있고, 파티션마다 다른 파일 시스템을 설정할 수도 있다.

 

포매팅까지 완료하여 파일 시스템을 설정했다면 파일과 디렉터리를 생성할 수 있다.

 

 

 

파일 할당 방법

 

하드 디스크의 포매팅까지 끝났다고 가정해보자.

이제 이 저장 장치에 사용자가 사용할 파일을 저장해보겠다.

운영체제는 파일과 디렉터리를 블록 단위로 읽고 쓴다.

즉, 하나의 파일이 보조기억장치에 저장될 때는 하나 이상의 블록에 걸쳐 저장된다.

 

이런 상황에서 파일을 보조기억장치에 할당하는 방법에는 크게 두 가지가 있다.

연속 할당과 불연속 할당이다.

 

그리고 불연속 할당에는 크게 연결 할당, 색인 할당이 있다.

 

연속 할당

 

연속 할당은 가장 단순한 방식이다.

이름 그대로 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식이다.

가령 블록을 세 개, 두 개, 다섯 개 차지하는 정도의 크기를 가진 파일 a,b,c가 있을 때

이 파일들은 다음과 같이 연속적으로 할당한다.

연속으로 할당된 파일에 접근하기 위해서는 

조건 2가지가 필요하다.

조건 두 가지는 다음과 같다.

 

1) 파일의 첫 번째 블록 주소와 2) 블록 단위 길이만 알면 된다.

그렇기 때문에 연속 할당을 사용하는 파일 시스템에서는 다음과 같이 디렉터리 엔트리에 파일 이름과 더불어

첫 번째 블록 주소와 블록 단위 길이를 명시한다.

 

 

 

연속 할당 방식은 파일을 그저 연속적으로 저장하는 방식이기에 구현이 단순하다는 장점이 있지만,

외부 단편화를 야기한다는 치명적인 문제가 있다.

 

 

여기서 파일 D와 F가 삭제되면 다음과 같이 할당할 수 없다.

이것이 연속 할당에서의 외부 단편화이다.

 

 

불연속 할당 -  연결 할당 

 

파일을 이루는 구조가 연결 리스트 형식으로 되어 있는 것이 연결 할당이다.

각 블록이 다음 블록을 가리키는 형태로 할당되는 방식이다.

때문에 연결 할당은 이곳 저곳 흩어져서 사용되도 무방하다.

 

이 연결 할당 방법을 사용하는 디렉트리 엔트리에는 어떤 정보들이 들어갈까?

 

1. 파일의 이름 2. 첫번째 블록 주소 3. 블록 단위의 길이가 명시되어야 한다.

 

 

 

연결 할당은 외부 단편화 문제를 해결하지만 이 또한 단점은 있다.

 

첫째, 반드시 첫 번째 블록부터 하나씩 차례대로 읽어야 한다.

즉 임의 접근 속도가 매우 느리다는 것이다.

파일에 어떤 임의의 위치에서 부터 읽어들이는 속도가 늦어진다는 뜻은

중간부터 읽고 싶어도 반드시 첫 번째부터 읽어나가야 하기 때문에 늦어진다는 것이다.

 

둘째, 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근할 수 없다.

하드웨어 고장이나 오류 발생시, 파일을 이루는 블록에 하나라도 문제가 발생하면

그 블록 이후의 블록에 접근할 수 없다는 것이다.

하드 디스크는 굉장히 정교하고 고장에 예민한 장치이다.

하드 디스크 헤드는 플래터 위에 대단히 미세한 간격으로 떨어져 있는 만큼 충격을 받으면

차칫 헤드가 플레터에 충돌하여 데이터에 손상시킬 수 있다.

 

그래서 오늘 날에는 위 내용을 그대로 구현하기 보다는,

조금 변형해서 사용한다.

연결 할당을 변형한 대표적인 파일 시스템이 오늘날까지도 많이 사용하는 FAT 파일 시스템이다.

하지만 FAT보다 일단 색인 할당을 먼저 알아보자.

 

 

색인 할당

 

연결 할당은 블록 일부에 다음 블록 주소를 표현하는 방식이다.

반면 색인 할당은 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식이다.

 

해당 파일의 주소들을 색인 블록 하나에 접근하는 것이다.

또한 하나의 블록안에 어떤 블록에 접근할지 적혀있다 보니까, 당연히도 파일에 임의 접근하기 용이하다.

 

색인 블록 안에 파일을 구성하는 데이터 블록 주소가 있으므로 색인 블록만 알면

해당 파일 데이터에 접근할 수잇따.

그렇기에 색인 할당을 사용하는 파일 시스템에서는 디렉터리 엔트리에

파일 이름과 더불어 색인 블록 주소를 명시한다.

 

이러한 색인 할당을 기반으로 만든 파일 시스템이 유닉스 파일 시스템이다.

 

 

파일 시스템 살펴보기

 

파일 시스템은 크게 두 가지 이다.

하나는 USB 메모리, SD 카드 등의 저용량 저장 장치에 사용되는 FAT 파일 시스템이고,

다른 하나는 유닉스 계열 운영체제에서 사용되는 유닉스 파일 시스템이다.

 

FAT 파일 시스템

 

연결 할당 기반으로 제작되었으나,

연결 할당의 단점을 보완한 파일 시스템이 FAT 파일 시스템이다.

USB 메모리, SD 카드 등의 저용량 저장 장치에 사용되는 FAT 파일 시스템이다.

 

어떻게 보완했을까?

 

앞서 말한 연결 할당 방식의 단점이 발생된 근본적인 이유는

모든 블록 안에 다음 번지 블록의 주소를 기록했기 때문에 발생했다고 볼 수 있다.

 

하지만 각 블록에 포함된 다음 블록의 주소들을 한데 모아

테이블 형태로 관리하면 앞서 언급한 단점들을 상당 부분 해소할 수 있다.

이런 테이블을 사용하는 것이다.

이러한 테이블을 파일 할당 테이블로 FAT라고 부른다(File Allocation Table)이라고 부른다.

 

최근까지도 각종 USB등 SD 카드 처럼 저장장치용 파일 시스템으로 사용되고 있다.

 

FAT12 파일 시스템 도식화

 

FAT는 하드 디스크 파시텬의 시작 부분에 있지만,

실행하는 도중 FAT가 메모리에 캐시될 수 있다.

FAT가 메모리에 적재된 채 실행되면 기존 연결 할당보다 다음 블록을 찾느 속도가 매우 빨라지고,

결고자거으로 앞서 설명한 연결 할당 방식보다 임의 접근에도 유리해진다.

FAT 파일 시스템에서는 FAT 자체가 메모리에 캐시될 수 있기 때문에

느린 임의 접근 속도 개선이 가능하다.

 

 

 

유닉스 파일 시스템

 

색인 할당 기반의 유닉스 파일 시스템은

색인 할당은 색인 블록을 기반으로 파일의 데이터 블록들을 찾는 방식이다.

유닉스 파일 시스템에서는 색인 블록을 i-node(index-node)라고 부른다.

 

i-node에는 파일 속성 정보와 열다섯 개의 블록 주소가 저장될 수 있다.

FAT 파일 시스템에서는 파일 속성 정보가 디렉터리 엔트리에 표현되었다.

유닉스 파일 시스템에서는 파일 속정 보는 i-node에 표현된다.

 

유닉스 파일 시스템에는 파일마다 이러한 i-node가 있고,

i-node마다 번호가 부여되어 있다.

그리고 i-node들은 다음과 같이 파티션 내 특정 영역에 모여 있다.

i-node 영역에 i-node 들이 있고, 데이터 영역에 디렉터리와 파일들이 있다.

 

하지만 i-node의 크기는 유한하다.

 

블록을 20,30개 그 이상 차지하는 큰 파일도 있을 것이다.

i-node하나에는 열다섯 개의 블록을 차지하는 파일까지 가리킬 수 있다.

 

유닉스 파일 시스템은 이러한 문제를 다음과 같이 해결한다.

첫째, 블록 주소 중 열두 개에는 직접 블록 주소를 저장한다.

 

둘째, 첫째 내용으로 충분하지 않다면 열세 번째 주소에 단일 간접 블록 주소를 저장한다.

 

단일 간접 블록이란, 파일 데이터가 저장된 블록이 아닌 파일 데이터를 저장한 브롥 주소가 저장된 블록을 의미한다.

 

 

셋째, 둘째 내용으로 충분하지 않다면 열네 번재 주소에 이중 간접 블록 주소를 저장한다.

 

열새 개의 브롥 주소로 파일의 모든 블록을 가리킬 수 없다면 i-node의 열네 번째 블록 주소를 이용한다.

열네 번째 블록 주소는 이중 간접 블록 주소를 저장한다.

 

이중 간접 블록이란 데이터 블록 주소를 저장하는 블록 주소가 저장된 블록을 의미한다.

즉, 단일 간접 블록들의 주소를 저장하는 블록이 이중 간접 블록이다.

 

 

 

넷째, 셋째 내용으로 충분하지 않다면 열다섯 번재 주소에 삼중 간접 주소를 저장한다.

 

열네 개의 블록 주소로 파일 블록을 가리킬 수 없다면,

i-node의 열다섯 번째 블록 주소를 이용한다.

삼중 간접 블록이란 이중 간접 블록 주소가 저장된 블록이다.

 

이로써 i-node만 알면 파일 속성뿐만 아니라 파일 크기가 크더라도 파일 데이터를 모두 가리킬 수 있다.

i-node가 파일의 모든 것을 담고 있다고 해도 과언이 아니다.

그래서 유닉스 파일 시스템의 디렉터리 엔트리도 파일 이름과 i-node 번호로 구성된다.