파일 접근 방법
<aside>
💡 NOTE
- 연속할당
- 링크 할당
- 인덱스 할당
</aside>
연속 할당
<aside>
💡 NOTE

- start 로부터 몇번까지 할당하는 것
- 장점
- 빠른 I/O. 보통 헤드가 이동하는 시간이 오래걸리는데 첫번째만 찾으면 나머지는 크기가 아무리 크더라도 빠르게 찾아온다. swapping용도로 사용할 때 연속할당을 쓰면 좋다.
- 직접 접근이 용이하다. 중간에 23번을 접근하고 싶으면 19→ 23이 아니라 바로 23접근이 가능하다.
- 단점
- 외부 단편화가 발생할 수 있다.(크기가 일정하지 않기 때문에)
- file 크기가 제한적이다. → 큰 것은 미리 남겨서 할당하는 방법이 있지만 그것도 제한적이다.
</aside>
링크 할당
<aside>
💡 NOTE

- 첫번째를 가면 두번째 위치를 알려준다.
- 장점
- 단점
- 직접 접근이 불가능하다.
- 헤더를 계속 옮겨야 해서 I/O 시간이 오래걸린다.
- 포인터를 위한 공간이 block의 일부가 되어 공간 효율성이 떨어진다.(?)
</aside>
indexed 할당
<aside>
💡 NOTE

- 첫번째에 인덱스 표를 만든다.
- 장점
- 단점
- 아무리 작은 파일이라도 2개의 file을 사용한다.
- 너무 큰 경우에도 그 위치값을 다 적을수 없을수도 있다.
- → linked shema(많은 경우 인덱스 파일을 추가로 넣는다.)
- →멀티 인덱스(인덱스 안의 인덱스)
</aside>
파일 시스템 구조
<aside>
💡 NOTE
UNIX

- Boot block : 부팅에 필요한 정보
- Super block : 파일 시스템 중 어디가 빈블럭인지 어디가 system 블럭인지 관리
- Inod list : 전반적인 file I/O에서 메타 데이터를 가지고있다.
- Data block : 값과 Inod list index를 가지고 있다.
FAT

- FAT에서 인덱스의 값을 들고 있고, 시작 index에서 FAT의 값 → 다음값을 찾는 구조 → EOF 끝
- Fat은 이미 메모리에 올라가있기때문에 n번째 위치에 있는 것을 찾을 때 Fat을 통해 직접참조가 가능하다.
- 데이터가 손실되어도 Fat은 남아있기에 순서 같은 것들을 알수 있다.
</aside>
빈 블록을 관리하는 방법
<aside>
💡 NOTE

- 비어 있는 파일을 할당할 때 0과 1을 통해 빈것이 있는지 확인한다.
- 연속적인 빈 공간을 찾기 쉽다.

비어 있는 그다음 위치를 블록에서 가지고 알려준다.
연속적인 빈공간을 찾기 어렵다.

효율적인 방법 : Counting 방법
연속적인 몇개가 있는지와 index를 위치를 알려주는 방법으로 복합적으로 관리
</aside>
Directory를 관리하는 방법
<aside>
💡 NOTE
directory file 구조
-
Linear list
<file name, file metadata> 의 리스트
구현이 간단하고, 디렉토리 내에 파일이 있는지 찾기위해 linear search가 필요 → 오래걸림
-
Hash Table
Linear list + hashing
파일 이름을 linear list의 위치로 바꿔주는 것(inode, FAT 등)
search time을 없앤다.
충돌의 우려가 있다.
cf) Long file name의 지원 방법
이름이 매우 긴경우 지원하는 방법
마지막 빈칸에 포인터를 가지고 그다음 위치를 알려주는 방법

</aside>
VFS and NFS
<aside>
💡 NOTE
VFS(가상 파일 시스템)
- 서로 다른 파일 시스템에 대해 동일한 시스템 콜 인터페이스(API)를 통해 접근할 수 있게 해주는 OS layer
NFS(네트워크 파일 시스템)
- 분산 시스템에서는 네트워크를 통해 파일이 공유될 수 있음
- NFS는 분산 환경에서의 대표적인 파일 공유 방법이다.
Client, Server가 네트워크로 연결된 상태에서
자신의 인터페이스와 다른 컴퓨터의 인터페이스를 모두 사용하는 방법 : NFS
자신의 파일을 찾는 방법 : VFS
</aside>