reference: https://pages.cs.wisc.edu/~remzi/OSTEP/, 시스템 프로그래밍, 운영체제 수업(최종무 교수님)
1) inode와 user data가 다른 트랙에 존재할 확률이 크다.
2) 시간이 지날수록 외부 단편화가 증가한다.
=> Seek Time 증가
multiple I/O and inode 블록과 user data 블록의 트랙 차이 => Seek Time 증가
(아이디어)
파일 시스템이 설치될 파티션(또는 디스크)는 실린더 그룹들로 나뉨(참고로 ext2의 경우 block group이라 칭함).
하나의 실린더 그룹의 구조
Management
Rule A. Directory: 디렉터리 하위에 최대한 많은 파일들이 생성되게끔 한다. -> to balance directories across groups(fairness)
-> load-balancing을 위해 각 그룹마다 디렉터리 갯수를 균등하게 할당한다.
Rule B. File: (1)해당 파일이 속한 디렉터리와 같은 실린더 그룹에 파일을 할당한다. (2) 파일의 아이노드와 데이터 블록들을 같은 실린더 그룹에 할당한다. -> to allocate inode, data blocks and directory as close as possinble
-> "name space locality"를 활용
How to handle a large file for allocation in FFS? => Rule C
: 하나의 파일 데이터가 하나의 실린더 그룹을 독점할 수 있음. 이럴경우 디렉터리 내 다른 파일에 대해 name space locality를 활용할 수 없음.
: (해결) 한정된 블록을 할당한다(a limited number of blocks, called as chunks). 남은 데이터들은 다른 실린더 그룹의 청크에 할당한다.
: pros: locality among files / cons: locality in a file
UFS의 디스크 블록 크기: 512B => FFS의 디스크 블록 크기: 4KB(대부분의 FS의 블록 사이즈는 4KB)
(블록 크기 증가)
pros: Less seek and more transfer -> higher bandwidth
cons: 내부 단편화(internal fragment) 증가 <- (해결채) sub-blocks (fragment) allocation
Symbolic link 처음 도입
atomic rename(), long file name, ...