위 커널의 제약을 제거하기 위해, user space에 raw block device와 직접 상호작용하는 새로운 오브젝트 스토리지 인터페이스와 업데이트 방식(update semantics)을 구현.
atomic transactions을 지원
일반적인 커널 파일 시스템은 데이터 업데이트를 일정 시간 동안 메모리에 보관한 후, 나중에 디스크에 기록하는 lazy flush를 하는 반면, EBOFS는 적극적으로 디스크 쓰기를 스케줄링함
EBOFS는 B-tree 서비스로서 디스크에서 오브젝트를 검색하고, 블록 할당을 관리하며, 컬렉션(Placement Group)을 인덱싱함.
EBOFS는 Copy-on-Write를 적극적으로 사용
사용자 공간
POSIX 인터페이스 (open, read, write 등)
- open("file.txt", O_RDWR) → sys_open()
- read(fd, buf, size) → sys_read()
- write(fd, buf, size) → sys_write()
⇅ (시스템 콜)
커널 공간
- 시스템 콜 인터페이스: POSIX 호출을 커널 내부 함수로 변환
- sys_open(), sys_read(), sys_write()
⇅- VFS (Virtual File System): 파일 시스템 요청 추상화 및 라우팅
- VFS open → ext4_lookup()
- VFS read/write → ext4_read_inode(), ext4_write_block()
⇅- 파일 시스템 드라이버 (ext4, XFS 등): 실제 파일 시스템 작업 수행
- ext4_read_inode(): 데이터 블록 확인
- ext4_write_block(): 데이터 쓰기
⇅- 블록 디바이스 계층: 디스크 I/O 요청 스케줄링 및 디스크 드라이버 호출
- bio_submit(): 블록 I/O 생성 및 처리
하드웨어 (Disk, SSD 등)
- 디스크 드라이버가 디스크 장치와 명령 전송