sw사관학교정글

파일 시스템 구현

29도 맑음 2021. 10. 29. 16:41
반응형

vsfs(Very Simple File System)

-간단한 파일 시스템 구현

-unix 파일 시스템을 단순화한 것으로 디스크 구조와 접근방법 그리고 다양한 파일 시스템들의 정책 소개

 

파일 시스템은 순수한 소프트웨어다.(하드웨어 필요X)

 

두가지 측면,

1. 자료구조 - 파일시스템이 자신의 데이터와 메타데이터를 관리하기 위해 디스크 상에 어떤 종류의 자료구조가 있어야 하겠는가?

2. 접근방법 - 프로세스가 호출하는 open, read, write등의 명령들은 파일 시스템의 자료구조와 어떤 관련이 있는가? 얼마나 효율적인가?

 

전체 구성

디스크를 블럭으로 나눈 뒤 저장

파일시스템은 각 파일에 대한정보를 관리한다. 그 정보가 메타데이터의 핵심이다.

데이터 영역 - 사용자 데이터가 있는 공간

아이노드 - 파일을 구성하는 데이터블럭들과 그 파일의 크기, 소유자, 접근권한, 접근과 변경시간 등과 같은 정보가 있는 공간(이 영역을 아이노드 테이블이라고 한다)

     아이노드는 일반적으로 128-256bytes정도로 그렇게 크지 않다. 아이노드 당 256bytes로 가정하면 4KB 블럭에는 16개의 아이노드를 저장할 수 있다.

     위 그림에서 아이노드가 5블럭이기 때문에 우리는 최대 80개의 파일을 만들 수 있다.

데이터 블럭(d) - 각 블럭이 현재 사용중인지 아닌지를 표현할 할당구조

     ex) 프리 리스트

아이노드 비트맵(i) - 아이노드테이블에 있는 아이노드들이 사용중인지 나타내는 공간

슈퍼블럭(S) - 이 파일 시스템 전체에 대한 정보를 담고 있다.

    예를 들면 파일 시스템에 몇개의 아이노드와 데이터블럭이 있는지, 아이노드 테이블은 어디서 시작하는지

    파일 시스템을 식별 할 수 있는 매직넘버도 가지고 있음 이 경우에는 (vsfs)

 

파일구성 : 아이노드

아이노드를 사용하여 해당 아이노드가 디스크상에 어디있는지를 직접적으로 계산할 수 있다.

디스크는 바이트 단위로 접근이 불가능함->섹터주소로 읽어야한다.

아이노드에는 파일에 대한 정보가 다 들어있다. 파일의 종류, 크기, 할당된 블럭 수 , 보호정보, 시간정보와 더불어 데이터 블럭이 디스크 어디에 존재하는지와 같은 정보들이 담겨 있다.->이와 같은 파일정보를 메타데이터라고 한다.

아이노드 설계시 중요한것은 블럭위치를 표현하는 방법이다. 

     -직접포인터 :  각 포인터는 파일의 디스크 블럭 하나를 가리킨다. but 파일크기의 제한이 있다. 파일 크기가 (포인터개수)*(블럭크기)로 제한된다.

멀티레벨 인덱스

-큰 파일을 지원하기 위해,

간접포인터 이용, 큰 파일에 대해서는 간접 포인터가 할당되고 이 간접포인터는 간접 블럭을 가리킨다.

     블럭이 4KB고, 디스크 주소가 4바이트라고 하면 (직접포인터개수+1024)*4K까지 저장할 수 있다.

만약 더 큰 파일을 지원하고 싶으면 이중간접포인터를 추가한다.

더더 큰 파일은 삼중간접포인터....

->편향적인 트리형태가 나옴 but 파일은 대부분 작기때문에 편향적인 이 방법이 더 빠를 것이다.

 

디렉터리구조

디렉터리는 (항목의 이름, 아이노드 번호) 쌍의 배열로 구성되어 있다.

각 디렉터리는 .과 ..이 추가 되어 있으며, . 는 현재 디렉터리, ..은 부모 디렉터리를 가리킨다.

 

 

반응형