project 4. File system
1) Indexed and Extensible Files
[현재 핀토스의 파일 시스템]
- 현재 핀토스의 파일 시스템은 하나의 chunk로 할당(외부단편화에 취약)
- On-disk inode 구조를 수정해서 이 문제를 수정
[기본 개념]
- 어떤 파일을 저장하기 위해 디스크 내에 10개의 섹터가 필요하다 가정.
- 이 때 10개의 섹터를 연결리스트로 저장하는 것은 부적절
- 외부단편화 문제
- ex) 9번째 데이터를 읽기 위해 비효율적으로 연결리스트를 타고 이동
- 따라서 10개의 섹터를 분산시켜 저장하고, 위치(섹터번호)를 저장한 테이블 생성.
여기서 섹터 번호를 모아둔 것이 FAT 임. (File Allocation Table)
- 즉, FAT이란, 현재 섹터와 다음 섹터를 적어둔 테이블. 이 테이블을 이용해 파일의 섹터를
찾아가는 방식으로 작동.
File system
1. File system이란?
: 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체계
2. File system component
- CPU를 가상화한 것은 프로세스이고 메모리를 가상화한 것은 주소 공간.
- 다양한 저장 장치들에 정보를 저장하기 위해서는 정보를 읽고 쓸 수 있는 방법이 정리되어 있어야하고, 이를 파일 시스템이라 함!
- 파일과 디렉토리라는 두 개의 개념으로 저장 장치를 추상화. 즉, 저장 장치에 접근하기 위해 파일과 디렉토리라는 개념을 이용.
3. File system의 종류
- 파일시스템에는 매우 많은 종류가 있음
- 아래 표는 현재 대표적인 컴퓨터 제조 회사들이 채택하고 있는 파일 시스템들임

- 저널링 Journaling(Write-Ahead Logging)
- 디스크 내용을 갱신할 때, 해당 자료구조를 갱신하기 전에 변경 사항을 요약해서 디스크의 로그(혹은 저널)라는 특수한 자료구조에 저장. 이렇게 앞으로 할 일을 미리 저장해 놓는 것을 write-ahead라고 함.
Inode
1. inode란?
- inode는 index node의 줄임말로, 파일이나 디렉토리의 메타데이터를 갖는 고유 식별자
- 파일과 디렉토리는 모두 inode를 하나씩 가리키는 inode 포인터를 가지고 있는데, 이전 프로젝트에서 다뤘던 struct file과, struct dir 구조체에 이 inode 포인터가 포함되어 있음
- 파일이나 디렉토리를 열 때 inode_open 함수가 실행됨과 동시에 inode 구조체가 생성
2. incore inode와 disk inode
- 파일을 열 때마다 파일에 해당하는 inode가 디스크에서 메인 메모리에 복사 됨
- 이 때, 디스크에 있는 아이노드를 디스크 아이노드, 메인메모리에 있는 아이노드를 인코어 아이노드라고 함
3. inode sturcture

-
inode 구조체 안에 메타데이터 정보를 담고 있는 inode_disk가 포함되어 있고, inode_disk에는 실제 파일에 대한 데이터가 들어있음
-
inode_disk는 파일이 열리지 않았을 땐 디스크 영역 섹터에 저장되어 있다가, inode_open 함수가 실행될 때 디스크에서 복사되어 인코어(incore) inode로 메인 메모리에 올라감
4. inode_open 작동방식
-
핀토스에서 열려있는 inode들을 리스트로 관리
-
반복문으로 이 리스트를 돌면서 inode가 열려있는지 확인. 열려있다면 inode_reopen 함수로, 해당 inode를 open한 횟수를 1 늘려 줌.
-
incore inode를 위한 메모리 공간을을 할당(malloc)
-
리스트에 inode를 삽입하고, 해당 inode의 구조체 필드를 초기화. 이 후 디스크에서 disk_inode 정보를 읽어옴
-
disk_read : select_sector로