[SWJungle][WIL][PintOS] Project 4 - Filesystems

d·2023년 5월 30일
0

Filesystems

파일 시스템은 운영체제 중 파일을 관리하는 부분이다. 디렉토리를 포함한 파일과 그 메타데이터를 관리하고 파일의 저장 방법을 결정한다.

파일 접근 방법

디스크가 원하는 위치의 파일에 접근하는 방법은 순차적 접근과 직접 접근 두가지 방법이 있다.

  • 순차 접근(Sequential Access) : a-b-c 순으로 정보가 저장되어 있으면, a, c만 접근하고 싶다고 해도 c에 접근하기 위해서 순차적으로 b를 반드시 거쳐가야한다.
  • 직접 접근(Direct Access) : 원하는 위치에 바로 접근하는 방식이다. a-b-c 순으로 정보가 저장되어 있고 c에 접근하고싶다면 직접 접근할 수 있다.

Disk에 파일의 할당

REF: g4g

Contiguous Allocation

하나의 파일이 디스크 상에 연속적으로 저장되는 방식.

  • 장점:

    • 지정된 공간에 연속적으로 할당되어 있기 때문에 탐색, I/O가 빠르다.
  • 단점:

    • 외부/내부 단편화에 취약하다. 이로 인해 메모리 효율이 떨어진다.
    • file growth도 어렵다. 파일은 언제든지 수정되어서 크기가 변할 수 있는데 연속 할당되어있다면, 뒤에 잇따라 할당되어있는 파일때문에 파일을 늘릴 수가 없다. 만약 이를 해결하기 위해 공간 할당 시 공간을 미리 확보 해 준다고해도 얼마나 확보해줄것인지 고민해봐야하고, 해 준다고해도 내부단편화에서 자유롭진 못할 것 같다. 특수한 상황에서나 쓰일 수 있을 것 같다.

Linked Allocation

블록에 파일을 할당하고 linked list처럼 블록을 서로 연결시켜주는 방식.

  • 장점:
    • 단편화에서 자유롭다.
    • 파일 사이즈를 유연하게 가져갈 수 있다.
  • 단점
    • 직접 접근이 되지 않아 탐색에 시간이 오래걸린다.
    • 의존성 문제가 생긴다. a-b-c-d-e-f-g로 연결된 파일이 있다고 가정하고 d 섹터에 문제가 생겨 접근할 수 없어진다면, 뒤에 연결되어있던 e-f-g 섹터까지 전부 유실될 수가 있다.
    • 각 블록에 파일 정보뿐만 아니라 포인터 정보도 함께 저장되어야 하는데, 이는 공간 오버헤드를 발생시킨다.

Indexed Allocation

디렉터리에 파일 위치 정보를 바로 저장하지 않고 별도의 인덱스 블럭을 만들어 그곳에 저장한다.

  • 장점

    • 직접 접근이 가능하다.
    • 단편화에 강하다
  • 단점

    • 포인터에 의한 오버헤드가 위에서 본 linked allocation 기법보다 심하다. 만약 1-2 블럭 분량의 작은 파일을 저장하려고 해도 인덱스 블럭을 할당해 해당 파일에 대한 포인터들을 가지고 있어야한다.

UNIX의 파일시스템 구조

유닉스는 물리 디스크를 크게 4개의 파티션으로 구분한다.

  1. Boot Block : 컴퓨터 부팅 관련 정보가 들어있는 파티션으로, 디스크 가장 앞쪽에 위치한다. 첫번째 블럭에 부팅에 필요한 정보(Bootstrap Loader)를 올림으로써 복잡한 로직 없이 부팅을 바로 진행할 수 있다.
  2. Super Block : 파일 시스템과 관련한 정보를 가지고 있는 파티션으로, 어디가 비어있는 블럭이고 어디가 실제 사용중인 블럭인지에 대한 정보를 담고있다.
  3. Inode List : 파일 이름을 제외한 파일의 모든 메타 데이터를 저장하는 파티션. UNIX 파일 시스템에서 디렉토리는 일부분(파일 이름 등)만 가지고 있고 실제 메타데이터는 Inode List에 보관한다. Inode 하나당 파일 하나가 매핑되는데, 이 inode에는 매핑된 파일의 메타데이터가 들어있다. ( 파일의 이름은 디렉터리에 ) Inode 내에 direct block 은 파일 내 블록에 직접 접근할 수 있는 블록 위치를 저장하는 영역이다. direct block으로 각 블록의 위치 정보를 저장하고 있으면 모든 데이터에 직접 접근이 가능해진다는 장점이있다.
  4. Data Block : 파일의 실제 내용을 보관하는 영역.

FAT 파일시스템

1) Boot Block : UNIX의 디스크 파티션과 마찬가지로 부팅에 관련된 정보가 들어있다.
2) FAT(File Allocation Table) : 파일 위치 정보에 대한 메타데이터를 가지고있다. FAT을 확인해 데이터 블럭에 있는 해당 파일의 content로 직접 접근이 가능하다. 컴퓨터가 부팅되면 FAT이 메모리 위로 올라가는데, FAT을 통해 파일을 탐색하는 과정에서 디스크 헤드를 움직이는 것이 아니라 메모리에 올라가있는 FAT 안에서 원하는 데이터를 찾게 된ㄷ. 이와 같은 방식은 포인터가 유실되더라도 FAT에 위치 데이터가 보관되어 있으니 의존성 문제가 해결된다. 그리고 FAT을 통해 직접 접근이 가능하므로 순차적 탐색의 문제점도 해결이 된다.
3) Root Directory : 위치 정보를 제외한 모든 메타데이터가 루트 디렉터리에 저장된다.
4) Data Block : 파일의 실제 내용을 보관하는 영역


FAT Entry

FAT의 각 바이트(FAT12/16: 2, FAT32 : 4)는 FAT 엔트리라는 용어로 불린다. 각 FAT 엔트리는 데이터 영역의 각 클러스터에 대응된다.

위의 4 바이트씩 표현된 부분이 FAT32에서 데이터 영역의 각 클러스터를 표현하는 FAT entry다. 특이한 점은 데이터 영역의 클러스터가 0 부터 시작하는 것이 아닌 2 부터 시작한다는 점이다. 이러한 이유는 FAT 영역의 1,2 FAT 엔트리는 별도의 용도로 예약되어 있는데, 첫번째 FAT 엔트리는 해당 미디어의 타입을 나타내고, 두 번째 FAT 엔트리는 파티션의 상태를 나타낸다.

FAT entry는 위와 같은 특별한 값을 가질 수 있다.

0개의 댓글