본문 바로가기

STUDY/운영체제

[2019.06.26] File Management

File Systems : 파일을 관리하는 시스템. 물리적인 디스크에 논리적으로 끊어서 공간을 할당.
File System에는 FCB (File Control Block)이 있다. device file의 FCB는 device type 필드와 device number 필드가 있다. major number는 장치의 타입 (ex. terminal, disk), minor number는 장치의 단위들을 나타낸다.

- File Directory : 파일에 대한 정보를 담고 있다. basic information, address information (파일이 저장된 디스크 내의 위치값), access control information. 얘네는 PCB 에도 저장된다. 그러면 같은 정보를 두 군데에 저장하므로 문제가 생겨 FCB에만 저장을 하게 하고, Directory는 FCB를 가리키게 한다. (mapping)
    inoode : FCB of Unix/Linux, FCB 고유 숫자
    Directory는 계층적인 구조이다. 각 디렉토리마다 inode가 있다. 만약 최상위 directory의 inode에서 FCB를 보면 해당 파일의
   내용이 들어있는 block의 번호가 있다. 해당 번호의 data block을 보면 하위 디렉토리 inode 번호들이 있고, 해당 inode 번호를
   통해 또 하위로 타고 타고 들어간다.

Acyclic-Graph Directories는 한 파일을 다른 위치에서도 볼 수 있다. 즐겨찾기 개념. 파일을 가리킨다.

- File System Structure
 내가 하드 디스크를 파티션하거나 그럴 때 File Systme Structure가 만들어짐.
 Boot Block : OS를 메모리로 읽어오는 code.
 Super Block : file system에 대한 정보를 담고 있다.
 Inode List : inodes의 배열 (FCB list). FCB 하나는 128bytes.

파일 공간 할당 방법
- Contiguous allocation
 디스크에서 data block에 파일을 할당하는 데 만약 file A의 길이가 3이고,  block 2부터 할당된다면 연속되게 2, 3, 4에 저장된다. File allocation block에 start block number, length가 저장되어 운영체제가 어디서부터 시작하여 어디까지 할당시킬 지를 안다. 근데 이 방법은 파일을 수정하여 확장시키기가 힘들다.
 - Chained allocation
 4KB인 한 블러마다 4byte씩 공간을 만들어 다음 block number를 저장한다. start block number와 해당 파일의 길이 정보를 가지고 체인을 따라 간다. 근데 이 방법은 내가 파일의 끝을 읽는다 하면 처음부터 체인따라 읽어 끝으로 이동해야 한다.
- Indexed allocation
 File allocation table에는 각 파일마다의 index가 있다. 파일 하나당 index block을 할당해서 해당 index block에는 파일 data block들의 number들을 저장한다. index block을 읽고나면 파일의 내용에 곧바로 접근이 가능하다. 파일의 앞이든 뒤는 읽는 속도가 같다. external fragmentation이 없다. (안쓰이는 작은 공간이 생기는 현상이 없다.) 파일 크기가 늘어나는 걸 걱정하지 않아도 된다. 하지만 index block이 날아가면 모든 걸 잃어버린다.

디스크 전체의 빈 공간을 어떻게 관리할 것인가?
- Counting
 빈 부분 block의 시작번호부터 연속으로 비어있는 block의 갯수 기록
- Linked list (free list)
  chained allocation과 비슷하다. head가 빈 block 처음을 가리키고 그 다음 빈 block을 차례차례 next로 가리켜 linked list가 된다. 맨 앞의 것을 할당해주고 head의 주소만 바꾼다.
- Bit vector (bit map)
 n개의 block이 있으면 1bit씩 할당하여 bit[n]으로 어느 block이 비었는지 확인한다. bit[i] = 0이면 block i가 할당되어 있고 1이면 비어있다.

UNIX FIle Management : Indexed allocation 방법 사용.
   - Data Block Addressing
    indoe에 direct block 10개, indirect block 3개가 있다. direct는 파일을 직접가리키고 indirect는 single이면 2개만큼,
   double이면 3개, tuple이면 4개만큼 거쳐 파일을 가리킨다. 
    Directly accessed된 것의 크기를 구하자면 10 * 4KB(한 block 크기) = 40KB이다. single indirected + double + tuple도
   구하여 모든 block이 할당될 경우의 max size를 구하면 40KB + 4MB + 4GB + 4TB이다.

Linux Virtual File System에는 direct block 12개, indirect block 3개가 있고 Page Cache (Disk Cache)가 있다.