운영체제#13
LeeMir, 10 May 2021
4강 - File Systems(이어서)
Virtual File Systems
- 한 컴퓨터에 여러 개의 File System을 어떻게 적용할 것인가?
- 하나의 Virtual File System 레이어 밑에 여러 File Systems를 놔서 사용자와 각 File System 사이에서 역할을 함
Determining Block Size
- Large vs Small
- Large Block Size
- 조그만 데이터를 기록하고 싶어도 매우 큰 Block를 할당해야함(공간 효율 낮음)
- 많은 데이터를 순차적으로 큰 단위로 기록하므로 성능면에서는 우수
- Small Block Size에 비해 i-node의 관리 Header의 크기가 작은 편
- Small Block Size
- 조그만 데이터를 기록할 때 작은 Block들로 나눠서 기록할 수 있음(공간 효율 높음)
- 하나의 데이터도 여러 Block들로 쪼개서 기록해야해서 성능이 떨어짐
- Block 개수가 많아져 모두 직접 주소 지정 방법으로 지정할 수 없어 i-node의 관리 Header의 크기가 큼
- Large Block Size
- 통계에 따르면 대부분의 File들의 크기는 작은 편, 소수의 크기가 큰 File 들이 Disk 공간을 차지함
Free Space Management
- Bit map
- 각 Block 당 하나의 Bit와 대응해 Bit map을 만들어 빈 공간을 찾기 쉬움
- Block의 개수만큼의 Bit만 필요함
- Linked List
- 빈 공간(Free blocks)을 pointer를 이용해 chain 형태로 묶음
- Free block을 할당하기 위해서는 List head부터 읽어야하는데, 하드디스크와 같이 읽는 속도가 느린 보조기억장치에는 한번 더 읽는 것조차도 굉장히 치명적이라 비효율적임
- Grouping(Indexing)
- 여러 개의 Free blocks를 하나의 Index block으로 묶어 그 정보를 List에 기록
- Index block들을 Linked List처럼 Chain 형태로 묶음
- 시간이 지날수록 Block들이 여기저기 흩어져있게 돼 효율이 떨어짐
- Windows에서는 이를 위해 디스크 조각모음을 지원
- File을 순차적으로 정렬
- 실제로 약간의 성능 향상은 있으나 큰 차이는 없고 오히려 디스크 조각모음하는 것 자체가 낭비
- Windows에서는 이를 위해 디스크 조각모음을 지원
File System Backups
- 화재같은 재해나 사용자의 실수로 인해 데이터가 소실될 수 있어 Backup이 필요함
- Backup은 주로 Tape에 함
- Backup의 종류
- Physical Dump : Disk에 있는 내용 그대로 Backup
- Logical Dump
- Complete Dump : File System에 있는 모든 File 및 정보를 Backup
- Incremental Dump : 마지막 Dump 이후로 변경된 File만 Backup
- 주로 주기적으로 Complete Dump, 그 사이사이에 Incremental Dump를 하는 방식을 이용함
- Dump 절차
- 모든 File 및 Directory 마다 1 bit씩 대응되는 Bit map 생성
- 모든 Directory는 1로 설정, File은 변경된 File만 1로 설정
- 변경된 File이 없는 Directory는 다시 0으로 바꿈
- 먼저, Directory만 Dump해서 뼈대를 만듦
- 그 후 변경된 File만 Dump해서 완성함
UNIX Block Addressing
- Hole
- 앞부분을 기록하다가 중간은 텅 비게 놔두고 뒷부분에 기록
- Hole 부분은 데이터 Block이 없음
- lseek를 이용
- 파일의 크기는 굉장히 커보임, 그러나 소비하는 데이터 Block은 몇 개 없음
- Dump / Copy할 경우 Hole 부분을 0으로 채워서 처리하기 때문에 굉장히 많은 데이터 Block을 소비하게 됨
Increasing File System Performance
- 성능의 Bottle-neck : File System
- Caching(DRAM과 Disk 사이에 존재하는 Disk cache)
- 교체 정책으로는 LRU를 사용
- Write-through(데이터가 변경되면 즉시 Cache와 Disk 모두에 기록) 방식과 Write-back(Cache에만 기록하다가 나중에 한꺼번에 Disk에 기록) 방식이 있는데, 후자가 일관성에서는 좋지 않으나 성능은 뛰어남
sync
라는 시스템 호출을 이용해 Disk cache 내용을 Disk로 주기적으로 업데이트함
- Read-ahead
- File의 앞부분부터 Disk에서 꺼내올 때 뒷부분도 미리 꺼내서 Disk cache에 저장
- 필요 없는 내용인데 미리 꺼내는 것은 손해
- 필요한 내용이었으면 다음에는 미리 꺼냈던 양보다 더 많은 양을 미리 꺼냄
- Reduce disk arm(head) motion
- disk 원판에 File System을 순차적으로 기록할 경우, File을 추가하거나 삭제할 때 disk head는 i-node bit map이나 i-node list에도 이동해야해서 이리저리 움직이느라 시간이 오래 걸림
- disk를 Cylinder group 단위로 나눠서 File System을 기록해 head의 움직임을 최소화함
- 이로 인해 FIle System에 Group descriptor도 기록해야 함
- 한 Group에 Super block이 깨지더라도 다른 Group과는 상관 없어 안정성이 높음
File Access Control
- Access Control Matrix
- 각 File마다 각 사용자마다 권한을 달리하는데, 이를 행렬의 형태로 저장
- R(읽기), W(쓰기), E(실행), D(삭제), - (불가능)으로 구분함
- Access Control List
- 각 File마다 권한이 있는 사용자와 권한을 기록한 list가 존재
- UNIX에서는 소유자 / 그룹 소유자 / 기타 사용자로 나눠서 기록하는 방식을 채택
- 각 File마다 권한이 있는 사용자와 권한을 기록한 list가 존재
- Capability List
- 사용자를 기준으로 각 사용자가 접근할 수 있는 File과 그 권한을 list로 기록
- 현재 UNIX나 Windows에서는 이 방식을 File이 아닌 다른 단위에서 사용
File System Layout
- MS-DOS FAT File System
- FAT Blocks에 File이 차지하는 영역을 기록
- File이 차지하는 영역이 연속적일 필요는 없음
FF
는 마지막,0
은 미할당 Block을 뜻함
- Root를 제외한 모든 Directory에는
.
과..
이 자동으로 생성되어 존재 - 원래는 File name과 Extension이 8 bytes, 3 bytes로 제한되어있었는데 나중에 Directory entry를 여러 개를 쓰는 방법을 사용해 긴 이름도 사용 가능
- MS가 특허를 갖고 있음
- FAT Blocks에 File이 차지하는 영역을 기록
- UNIX V7 File System
- i-node bit map, data block bit map, i-node blocks가 존재
- i-node를 이용하는 방식
- 0번과 1번 i-node는 사용하지 않음, 2번은 Root로 고정
- 모든 Directory에는
.
과..
이 존재- Root는
.
과..
의 i-node 번호가 2번(자기자신)으로 같음
- Root는
- Directory의 존재 이유는 file name을 i-node 번호로 바꾸기 위함
- i-node에 File 데이터 영역 등 모든 것을 기록
- data block을 기록할 때, 10개까지만 direct로 기록하고 더 필요하면 single / double / triple indirect 방법을 사용
- 큰 File들은 계속 따라가야하므로 읽는 데 약간의 overhead가 존재하나, 대부분의 File들은 크기가 작아 direct로 가능하기 때문에 자주 사용됨
- data block을 기록할 때, 10개까지만 direct로 기록하고 더 필요하면 single / double / triple indirect 방법을 사용
UNIX Access Control
- Access Control Bit
- i-node에 기록되어 있음
- 9 bits를 3 bits씩으로 나눠서 소유자, 그룹 소유자, 기타 사용자의 권한을 표시(rwx rwx rwx)
- File을 open할 때, Access Control Bit를 검사
- read / write 할 때 따로 검사하지 않고 open할 때 한꺼번에 검사
Linux Ext 2, 3, 4 File Systems
- Ext-2
- Disk 공간을 Cylinder group로 나누는 방법 사용, Journaling은 하지 않음
- Ext-3
- Journaling 도입
- Ext-4
- Extent라는 자료구조 등장
- i-node에서 data block을 가리킬 때, direct로 하나만 가리키는 게 아니라 몇 번에서 몇 번까지인지를 기록
- File System이 가능하면 연속적으로 할당하려고 하기 때문에 효율적임
- Extent라는 자료구조 등장