CS지식/운영체제

TIL 정리_108(File Systems Implementation 2)

ran4 2022. 6. 14. 13:49

http://www.kocw.net/home/m/search/kemView.do?kemId=1046323

운영체제 강의를 듣고 정리한 내용입니다.


FAT File System

- linked allocation(연결 할당)을 변형한 방식이다 

  • Boot block
  • FAT
  • Root directory
  • Data block 

 

->data block의 directory file에서 대부분을 해결한다 -> 오류가 발생한다

-> FAT에 블럭의 다음 블럭이 어디인지를 따로 저장하여(위치 저장) 오류를 줄인다 

-> 직접 접근이 가능하다

 

 

Free-Space Management


Bit map or bit vector

  • bit[i] = { 0 -> block[i] free || 1 -> block[i] occupied }
  • Bit map은 부가적인 공간을 필요로 한다
  • 연속적인 n개의 빈 블록을 찾는데 효과적이다

 

Linked list

  • 모든 빈 블록들을 링크로 연결한다(free list)
  • 연속적인 가용공간을(빈 공간) 찾는 것은 쉽지 않다
  • -> 실제로 사용하기 쉽지 않다
  • 공간의 낭비가 없다

 

Grouping

> linked list 방법의 변형이다

> 첫 번째 빈 블록이 n개의 포인터를 가진다

  • n-1 포인터는 빈 데이터 블록을 가리킨다
  • 마지막 포인터가 가리키는 블록은 도 다시 n 포인터를 가진다

 

Counting

  • 프로그램들이 종종 여러 개의 연속적인 블록을 할당하고 반납한다는 성질에 착안됐다
  • (first free block, # of contiguous free blocks)을 유지한다

 

Directory Implementation

Linear list

<file name, file metadata>의 리스트이다

- 구현이 간단하다

- 디렉토리 내에 파일이 있는지 찾기 위해서는 linear search가 필요하다 (time-consuming)

-> 시간이 많이 든다

 

 

Hash Table

  • linear list + hashing
  • 파일의 이름을 해시 함수를 적용하여 저장한다
  • Hash table은 file name을 이 파일의 linear list의 위치로 바꾸어준다
  • 해시함수의 결과값 엔트리만 찾으면 되기 때문에 탐색 시간을 없앨 수 있다
  • 충돌(collision)이 발생할 수 있다

 

File의 메타 데이터의 보관 위치

  1. 디렉토리 내에 직접 보관한다
  2. 디렉토리에는 포인터를 두고 다른 곳에 보관한다 -> inode, FAT 

 

Long file name의 지원

  • <file name, file의 metadata>의 리스트에서 각 엔트리는 일반적으로 고정크기이다
  • -> 대부분의 metadata들은 고정된 크기를 갖는다
  • 파일 이름이 고정 크기의 엔트리 길이보다 길어지는 경우, 엔트리의 마지막 부분에 이름의 뒷 부분이 위치한 곳의 포인터를 두는 방법이다
  • 이름의 나머지 부분은 동일한 directory file의 일부에 존재한다

 


 

VFS and NFS

클라이언트와 서버 컴퓨터가 네트워크로 연결되어 있다

클라이언트가 어떤 파일 시스템이건 상관없이 VFS로 접근 가능하다

원격의 다른 파일 시스템을 접근 할 수 있는 파일 시스템이 NFS이다

 

Virtual File System(VFS)

서로 다른 다양한 파일 시스템에 대해 동일한 시스템 콜 인터페이스(API)를 통해 접근할 수 있게 해주는 OSlayer이다

 

Network File System(NFS)

분산 시스템에서는 네트워크를 통해 파일이 공유될 수 있다

NFS는 분산 환경에서의 대표적인 파일 공유 방법이다

 

 

Page Cache and Buffer Cache

Page Cache

가상 메모리의 페이징 시스템에서 사용하는 페이지 프레임을 캐싱의 관점에서 설명하는 용어이다

Memory-Mapped 입출력을 쓰는 경우 파일의 입출력에서도 페이지 캐시를 사용한다

 

Memory-Mapped I/O

파일의 일부를 가상 메모리에 매핑 시킨다

-> read/write 시스템 콜 사용 없이 이뤄진다

매핑시킨 영역에 대한 메모리 접근 연산은 파일의 입출력을 수행하게 한다

 

Buffer Cache

  • 파일의 데이터를 디스크에서 요청했을 때 버퍼캐시에 저장했다가 필요할 때 제공한다
  • 파일 시스템을 통한 I/O 연산은 메모리의 특정 영역인 buffer cache를 사용한다
  • 모든 프로세스가 공용으로 사용한다
  • Replcaement algorithm이 필요하다(LRU, LFU 등)

> File 사용의 locality 활용

한번 읽어온 block에 대한 후속 요청시 버퍼 캐시에서 즉시 전달한다

 

Unified buffer Cache

페이지 캐시 + 버퍼 캐시 공유되어 사용된다

최근의 OS에서는 기존의 버퍼 캐시가 페이지 캐시에 통합되었다

-> 버퍼 캐시도 페이지 단위로 관리한다