이전 두 과제에서 여러분은 파일 시스템을 광범위하게 사용했지만, 그 내부가 어떻게 구현되어 있는지는 걱정하지 않았습니다. 이번 마지막 과제에서는 파일 시스템 구현을 개선하게 됩니다. 주로 filesys 디렉터리 안의 코드 작업을 하게 됩니다.
Project 4는 Project 2 또는 Project 3 위에 구축할 수 있습니다. 어떤 것을 선택하든, 해당 프로젝트의 기능이 정상 동작해야 합니다.
filesys/Make.vars 파일을 수정해서 VM 기능을 활성화해야 합니다.아래는 이번 과제에서 처음 접하게 될 파일들입니다. 대부분 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를 두 번 실행합니다: