본문 바로가기
Computer Science/Operating System

File System과 관련된 이슈들

by Gofo 2021. 6. 21.

Free Space Management

운영체제는 free disk space를 기록해야 한다.

 

이를 유지하는 방법에는 4가지가 있다.

  • Bit vector
  • Counting
  • Grouping
  • Linked list

 

Bit Vector

bit 단위로 free block을 기록한다.

 

단순하게 free space를 관리할 수 있다.

그러나 bit vector를 위한 추가적인 공간이 필요하다.

 

bit vector가 main memory에 유지되지 않으면 효율성이 떨어진다.

 

Counting

contiguous allocation에서 free block도 연속적이기 때문에 첫번째 free block의 위치과 free block의 개수를 기억한다.

적은 양의 정보만으로도 free block의 위치를 모두 식별할 수 있다.

 

Grouping

non-contiguous allocation에서 free block의 주소를 하나의 block에 모두 담아둔다.

non-contiguous allocation에서 기록에 필요한 space를 최소화 할 수 있다.

 

Linked List

free block마다 pointer를 가지고 있어서 또다른 free block을 가리키고 있다.

 

첫번째 free block만 가지고 있으면 나머지 free block들을 찾을 수 있다.

그러나 free block을 탐색하기 위해서 모든 free block을 거쳐야 하기 때문에 탐색이 오래걸린다.

 


Buffer Cache, Page Cache

Buffer Cache

= block cache

 

Buffer cache는 file data를 접근했을 때 그 data를 메모리 상에 caching하고 있는 cache이다.

file system에서 담당한다.

 

Page Cache

어떤 운영체제들은 buffer caceh와 유사한 page cache를 사용한다.

paging을 할 때 swap out하는 page를 바로 disk로 swap out 하는 것이 아니라 한동안 메모리 상에 가지고 있는다.

나중에 page를 다시 참조할 때 page cache를 참조하면 속도가 빨라진다.

 

memory management 하는 영역에서 담당한다.

 

Double Caching

Buffer cache와 page cache 모두 double caching 문제가 발생할 수 있다.

동일한 data가 두 개의 cache에 모두 존재할 수 있다.

 

demand paging에서 disk로부터 page를 가져온다고 하자.

disk로부터 실행파일을 읽는 행위는 file system이 개입하므로, 해당 block은 file system을 거치게 된다.

때문에 file system에서 buffer cache로 caching을 하고, 해당 block을 memory managment system에서도 page cache에 저장할 수 있다.

 

하나의 data block 정보가 두 개의 cache에 모두 저장이 된다.

이는 공간의 낭비가 된다.

 

Unified Buffer Cache

double caching 문제를 해결하기 위해서 buffer cache와 page caching을 하나로 합친다.

이를 unified buffer cache라고 한다.

 

unified buffer cache는 page cache보다는 low-level에 위치한다.

 


Journaling File System

File system을 read/write 하는 작업은 atomic 하지 않다.

작업이 진행되다가 중단되는 경우가 발생한다.

 

이로 인해 disk의 consistency가 깨질 수 있다.

 

예시

파일을 삭제하는 것은 아래 과정이 순차적으로 일어나야 한다.

  1. directory entry에서 해당 file을 삭제한다.
  2. 해당 file이 사용하던 inode를 반납한다.
  3. inode가 가리키던 data block들을 모두 반납한다.

 

만약 1번 과정이 끝나고 작업이 중단되었다면, directory에서 file은 없어졌지만, 실제 file은 남아있는 상태가 발생한다.

 

fsck

작업 도중 crash가 발생했다면 재부팅 시 fsck(fils system checker) routine이 동작된다.

 

이는 directory 구조, inode 구조, data block의 상태를 비교하면서 어떤 inconsistency가 있는지 조사한다.

inconsistency가 있다면 이를 정리하게 된다.

 

이 과정은 disk의 정보를 하나하나 읽어야 하므로 오랜 시간이 걸린다.

이를 해결하는 것이 journaling file system이다.

 

Journaling File System

file system을 변화시키기 전에 disk에 journal이라는 파일에다가 어떤 행위를 할 것인지 기록한다.

작업을 진행하다가 crash가 발생하더라도 재부팅 시 disk의 모든 inode와 data block을 확인할 필요 없이 특정 inode와 data block만 살펴보면 된다.

 

journal을 작성하다가 crash가 나면 무시하면 된다.

file system의 inode, directory, data block을 건드리지 않았기 때문이다.

'Computer Science > Operating System' 카테고리의 다른 글

Multicore  (0) 2021.06.21
File System의 구조와 작동원리  (0) 2021.06.21
File System, Directory  (0) 2021.06.21
File System, File  (0) 2021.06.20
I/O Register, Device Driver  (0) 2021.06.20

댓글