In-memory structure
-
OS가 부팅 후, 프로세스가 파일을 접근할 때의 동작에 대한 구현
buffer cache = directory cache + buffer cache
-
Buffer cache : 디스크에 존재하는 파일 중 자주 쓰이는 파일을 buffer cache에 넣어 사용한다.
- File data cache : buffer cache
- directory data cache : directory cache
-
프로세스 별로 Open한 파일에 대한 정보를 system-wide open-file table에 통합하여 관리하고, 각각의 process는 process별로 open한 파일의 정보가 담긴 system-wide open-file table의 주소를 저장한다.
-
UNIX에서는 프로세스가 생성이 되면 Per-process 0, 1, 2번은 open한 상태로 유지된다.
- 0번 : standard input
- 1번 : standard output
- 2번 : standard error
Virtual file system
- 수많은 파일 시스템이 존재하며, 공통된 부분도 존재하고 각각의 차이점도 존재한다.
- 공통된 부분을 모아 virtual file system(VFS)에 저장하고, 서로 다른 부분을 새로 Layer를 만들어 구현에 쉽도록 하였다.
파일 시스템 종류
- CD-ROM : ISO 9660 (운영체제에 독립적)
- UNIX : UFS, FFS
- WINDOWS : FAT(16bits), FAT32(32bits, USB메모리에 많이 사용된다), NTFS (신뢰도 향상)
- LINUX : ext 2/3/4, distributed file system, 기존 시스템과의 호환을 위해 파일 시스템이 매우 많다.
- New ones : GoogleFS, Oracle ASM, FUSE …
- In embedded system : NAND-FLASH 기반한 파일 시스템 사용 (ZFS)
On-disk structure
- 전원이 꺼져도 디스크 내의 데이터들은 어떻게 관리되는 것인가에 대하여 구현
Boot control block (부팅시 필요, UNIX : UFS / Windows : NTFS)
- Boot block(UFS) or Boot sector(NTFS)
Volume control block (파일 시스템에 대한 정보 저장)
- Super block(UFS) or Master file table(NTFS)
Directory structure (디렉토리 관리)
- i-node(UFS) or in master file table(NTFS)
MBR/GPT
- 운영체제를 Booting해주는 boot loader 존재
Active한 partition
Boot block
Super block
- 파일 시스템에 대한 meta data(타입, Block number 및 개수 등)를 가지고 있다.
Bitmaps block
- Free space에 관한 데이터를 가지고 있다.
i-nodes (FCB)
Root dir
- 제일 처음 생성되는 root directory에 관한 파일을 관리한다.
- Format 명령어 (파일 시스템을 만드는 명령어)
- C:/> format (windows)
- $ mkfs (LINUX)
Disk block
- OS에서 Cylinder No. / track No. / sector No. / Surface No. 등으로 관리할 수 없기 때문에 disk block number를 통하여 관리한다. (Disk block 단위로 관리한다)
- Disk block 크기는 보통 4Kb이다.
Free-space management
Linked list 방식 : 에러가 발생하기 쉬워 잘 사용되지 않는다.
A Typical File Control Block
- I-node (UNIX) / Master file table (NTFS)
Directory implementation
-
Directory data : 파일의 이름과 FCB(meta data)를 관리한다
-
파일과 FCB를 저장하는 방법
-
Directory entry에 파일이름과 파일 위치정보만 저장하는 방법
-
파일 이름, 위치, 몇 개의 중요한 정보를 중복 저장하는 방법
File data Allocation methods
Contiguous allocation
- 디스크 블록을 연속적으로 할당하는 방법
- CD-ROMS와 같은 읽기 전용에서 많이 사용된다.
- 장점
- Disk seek time이 최소화 된다.
- 시작 위치와 길이만 알면 되기에 가장 간단한 방법이다.
- Directory entries가 간단하게 표현된다.
- 단점
- 파일이 커지면 공간이 충분한 곳으로 전부 이동해야 한다.
- Dynamic storage allocation이 필요하다
- External fragmentation이 발생하며, compaction이 필요해진다.
Linked allocation
- Linked list로 연결하여 불연속적으로 할당하는 방법
- 장점
- Directory entries가 간단하게 표현된다.
- External fragmentation이 발생하지 않는다.
- Free block이 있다면 파일이 커져도 된다.
- 단점
- 포인터 헤드 유지에 따른 오버헤드
- 중간에 연결이 끊기면 전부 사용하지 못한다. 신뢰성 저하
- 원하는 위치의 파일을 읽기 위해서는 처음부터 읽어야 한다(Random access 불가)
File-allocation table(FAT)
- 포인터를 별도의 테이블 형태로 관리한다.
- Random access가 가능하다.
- 신뢰도를 위하여 사본을 만들어 관리한다.
Indexed allocation
- 파일의 위치를 별도의 디스크 블록에 저장한다.
- Index – node(i-node) 형태로 관리한다.
- 신뢰도가 FAT보다 높으면 RANDOM ACCESS가 가능하다.
- UNIX/LINUX가 사용하는 방법
- 장점
- External fragmentation 없이 direct access가 가능하다.
- 필요한 파일이 열릴 때만 i-node 가 사용된다.
- 단점
- 인덱스에 관한 오버헤드가 발생한다.
- Direct block은 최대 12개 까지 : 48KB
- Single indirect는 4B Int를 고려하면 1K * 4KB = 4MB
- Double inderect : 4MB * 1K = 4GB
- Triple indirect : 4GB * 1K = 4TB
Buffer caching으로 성능 최적화
- Block size가 커질수록 한 번에 읽는 양이 많아져 data rate가 좋아진다.
- Block size가 커질수록 disk space utilization이 낮아진다. Internal fragmentation이 커진다.
Read-ahead
- 파일 시스템은 다음 블록에 대한 요청을 예상하여 미리 읽는다
- HDD를 감안한 성능 최적화 방법이며, 미리 읽어온 것은 Cache에 저장된다.
Buffer cache
- HDD에서 자주 사용되는 데이터를 디스크가 아닌 메인 메모리에서 읽음으로써 성능을 높인다.
- SSD도 Buffer cache를 둠으로써 성능을 향상시킬 수 있다.
- 4MB만 되어도 상당히 효율적이다.
Caching writes
- Synchronous writes(버퍼와 디스크에 동시 변경내용 적용)가 매우 느리다.
- Asynchronous write ( write-behind / write-back)
- Uncommitted된 block의 queue를 유지한다.
- 주기적으로 queue의 내용을 disk에 flush한다.
- 신뢰성이 낮다 : 버퍼에만 반영되고 메인 메모리에는 반영되지 않을 수 있다.
File system consistency
- 신뢰성 향상 방법
- 손실된 데이터를 복구할 수는 없지만, 비정상적인 상황을 일관적인 정상적인 상태로 복구한다.
- Windows : scandisk UNIX : fsck
Log Structured File Systems
Journaling file systems
- Fsck는 시간이 오래 걸리므로 파일 시스템이 재시작될 때 매우 느리게 동작한다.
- Log, journal, 갱신된 파일과 directories를 독립된 장소에 저장한다.
- Crash가 발생하면 log(journal)을 읽어 부분적으로 갱신된 파일에 대하여 undo를 실행한다.
- Windows : NTFS LINUX : ext3부터 적용
- 수행된 operation의 요약 정보를 journal에 기록한다.
- 블록이 flush되면 journal 내용이 삭제된다
- Journal 기록이 남아있다면 비정상적인 상태가 있다는 의미
Remote File Systems
Network File Systems (NFS)
- VFS interface : 파일 시스템의 공통된 부분을 구현
- RPC / RMI : 분산 시스템에서 다른 컴퓨터에 있는 코드를 실행하는 메커니즘