🗂️ Project 4: 파일 시스템

이전 두 과제에서 여러분은 파일 시스템을 광범위하게 사용했지만, 그 내부가 어떻게 구현되어 있는지는 걱정하지 않았습니다. 이번 마지막 과제에서는 파일 시스템 구현을 개선하게 됩니다. 주로 filesys 디렉터리 안의 코드 작업을 하게 됩니다.

🔧 기반 프로젝트 선택

Project 4는 Project 2 또는 Project 3 위에 구축할 수 있습니다. 어떤 것을 선택하든, 해당 프로젝트의 기능이 정상 동작해야 합니다.


📚 배경: 새로운 코드 파일들

아래는 이번 과제에서 처음 접하게 될 파일들입니다. 대부분 filesys/ 디렉터리에 있습니다:

파일 설명
filesys/fsutil.c 커널 명령어로 접근 가능한 단순 파일 시스템 유틸리티
include/filesys/filesys.h, filesys/filesys.c 파일 시스템의 최상위 인터페이스
include/filesys/directory.h, filesys/directory.c 파일 이름 → inode 변환 처리, 디렉터리 자체도 파일로 저장됨
include/filesys/inode.h, filesys/inode.c 디스크 상의 파일 데이터 구조(inode) 관리
include/filesys/fat.h, filesys/fat.c FAT 파일 시스템 관리
include/filesys/file.h, filesys/file.c 파일 읽기/쓰기 → 디스크 섹터 작업으로 변환
include/filesys/page_cache.h, filesys/page_cache.c 페이지 캐시 구현. VM 기능을 켜야 사용 가능
include/lib/kernel/bitmap.h, lib/kernel/bitmap.c 비트맵 자료구조 및 디스크에 저장/불러오기 지원

참고로, Pintos 파일 시스템은 Unix 스타일의 인터페이스를 사용합니다. creat, open, close, read, write, lseek, unlink 등의 Unix man 페이지를 읽어보는 것도 도움이 됩니다. Pintos의 파일 시스템 호출은 유사하지만 동일하지는 않습니다.

지금까지는 위 기능들이 기본적으로 구현되어 있어서 파일 시스템을 사용할 수는 있었지만, 심각한 제한이 있었습니다. 이번 프로젝트에서는 이러한 제한을 직접 제거합니다.


💾 파일 시스템의 지속성 테스트

지금까지는 각 테스트가 Pintos를 한 번만 실행했습니다. 하지만 **파일 시스템의 중요한 목적 중 하나는 "부팅 후에도 데이터가 유지"**되는 것입니다.

따라서 이번 프로젝트의 테스트는 Pintos를 두 번 실행합니다:

  1. 첫 번째 실행: 파일과 디렉토리를 생성함.