[Week13] WIL - file system 회고

ella·2023년 5월 30일
0

🌳정글 6기🌳

목록 보기
39/39
post-thumbnail

이번주차에도 우리팀이 한주를 배운것을 정리하면서 만들었던 자료를 공유하면서 무엇을 공부했는지 WIL을 써보려고 한다.

directory organization

Pintos 의 디렉토리 구성은 계층 구조로 루트 디렉토리와 하위 디렉토리로 구성되어 있다. 디렉토리 구조는 계층적인 구조를 통해 하위 디렉토리와 파일을 포함할 수 있는 부모-자식 관계를 만든다. 여기서 루트 디렉토리는 디렉토리의 시작점역할을 한다. 디렉토리는 파일이름과 inode 번호의 쌍으로 구성된 목록이며, 이를 코드상으로 구현해야 하기 때문에 특수한 파일형태로 관리된다. 이러한 구조로 pintos 파일 시스템 내의 디렉토리는 루트디레토리 또는 기존 디렉토리 내에 생성되어 중첩 또는 계층 구조를 형성할 수 있다.

File system 비교

파일시스템은 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체계다. 파일시스템에는 매우 방대한 종류가 있기 때문에, 저희 조는 대표적인 컴퓨터 제조 회사들이 채택하고 있는 파일 시스템들의 특징을 간략히 비교해보았습니다.
APFS는 우리가 사랑하는 맥 OS에서 사용하며, EXT는 호환성이 좋고, 저널링 파일 시스템으로 일관성 검사를 지원한다. NTFS 와 FAT은 마이크로 소프트에서 사용하고 있다. NTFS는 서버 관리용으로 제작되었기 때문에 기능이 풍부한 대신, 구현 방식이 공개되지 않아 다른 OS에서 지원에 미흡한 점이 있고, FAT는 단순하고 간단한 구조로 여러 저용량 저장매체에 널리 사용되고 있다. 현재 우리가 핀토스에서 구현한 방식은 이 중 가장 구조가 단순한 FAT이다.

FAT

전통적으로 사용하는 연속할당 방법은 파일을 섹터 단위로 나누어 근접한 블록끼리 연속으로 구성되어 파일을 저장한다. 파일을 섹터 단위로 나누어 연속 저장하게 되면, 파일 크기가 동일하지 않으므로 외부조각이 생기고, 비어있는 공간이 있음에도 활용하지 못하는 외부 단편화 문제가 생긴다. 하지만 FAT 기반 시스템으로 구현하면 index(inode)기반으로 메타데이터에 직접 접근이 가능하기 때문에 외부조각이 발생하지 않고 효율적으로 파일을 관리할 수 있다.
FAT 기반 파일 시스템들은 파일 시스템 내부의 모든 클러스터 하나하나에 대한 항목을 FAT 테이블에서 관리한다. FAT 테이블은 하나의 단일 리스트(배열)로 관리되며, 이 테이블을 통해 어떤 클러스터가 어떤 파일에서 사용되는지, 혹은 어떤 디렉토리가 존재하는지 등을 알 수 있다.
장점
새로운 파일을 만들기가 쉽다. 부모 디렉토리 테이블과 FAT의 Busy 필드 내용만 수정하면 된다.
파일의 크기를 키우는 것도 쉽다. FAT의 Next 필드만 수정해주면 된다.
공간 활용성도 높아진다. 파일을 섹터 단위로 쪼개어 활용할 수 있어서 외부 단편화를 예방할 수 있다.
막 그렇게 빠르진 않더라도 Random Access가 가능하다.
단점
모든 디스크 블록들이 각각 하나의 FAT 항목을 가지고 있으므로, 만약 굉장히 용량이 큰 디스크의 경우에는 FAT의 크기도 굉장히 커질 수 있다.
이를 막기 위해서 블록 하나의 크기를 키울 수 있지만, 그렇게 되면 내부 단편화가 심해질 수 있다.

inode Structure

inode는 index node의 줄임말로, 파일이나 디렉토리의 메타데이터를 갖는 고유 식별자다.
파일과 디렉토리는 모두 inode를 하나씩 가리키는 inode 포인터를 가지고 있는데, 이전 프로젝트에서 우리가 다뤘던 struct file과, struct dir 구조체에 바로 이 inode 포인터가 포함되어 있다. 따라서, 파일이나 디렉토리를 열 때 inode_open 함수가 실행됨과 동시에 inode 구조체가 생성되게 된다.
그림을 보시면, inode 구조체 안에 메타데이터 정보를 담고 있는 inode_disk가 포함되어 있고, inode_disk에는 실제 파일에 대한 데이터가 들어있는 것을 알 수 있다. inode_disk는 파일이 열리지 않았을 땐 디스크 영역 섹터에 저장되어 있다가, inode open 함수가 실행될 때 디스크에서 복사되어 인코어(incore) inode로 메인 메모리에 올라간다.


WIL

긴 pintOS주가 끝났다. 마지막 file system은 제조사마다 적용방법이 다른 것이 책에 있는 고전의 이론이 아니라 현업계의 치열한 결과물의 레포트를 보는 거같아 흥미로웠다. 특히 window 홈페이지는 각 window버전마다 사용된 개념, 적용된 시스템, 개발 시 어떤 것을 중점으로 둬야하는지까지 자세한 자료와 커뮤니티도 있어서 살아있는 자료라고 느꼈다.

pintos 커리큘럼동안 내내 집중했다고는 하지 못하겠다. 하지만 단시간에 OS란 무엇인가, 큰 단위의 드라이버 코딩을 접했을 때 어떻게 해야하는가는 몸소 체득할 수 있었다. 팀원들이랑 페어프로그래밍을 통해 많은 것을 배우고, '=='을 '='으로 한것때문에 하루 반나절 디버깅한 경험, 이전에 넣었던 코드 한줄이 2주뒤 발목을 잡은 경험, gitbook을 읽으면서 처음 두번 세번 읽었다고 생각했는데 일주일 뒤 다시 읽어보면 또 보석같은 내용들이 있던 경험, 하나의 개념을 가지고 정글러들끼리 열띤 토론을 했던 경험 모두 값졌다.
내가 정리했던 내용들을 더 블로깅 못해서 아쉬운 점도 있지만 여기서 OS 공부 끝이아니라, 이전에 window페이지에서 검은 것은 글자요 흰것은 모니터로다의 관점에서 벗어나 아, 이거 관련된 거였네? 하면서 프로그래머로써 지식을 받아들일 자세로 임할 것이다.

profile
^^*

0개의 댓글