본문 바로가기
컴퓨터공학/운영체제

OS 14. File System Implementation

by Jinger 2023. 5. 19.

서론

 파일 시스템은 데이터와 프로그램을 포함하여 파일 내용의 온라인 접근과 온라인 저장을 위한 기법을 제공한다. 보통 파일 시스템은 많은 양의 자료를 보관하도록 설계된 보조저장장치에 영구적으로 상주한다.


File system implementation

 파일 시스템 구현은 사용자와 저장 관리의 관점에서 이루어진다. 사용자 관점에서는 파일 시스템 인터페이스를 통해 파일과 디렉터리를 다루며, 저장 관리 관점에서는 논리적 파일 시스템을 저장 장치에 매핑하고 구현을 위한 레이아웃, 데이터 구조, 알고리즘 등을 고려한다.

 파일 시스템은 저장 장치를 블록의 시퀀스로 다루며, 데이터는 블록 단위로 전송된다. 각 파일에는 속성과 파일 데이터가 저장되어야 한다. Unix 파일 시스템에서는 아이노드(Inode)를 사용하여 파일의 속성과 파일 데이터의 인덱스를 관리하며, 저장 공간은 연속 할당, 연결 할당, 인덱스 할당 등의 방법을 사용하여 할당된다.

File system implementation/Unix file system

 이를 통해 파일 시스템은 사용자에게는 트리 구조로 표현되고, 저장 장치 내부에서는 블록 단위로 데이터를 관리하며 효율적인 할당과 접근을 지원한다.


File allocation

Contiguous Allocation

순차 할당(Contiguous Allocation)은 파일을 연속적인 블록으로 할당하는 방식이다. 파일의 시작 위치와 길이만 알면 되기에 파일에 순차 또는 임의 접근이 간단하나, 새로운 파일을 위한 공간을 찾는 것이 어렵다.

Linked Allocation

 연결 할당(Linked Allocation )은 각 파일이 디스크 블록의 연결 리스트로 표현된다. 블록들은 디스크 어디에나 분산되어 있어 공간의 낭비가 없다. 다만, 순차 접근에만 효과적이다. 또한, 포인터가 손상되거나 유실된 경우 문제가 발생할 수 있다. 예를 들어 MS-DOS의 FAT 파일 시스템이 이 방식을 사용한다.

Indexed Allocation

 인덱스 할당(Indexed Allocation)은 모든 포인터를 인덱스 블록에 저장하는 방식이다. 임의 접근이 가능하며 연속적인 블록을 찾을 필요가 없다. 하나의 파일에는 하나의 인덱스 블록이 필요하다. 그러나 인덱스 블록의 크기가 큰 파일에 대한 포인터를 저장하기에는 여전히 작을 경우 문제가 발생한다.


Free space management

 비트맵 (또는 비트 벡터)은 블록[i]가 할당되면 비트가 1이 되고, 그렇지 않으면 비트가 0이 되는 방식이다. 이를 통해 연속된 빈 블록을 쉽게 얻을 수 있다. 하지만 비트맵은 추가적인 공간을 필요로 하다. 예를 들어 블록 크기가 212 바이트 (4KB)이고 디스크 크기가 240 바이트 (1TB) 일 때, n = 240/212 = 228 비트 (32MB)가 필요하다.

Bit map

 연결 리스트(Linked list)는 공간 오버헤드가 없지만 연속된 빈 블록을 쉽게 얻을 수 없는 방식이다.

Linked list

 그룹화(Grouping)는 연결 리스트 방식을 수정한 것이다. 첫 번째 n-1개의 빈 블록은 실제로 빈 상태이고 마지막 블록은 다른 n개의 빈 블록의 주소를 포함한다.


Directory implementation

 디렉터리 구현 방법 중 하나는 선형 리스트(Linear list)이 있다. 이는 (파일 이름, 파일의 포인터)(file name, pointer to the file)로 구성되어 있으며 구현하기 간단하다. 그러나 파일을 검색하는 데 시간이 많이 소요될 수 있습니다. B-트리(B-tree)를 사용할 수도 있다.
 해시 테이블(Hash Table)은 해시 데이터 구조를 사용한 선형 리스트이다. 해시 함수는 "파일 이름"을 "파일의 선형 리스트에 대한 포인터"로 변환한다. 이를 통해 디렉터리 검색 시간을 줄일 수 있다. 다만 충돌을 해결해야 한다.


Performance and recovery

 성능(Performance)과 복구(Recovery)는 파일 시스템에서 중요한 측면이다. 성능을 향상하기 위해 파일의 데이터 블록을 해당 파일의 아이노드 블록 근처에 유지하고 버퍼 캐시(Buffer cache)를 사용하여 자주 액세스되는 블록을 메모리에 유지한다. 또한 시퀀셜 액세스를 최적화하기 위해 미리 읽기(read-ahead) 기법을 사용한다.

Buffer cache

 일관성(Inconsistency) 문제를 해결하기 위해 일관성 검사기(fsck)와 같은 도구를 사용하여 디렉터리 구조와 디스크의 데이터 블록을 비교하고 일관성을 복구한다. 또한 중요한 메타데이터에 대해 동기적인 쓰기를 수행하고, 저널링과 같은 메커니즘을 사용하여 데이터 일관성을 유지한다.

 데이터 손실을 방지하기 위해 시스템 프로그램을 사용하여 데이터를 백업 저장 장치로 복사한다. 이를 통해 데이터의 손실 시 백업에서 데이터를 복원하여 파일이나 디스크를 복구할 수 있다. 이러한 성능 및 복구 기술은 안정적이고 신뢰할 수 있는 파일 시스템 운영을 지원한다.


핵심

  • 파일 시스템은 저장 장치를 일련의 블록으로 간주한다.
  • 파일 시스템 구현에서 속성과 파일 데이터는 각 파일에 대해 저장되어야 한다.
  • 다양한 파일은 연속 할당, 링크 할당, 인덱스 할당의 세 가지 방법으로 디스크에 할당할 수 있다.
  • 파일 시스템 구현을 위해서는 여유 공간 관리 체계도 필요하다.
  • 많은 운영 체제에서 파일 시스템 성능을 향상시키기 위해 버퍼 캐시를 사용하지만 데이터 불일치가 발생할 수 있다.
반응형

'컴퓨터공학 > 운영체제' 카테고리의 다른 글

OS 13. File System Interface  (0) 2023.05.19
12. I/O Systems  (0) 2023.05.18
OS 11. Mass-Storage Structure  (0) 2023.05.18
OS 10. Virtual Memory  (0) 2023.05.18
OS 9. Main Memory  (0) 2023.05.18

댓글