-
14일차 - File System ImplementaionCS지식/운영체제 2021. 5. 16. 22:06
지난 시간에는 file의 접근방법에 대해 알아보았다.
이번에는 disk에 file이 어떻게 저장되는지에 대해 배웠고 여러 방법에 대한 장점과 단점에 대해 알 수 있었다.
1. Contiguous Allocation
디스크에 file을 저장하는 방법 중 하나인 contiguous allocation으로 말그대로 연속적으로 할당을 하는 것이다.
여기서, 먼저 알아두어야 할 개념은 disk에 file이 올라갈 때에는 통째로 올라가는 것이 아니라
disk를 일정한 크기의 sector로 나누고 file을 분할하여 올리는 것이다.
논리적 메모리에서 물리적 메모리로 올릴 때 paging기법에서 page와 비슷한 관점으로 보면 된다.
이렇게 동일한 크기의 sector가 하나의 disk에 여러 개가 존재하고 file이 6개의 sector가 필요하다면
연속으로 0번부터 5번 sector에 들어가는 것이다.
이전 시간에 directory에 대해 배웠는데 directory에는 해당 directory 안에 있는 file의 메타데이터가 있다고 배웠다.
contiguous allocation을 사용하게 되면 dircetory에는 파일의 이름과 파일이 존재하는 disk 시작 위치, 파일의 길이가 저장된다.
contiguous allcoation의 단점은 무엇일까?
먼저, external fragmentation이 발생할 수 있다는 것이다.
모든 파일의 길이가 각자 다르기 떄문에 비어있는 공간이 있음에도 활용이 될 수 없는 경우가 발생할 수 있다.
예를 들어, disk에 0~31까지의 sector가 존재하고 0~6번, 9~12번이 채워져있다고 생각해보자.
이 상황에서 길이가 3인 file이 들어오길 원한다면 7~8번이 비어있어도 연속해서 3개의 sector가 필요하기 때문에 사용되지 못하고 external fragmentation이 발생하게 되는 것이다.
다음으로 file grow가 어렵다는 것이다.
file의 크기가 항상 일정할 수도 있지만 크기가 커질 수도 있다.
file의 크기가 커졌을 때 연속으로 할당할 수 있는 공간이 없으면 file을 키우는 것이 불가능해진다.
이러한 경우를 예방하기 위해 file 생성 시 얼마나 큰 hole을 배당해 줄 것인지 고려해서 할당을 해주어야한다.
하지만 이렇게 미리 예측해서 할당하는 것은 우리가 미래를 알 수 없기 때문에 정확하지 않을 수 있고
오히려 큰 공간을 file에게 할당해서 공간을 낭비하고 internal fragmention이 발생하는 문제가 생길 수 있다.
그러면 contiguous allocation의 장점은 무엇일까?
빠른 I/O가 가능하다는 것이다.
file의 시작위치만 찾아내면 file이 존재하는 sector가 연속적으로 위치해 있기 때문에 I/O가 빠르다.
또한, file이 연속적으로 할당되어 있어 file의 중간을 접근하려한다면 시작위치에서 몇 번째 뒤로 가기만 하면된다.
즉, direct access(=random access)가 가능하다.
2. Linked Allocation
linked alloctaion은 contiguous allocation과 달이 file을 아무 sector에 저장할 수 있다.
첫 번째 시작위치가 정해지고 다른 sector 공간이 필요하다면 다음 sector의 번호를 첫 번째 sector에 저장해놓는다.
즉, n 번째 위치를 n-1번째 sector 마지막에 저장하는 것이다.
마지막 sector에는 마지막 sector라는 것을 표시해주어야한다.
이렇게 설계된 linked allocation을 이용하면 directory에는 파일의 이름과 첫 번째 시작위치를 저장해놓으면 된다.
linked allocation의 장점은 external fragmentation이 발생 안한다는 것이다.
아무 sector나 저장이 가능하므로 external fragmentation이 발생할 일이 없어진다.
단점으로는 direct access가 불가하다는 것이다.
file의 중간을 보려면 첫 번째 sector부터 순서대로 따라가면서 접근을 해야한다.
즉, 순차접근만 가능하다는 것이다.
두번째 단점은 reliability문제이다.
한 sector가 고장나 pointer가 사라지게 되면 많은 부분을 잃게 된다.
file이 담겨있는 sector들은 다음 sector의 위치를 가리키는 정보가 담겨있으므로 중간에 하나만 고장나더라도 file에게는 큰 피해이다.
마지막 단점으로는 공간 효율성이 떨어진다는 것이다.
각 sector에는 다음 sector의 위치를 담아야하기 떄문에 공간적으로 낭비가 된다.
보통 하나의 sector가 512bytes인데 다음 위치를 가리키는 pointer는 4bytes이므로 sector는 4bytes씩 손해를 보게 된다.
3. Indexed Allocation
이 방법은 disk의 sector 하나에 file이 존재하는 sector 위치를 순서대로 저장해놓는 것이다.
예를 들어, file A가 disk에 1,4,10,5,7이러한 순서대로 저장이 되었다면 이 정보를 또 다른 sector인 9번에 저장하는 것이다.
이렇게 설계되면 directory에는 파일의 이름과 index block 위치(file이 저장된 위치를 알려주는 sector 위치)를 저장해놓으면 된다.
indexed allocation의 장점은
External fragmentation이 발생하지 않고 direct access가 가능하다는 것이다.
단점으로는
file의 크기가 작아 sector가 하나만 필요한 경우에도 indexed block때문에 2개의 sector를 사용하는 것이다.
실제로 많은 file들이 크기가 작기 때문에 고려할만한 문제이다.
그리고 file이 너무 큰 경우에도 문제가 된다.
file이 너무 크다면 하나의 sector만으로 index(file이 저장되어있는 위치 정보)를 저장하기에는 부족해진다.
'CS지식 > 운영체제' 카테고리의 다른 글
인터럽트(Interrupts)란 무엇인가(공룡책 공부 시작!!) (0) 2021.05.22 15일차 - Disk Management and Scheduling (0) 2021.05.18 13일차 - File System (0) 2021.05.13 12일차 - Virtual Memory (0) 2021.05.10 11일차 - Memory Management(2) (0) 2021.05.07