728x90
31. 지역성과 Fast File System
- 구형 파일 시스템의 장점은 단순하다는 것이며, 파일 시스템의 가장 기본적인 개념인 파일과 디렉터리만을 제공한다.
31.1 문제 : 낮은 성능
- 문제는 성능이 형편없다는 것이다.
- 구형 파일 시스템의 핵심 문제는 디스크를 마치 임의 접근 기억 장치(RAM)처럼 사용한다는 것이다. 데이터를 저장하는 매체가 디스크라는 사실을 무시하고 여기저기에 데이터를 저장하고 있기 때문에 디스크 헤드를 이동시키는데 많은 시간이 소요된다.
- 더 안좋은 것은 파일 시스템이 빈 공간을 효율적으로 관리하지 않기 때문에 결국에는 공간이 단편화된다. 빈 공간들이 디스크 전역에 흩어져 있으며, 새로운 블럭 할당시 무조건 리스트에서 다음 빈 블럭을 할당한다. 그 결과 파일을 순차적으로 읽더라도 실제로는 디스크 전역을 오가며 블럭을 접근하기 때문에 성능이 심각하게 나빠진다.
- 또 다른 문제가 있다. 블럭 크기가 너무 작다. 입출력 단위가 너무 작기 때문에 디스크가 데이터를 전송하는 것은 원칙적으로 매우 비효율적이다. 작은 크기의 블럭은 내부 단편화라는 작은 장점이 있다. 그러나, 디스크 헤드의 이동 시간에 비해 데이터 블럭의 크기가 작기 때문에 입출력이 상대적으로 비효율적이 된다.
31.2 FFS : 디스크에 대한 이해가 해답이다.
- Fast File System, 파일 시스템의 자료구조와 할당 정책을 디스크에 적합하게 설계하여 성능을 개선했다. 파일 시스템 인터페이스를 유지하며, 내부 구현 방식을 변경하였다.
31.3 파일 시스템 구조 : 실린더 그룹
- 첫 번째 단계는 디스크에 적합하게 파일 시스템 구성을 수정하는 것이었다. FFS는 디스크를 여러 개의 실린더 그룹(Cylinder group)으로 나눈다. 하나의 실린더는 하드디스크의 서로 다른 표면에 동일한 길이의 반경을 갖는 트랙들의 집합이다. FFS는 연속된 N개의 실린더를 하나의 그룹으로 묶는다. FFS는 전체 디스크를 다수의 실린더 그룹으로 구성한다.
- 현대의 드라이브는 사용중인 실린더를 구분하기 위한 충분한 정보를 파일 시스템에게 제공하지 않는다. 그렇기 때문에 현대의 파일 시스템은 드라이브를 디스크의 연속적인 주소공간의 조각을 나타내는 블럭 그룹으로 구성한다.
- 같은 그룹에 두 개의 파일을 배치함으로서 FFS는 한 파일을 먼저 읽고 그 다음 파일을 읽는다 하더라도 디스크 전역을 걸친 긴 탐색이 발생하지 않도록 하였다.
- 이 그룹에 파일과 디렉터리를 저장하기 위해 FFS는 그룹에 파일과 디렉터리를 넣을 수 있는 방법과 그 안에 있는 정보들을 관리할 수 있는 방법이 필요하다. 이를 가능하게 만들기 위해 FFS는 파일 시스템에 필요로 하는 모든 구조를 각 그룹에 포함시킨다.
- FFS는 신뢰성을 이유로 각 그룹마다 슈퍼블럭을 배치하였다. 슈퍼 블럭은 파일 시스템을 마운트 할 때 필요한 것인데, 여러 사본을 유지하고 있으면 그 중 하나가 깨지더라도 최신의 사본을 사용하여 파일 시스템을 마운트하여 접근할 수 있다. 각 그룹 내에서 아이노드와 데이터 블럭들의 할당 여부를 알 수 있어야 한다. 그룹별로 아이노드 비트맵(ib)과 데이터 비트맵(db)이 존재한다. 각 그룹의 아이노드와 데이터 블럭의 할당 정보를 나타낸다. 비트맵은 파일 시스템의 빈 영역을 나타내는 훌륭한 방법이다. 큰 크기의 연속된 빈 공간을 쉽게 찾을 수 있다. 빈 블럭 리스트 사용시 발생하는 파일 시스템의 단편화 문제도 어느정도 피할 수 있다.
- 마지막으로 아이노드와 데이터 블럭 영역은 아주 단순한 파일 시스템(vsfs)에서 봤던 것과 동일하다.
31.4 파일과 디렉터리 할당 정책
- 배치의 기본 원칙은 간단하다. 관련 있는 것끼리 모아라
- 우선 무엇이 관련있는지를 파악해야 하고, 그것들을 같은 블럭 그룹내에 저장한다. 반대로 관련없는 항ㅂ목들은 서로 다른 블럭 그룹에 저장한다.
- 첫 번째는 디렉터리의 위치 결정에 관한 것이다. FFS는 할당된 디렉터리의 수가 적고, 사용할 수 있는 아이노드의 수가 많은 실린더 그룹을 선택하여 디렉터리 데이터와 아이노드를 해당 그룹에 저장한다. 물론 다른 방법을 따를 수도 있다.
- 파일의 경우 FFS는 두 가지 방법을 사용한다. 하나는 아이노드와 파일의 데이터 블럭을 같은 그룹에 할당하여 아이노드와 데이터 간의 긴 탐색을 방지한다. 두 번째로 동일한 디렉터리내의 모든 파일들은 해당 디렉터리가 존재하는 실린더 그룹에 함께 저장한다.
- FFS의 정책은 두 가지 긍정적인 점이 있다. 각 파일의 데이터 블럭들이 해당 아이노드와 가까이 배치 된다는 것 그리고 같은 디렉터리 안의 파일들은 가깝게 배치된다는 것이 긍정적이다.
- Namespace 기반의 지역성으로 인해 FFS는 좋은 성능을 얻을 수 있으며 연관있는 파일들을 탐색하는 시간을 짧게 유지할 수 있게 된다.
31.5. 대용량 파일 예외 상황
- 파일 배치시 예외 상황이 있다. 파일 크기가 매우 큰 경우이다. 별도의 규칙을 적용하지 않으면 하나의 파일이 블럭 그룹을 모두 채울 수 있다. 바람직하지 않다. 왜냐하면 그 뒤의 관련 있는 파일들은 다른 블럭 그룹에 저장되도록 만들어 파일 접근 지역성을 떨어뜨리기 때문이다.
- FFS는 큰 파일들의 배치를 다음과 같이 처리한다. 첫 번째 블럭 그룹에 일정 수의 블럭을 할당한 후에 FFS는 파일의 큰 청크를 다른 블럭 그룹에 저장한다. 그리고 파일의 다음 청크는 또 다른 블럭 그룹에 저장한다.
- 대용량 파일에 대한 예외처리를 한다면 FFS는 파일의 블럭들을 여러 그룹에 흩어서 저장하기 때문에 그룹들의 사용률을 너무 높지 않은 수준으로 유지할 수 있다.
- 파일 블럭들을 디스크에 흩어 놓으면 상대적으로 흔한 순차 파일 접근과 같은 경우에 성능이 좋지 않다는 것을 알 것이다. 청크의 크기를 신중히 정하는 것으로 이 문제를 해결할 수 있다.
- 만약에 청크 크기가 충분히 크다면, 파일 시스템은 디스크로부터 데이터를 전송하는데 대부분 시간을 사용하고, (상대적으로)적은 시간을 청크를 탐색하는데 사용할 것이다. 오버헤드 비용당 더 많은 작업을 처리하여 오버헤드를 줄이는 것을 보고 점진적 경감(amortization) 기법이라고 부른다.
- FFS는 큰 파일을 그룹들 간에 분산하는데 있어 아이노드 자체의 구조를 기반으로 하는 간단한 접근법을 사용했다.
- 첫 번째 열두개의 직접 블럭은 아이노드와 같은 그룹에 배치하였고, 각 간접블럭과 그것이 가리키는 모든 블럭들은 다른 그룹에 배치하였다.
31.6 FFS에 대한 기타사항
- FFS는 데이터를 전송하는 것에는 이득이 있었지만 공간활용면에서는 비효율적이었다. 일반 파일 시스템에서는 내부 단편화로 인해 대략 반정도의 공간이 낭비되었다.
- FFS 설계자들은 이 문제를 간단하게 해결했다. 파일 시스템이 파일을 할당할 수 있도록 521byte의 서브블록 개념을 도입했다. 작은 파일을 생성할 때, 두 개의 서브블럭을 할당함으로써 4KB블럭 전체가 낭비되는 경우가 발생하지 않도록 하였다. 파일이 커지면, 파일 시스템은 4KB가 될 때까지 512byte 크기의 블럭을 추가로 할당한다. 서브블럭들의 합이 4KB가 되는 시점에 FFS는 4KB 블럭을 찾아서 서브블럭들을 복사해 넣은 후에 해당 서브블럭들을 다시 사용할 수 있도록 해제한다.
- 파일 시스템의 추가 동작이 많아 발생하기 때문에 이 과정이 비효율적이다. 이러한 경우를 피하기 위해 라이브러리는 쓰기 요청을 버퍼에 두었다가 4KB 청크가 되면 파일 시스템에 내리는식으로 대부분의 서브블럭을 사용하는 특수한 경우를 완전히 제거할 수 있도로 하였다.
- FFS의 기발한 아이디어는 성능에 최적화된 디스크 배치이다. FFS는 하나 건너에 블럭을 배치하여 다음 요청에 대한 블럭이 헤드 아래로 지나가기전에 해당 블럭을 요청할 충분한 시간을 벌 수 있다. FFS는 디스크의 특정 성능 매개변수를 검출해낸 후에, 그 정보를 활용하여 정확한 시차에 따라 배치기법을 결정할 수 있도록 하였다. FFS는 이 기법을 매개화(parameterization)라 불렀다.
- 내부적으로 한 트랙을 모두 내부 디스크 캐시에 버퍼링한다. 해당 트랙에 연달아 읽기 요청이 들어오면 디스크는 캐시에서 원하는 값을 리턴한다. 그러므로 파일 시스템은 더 이상 하위수준의 상세한 부분에 대해서는 신경쓰지 않아도 된다.
- FFS는 긴 파일 이름을 지원하는 최초의 파일 시스템 중 하나이다. 또 심볼릭 링크 개념을 도입한 최초의 파일 시스템이다. 심볼릭 링크는 사용자가 시스템 내의 파일 또는 디렉터리에 상관없이 가명(alias)를 만들 수 있도록 허용하기 때문에 훨씬 더 융통성이 있다. FFS는 파일의 이름을 원자적으로 변경하는 rename() 명령도 소개했다.
728x90
'책 > 운영체제' 카테고리의 다른 글
운영체제 33. 데이터 무결성과 보호 (0) | 2024.03.31 |
---|---|
운영체제 32. 크래시 일관성 : FSCK와 저널링 (2) | 2024.03.31 |
운영체제 30. 파일 시스템 구현 (0) | 2024.03.29 |
운영체제 29. Redundant Array of Inexpensive Disk(RAID) (0) | 2024.03.28 |
운영체제 28. 하드 디스크 드라이브 (0) | 2024.03.27 |