디스크는 여러 partition으로 나누어질 수 있다. 또는 여러 디스크를 하나로 확장할 수 있다.
각 partition은
포맷 = 운영체제가 올라간다
minidisk / volume = partition with file system 포맷된 partition
file system은 disk에 저장된다.
디스크는 1개 이상의 partition으로 나누어져 있다.
제일 앞의 sector 0는 Master Boot Record(MBR) ; booting 정보
그 다음은 Partition table (start & end address of partitions)
각 파티션의 첫번째 block은 boot block
MBR에 의해 load되어 booting될 때 실행된다.
추가적인 file system을 현재 file system에 붙이는 것
file system은 사용되기 전에 mount 되어야 한다.
root partition
OS kernel을 담고 있다.
다른 partition들은 부팅될 때 자동으로 mounting 되거나 수동으로 나중에 mount할 수 있다.
Own directory structure : Linux
Different name space : Windows ex. C, D drive
가상 파일 시스템.
같은 system call interface(API)가 다른 파일시스템에 사용될 수 있다.
file system은 기본적으로 on-disk
in-meory는 cache 역할을 하여 access 성능을 높여준다.
Boot Control Block
: booting하는데 필요한 정보 (boot block
(UFS)/partition boot sector(NTFS))Volume Control Block
: partition detail(# of size of blocks, free block count, pointers, free FCB count) (super-block
(UFS) / master file table(NTFS))File Control Block(FCB)
(i-node
(UFS))file system management / performance improvement via caching
File system은 일정한 크기로 block(multiple of sectors)을 나누어 사용한다.
track이나 sector단위로 사용하면 너무 작은 단위의 access가 발생하여, 성능이 줄어들기 때문이다.
Block allocation method는 어떻게 disk block을 파일에게 할당할 것인지를 의미
연속적 할당
하나의 파일에 대해서는 disk의 연속적인 block을 할당해주는 것이다.
modified contiguous allocation shceme
extent 는 연속적인 블록.
초기에 파일을 위해 할당, file을 위한 양이 충분치 않으면 다른 extent가 추가된다.
extent가 너무 크면 internal fragmentation problem
각 파일은 블록의 linked list로 되어 있다.
disk에서 여러 위치로 흩뿌려져 있다.
예시,
window FAT32 file system
(window, NTFS도 있다.)
<Window의 on disk 구조>
[Boot Block][2 FAT] [Data Area]
root directory 배열 하나
하나의 block size가 1024 byte라면, root directory에 몇 개의 file이 생길 수 있을까?
: 2^10 / 2^5 = 32개
root directory entry가 가지는 start block의 index(FAT)를 따라가면,
FAT에는 start block 다음에 취해야 할 행동이 적혀 있다.
즉, end-of-file이 적혀 있다면, 파일이 하나의 start block만으로도 내용이 끝난 것이고,
index가 적혀 있다면, start block 다음에 가야 할 block index가 있으니 내용이 한 block으로 끝나지 않았다는 것을 의미한다.
(아까 위에서 boot block 다음에 있던 것이 FAT)
FAT는 12/16/32의 크기를 가질 수 있는데, 커질수록 data area가 커진다.
block size를 1024 byte라고 가정했을 때,
test file의 start block #에 먼저 내용이 시작된다.
그리고 start block #을 따라 FAT에서 block #를 찾아갔더니, end-of-file이 적혀있지 않다. 추가적인 block이 필요했다는 뜻. 즉 file size가 1024 byte보다 많아서, 다음 block 내용까지 봐야 한단다. block #를 따라 또 읽으면 된다.
그리고 그 block #를 따라 FAT를 또 본다. index가 적혀 있다면 파일을 이어 읽고, 그 index를 FAT에서 찾아 end-of-file이 나올 때까지 반복한다.
즉 이 test file은 총 block을 3개 사용한다. (217, 618, 339)
마지막 339 block에서 파일 내용이 끝나므로 마지막 block은 일부만 data가 채워져 있을 수도 있다.
즉 이 파일의 크기는
1024 X 2 < file_size <= 1024 X 3 이다.
index block이 모든 포인터들을 모아둔다.
FCB 크기 정해져 있으므로 direct block pointer 뿐만 아니라 single indirect, double indirect도 사용한다.
Block size = 1024 bytes, 10 direct, indirect/double/triple 1
attribute 없다고 가정
- case1 : access byte offset 9000 of a file
9000/1024 = 8.xx --> 8번째 block에 있겠다
8번째 direct : block #367
9000 - 1024 X 8 = 367
8번째 block의 367번째로 가면 된다.
- case2 : access byte offset 350,000 of a file
direct 영역 1024 X 10 = 10 X 2^10 = 10 KB
single 영역
1024/4 = 256 pointer
256 X 1K = 256K
10K ~ +256K
double 영역 start : 10K + 256K = 272,384)
350,000 - 272,384 = 77,616
Total size =
ex. Block size = 1024 bytes, pointer size = 4 bytes
10 direct, 1 indirect, 1 double, 1 triple
Maximum File size = (10 1K) + (1K/4 1K) + ((1K/4)^2 1K) + ((1K/4)^3 1024)
increasing block size ? pointer 개수 늘어남
adding one more indirection?
direct 없애고 single로 채우는 방법도