세리프 따라잡기

WEEK12 - PintOS Project4 - WIL 본문

SW사관학교 정글

WEEK12 - PintOS Project4 - WIL

맑은 고딕 2022. 6. 25. 17:15

아래는 스크립트 및 WIL 📒

 

팀원: ㅊㅈㅎ, ㅂㄱㅎ, me😏

발표자: ㅂㄱㅎ🧒

 


저희 조는 FAT 대략적인 개념과 file allocation table 을 초기화하는 코드에서 헷갈렸던 부분에 대해서 발표하고자 합니다.

 

먼저 FAT ? ~ 나중에 설명드리고 그 전에

 

먼저 FAT 개념에 대해 알아보기전에

디스크에 파일을 할당하는 방식에 대해 설명하겠습니다.

디스크에 파일을 할당하는 방법으로
연속할당과
비연속 할당이 있습니다.

 

먼저 연속 할당은 디스크에 파일을 연속으로 할당하는 방법으로
특정
블럭에 접근하기 위해 블럭을 하나 하나 접근할 필요없이

해당 블록의 위치만큼 더해주면 바로 접근이 가능합니다. 
그래서 직접 접근이 가능하다는 장점이 있습니다
.

하지만 단점으로 비어있는 hole 보다 큰 파일이 들어오면
할당을 하지 못하게 되는 외부 단편화가 발생할 수 있습니다
.

 

 

비연속 할당은 비어 있는 블록 어느 곳에 파일을 할당 하고 linked list  자료 구조를 사용하여
연결하기 때문에
외부 단편화가 발생하지 않는 장점이 있습니다
.

하지만 파일의 특정 블럭에 접근하기 위해서는 모든 블럭을 다 탐색해야 하기 때문에
직접접근이 불가능 하다는 단점이 있습니다
.
그리고 또한 다음 블럭 의 위치를 가리키는 포인터를  block 의 일부로 사용되기 때문에
공간 효율성이 떨어질 수 있고 무엇보다도 만약 중간에 포인터를 가리키는 부분이 유실되면
linked list 특성상 많은 부분을 잃을 수 있기 때문에 신뢰성 문제가 발생 할수 있다.

 

이 문제를 해결할 수 있는 것이 바로 FAT 입니다.
FAT
는 파일의 다음 block  위치를 보관하기 위해 별도로 만든 테이블로 linked list 가 아닌 배열입니다.

FAT 테이블은 비연속 할당 방법이기 때문에 외부 단편화를 해결할 수 있고 다음 block 위치를 별도로 저장하고 있기 때문에

앞에서 살펴본 신뢰성 문제와 공간 효율성 문제를 해결할 수 있씁니다.

이렇게 저희 조는  FAT 의 개념을 잡았고  이제  코드 구현에 들어갔습니다.

 

우선 fat 초기화를 위해 git book를 읽어보았는. Fat_length , fat_sector , data_start 등 혼란 스러운 부분이 있어서 정확히 짚고 넘어가기 위해 printf 로 출력을 해보았습니다. disk_size : 20160 , fat_sector : 157 , fat_length : 20002 sector

다음과 같은 값이 출력 된 것을 보았고, 이 값들을 통해

 

다음과 Fat file system 구조를 그려볼 수 있었습니다.

Disk 는총 20160  sector 를 차지하고 ,   fat_sector fat 테이블로 157 secto를 차지하고 , fat_length boot file allocation table 을 제외한 영역으로 20002 sector 를 차지한다는 것을 알 수 있었습니다.

이렇게 fat_length , fat_sector 등 헷갈렸던 부분을 그림을 통해 정리를 한 뒤

 

 

Fat 를 초기화 하는 함수부분을 구현할 수 있었습니다.

 

그 뒤로 클러스터 체인에 새 클러스터를 추가하는 fat_create_chain 함수 와 클러스터 체인을 지우는 함수인 fat_remove_chain 함수를 구현하여 FAT 관련 코드의 구현을 마쳤고

 

그리고  저희 조는 File Growth 부분 구현까지 하고 정리하였는데, 테스트는 통과하지 못했습니다.

 


 

우리 팀이 만든 ppt 😎

3조_파일시스템_.pptx
0.58MB

Comments