* File 유지사항
1) File Pointer : Process가 Disk에 위치를 가르키는 포인터
2) File Open count : 몇 명이 이 파일에 접근해 있는가
3) Disk location of the file : data 접근 정보를 cache에 저장
4) Access rights : "per-process(process가 read만할지 write도 가능한지를 분별)"정보
> Mandatory : 여러 파일이 동시에 수정되는 것을 금지
> Advisory : 여러 파일이 동시에 수정되는 것을 권고사항으로 둔다. SW개발에 따라 달라짐
* File Access Methods
- Sequential : 앞에서부터 순차적으로 Access한다.
- Direct : 직접적으로 특정 위치로 Access한다.
* Disk structure
- disk는 partition이라는 것으로 분할이 된다.
- raid : 여러개의 disk를 하나로 묶거나, 복제하여 보호하는 것
- raw : application에서 알아서 실시(disk 사용) eg. database(b+ tree)
* Graph Directories
- file 구조가 tree가 아닐 수 있다. > graph
- symbolic link도 원본을 link하거나, hard link로 원본을 복사하고, synchronize한다.
- 이는 Multi user system인 Unix계열에서 유용하다
* Directory Implementation
- Linear list / Hash Table(각 문자의 값을 더하여 Hash Function을 계산)
* Virtual File System : File Type에 관계없이 열수 있게 해주는 것
* 파일 시스템 구조
- 장치 드라이버
- 입출력 제어 : 장치 드라이버의 인터럽트 처리기
- 기본 파일 시스템 : 드러이버를 호출하는 시스템
- 파일.구성 모듈 : 파일과 블력간의 통신, 가용공간 관리
- 논리 파일 시스템 : 디렉토리 정보, 보호 및 보안에 관련된 일을 함
* Allocation Methods
- Disk block에 파일을 저장하는 방식
ⓐ Contiguous Allocation : 연속되어 디스크에 할당된다.
- 단점
> external fragmentation이 발생 > compaction이 필요
> file size를 키우기 힘들다(File 이동 or 초과 분량을 다른 곳에 만들어서 연결 시킨다.(extent))
- 장점
> sequential, direct access 가능
> disk head 이동을 최소화 함
ⓑ Linked Allocation : Disk를 linked list로 연결한다.
- File의 시작 부분과 끝 부분을 link로 연결, 가르킴. 각 block은 맨 마지막 부분에 다음 block의 위치를 가르키고 있음
- 장점
> external fragmentation이 없다.
> Compaction이 필요 없다.
- 단점
> direct access가 어렵다
> disk head이동에 따른 overhead 발생(Seek time이 증가)
>> 조각 모음을 통해 link를 한 곳에 모을 수 있다. seek time향상
> reliability가 떨어진다. 중간 bock이 깨지면 파일이 사라질 수 있다.
ⓒ FAT(File Allocation Table)
- ⓑ에서 블럭마다 관리하던 다음위치 정보를 따로 table을 만들어서 관리
- Linked 보다 더 빠르게 점근이 가능
- ⓑ의 장점을 모두 가지고 있으며, 추가적으로 direct access도 빠르게 가능하다.
- 단점
> FAT block이 깨지면 모든 데이터 관리가 불가능하다. (FAT을 여러개로 복사해서 관리)
> Disk head overhead가 발생
ⓓ Indexed Method
- index block을 만들어 block의 순서대로 위치정보를 저장한다.
- 장점
> 빠른 direct access, sequence access가 가능하다.
> external fragmentation이 없다.
- 단점
> linked allocation보다 공간 낭비가 많다.
> File이 커지면 index block이 많이 필요해진다.
>> index linked, Multi level index 방식으로 해결
>> unix계열의 경우 combined 방식을 사용하여 해결을 한다.
* Free space Management
- Free space list를 갖고 있다.
ⓐ bitmap
- n개의 bit는 n개의 block의 정보를 저장한다. ( 1: block free / 0: Not free )
- 데이터를 넣을 때 왼쪽부터 scan하면서 check & allocation!
> CPU에는 word 단위로 가장 먼저 1이 나오는 bit 위치를 알려주는 instruction이 존재한다.
- bit map은 너무 큰 용량이 필요하다.
ⓑ Linked list
- free space를 linked list로 연결
- 연속된 공간 할당이 힘들다
- 공간 낭비가 없다.
> Grouping : free block을 특정 size로 묶어서 link시킨다.
> counting : free block이 연속적으로 오면, 하나의 group으로 묵는다.
각 group의 빈공간 수를 세서 Allocation시 group의 block수와 가장 많이 비슷한 곳에 allocation을 실시