CS지식/운영체제

TIL 정리_107(File Systems Implementation 1)

ran4 2022. 6. 12. 23:03

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

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


Access Methods

시스템이 제공하는 파일 정보의 접근 방식을 말한다

 

순차 접근 (sequential access)

  • 카세트 테이프를 사용하는 방식처럼 접근한다
  • 읽거나 쓰면 offset은 자동적으로 증가한다
  • A-B-C 순서로 저장된 경우 B를 거쳐야만 C를 볼 수 있다

 

직접 접근 (direct access, random access)

  • LP 레코드 판과 같이 접근하도록 한다
  • 파일을 구성하는 레코드를 임의의 순서로 접근할 수 있다
  • A-B-C 순서로 저장된 경우 C를 바로 볼 수 있다

 

순차접근만 가능한 경우도 있다

File System Implementation

파일은 크기가 균일하지 않다

하지만 디스크에 파일을 저장할 때는 임의의 크기의 파일을 동일한 크기의 단위로 나눠서 저장한다

 

Allocation of File Data in Disk

파일을 디스크에 저장하는 기본적인 방법이다

 

1. Contiguous Allocation (연속 할당)

하나의 파일이 디스크상에 연속해서 저장된다

 

장점

  • 빠른 입출력이 가능하다 Fast I/O
  • 한 번의 seek/rotation으로 많은 바이트를 옮긴다
  • Realtime file용으로 사용되거나, 이미 실행중이던 프로세스의 swapping 용으로 사용된다
  • Direct access == random access 직접 접근이 가능하다

 

단점

external fragmentation

-> 외부 조각이 생길 수 있다

File grow가 어렵다 -> 파일 크기를 키우는데 있어서 제한이 있다

파일 생성시 얼마나 큰 hole을 배당할 것인가?

grow 가능 vs 낭비 (internal fragmentation / 내부 조각)

 

 

**외부 조각과 내부 조각의 차이

외부 조각은 아무도 사용하지 않기 때문에 누군가에게 할당될 수 있다

내부 조각은 누군가에게 할당이 됐으나, 아직 사용되지 않은 경우를 말한다

-> 공간의 낭비를 의미한다

 

 

2. Linked Allocation (연결 할당)

파일의 데이터를 연속적으로 위치하지 않고, 빈 공간에 할당한다

 

장점

External fragmentation, 외부 조각이 발생하지 않는다

-> 디스크에 비어있는 부분이면 아무곳에나 할당되기 때문이다

 

단점

No random access 직접 접근이 불가능하다 -> 순차접근만 가능하다

Reliability 문제가 발생한다 

- 한 sector가 고장나 포인터가 유실되면 많은 부분을 잃는다

포인터를 위한 공간이 block의 일부가 되어 공간 효율성을 떨어뜨린다

- 데이터를 주고받는 배수 : 512 bytes/sector, 소모되는 용량 : 4 bytes/pointer

 

변형

File-allocation table(FAT) 파일 시스템

포인터를 별도의 위치에 보관하여 reliability와 공간 효율성 문제를 해결한다

 

 

3. Indexed Allocation (인덱스 할당)

직접 접근이 가능하게 하기 위해서 디렉토리에 파일 위치를 저장하는 것이 아닌 인덱스를 가리키게 한다

인덱스 : 위치 정보를 열거한 공간이다 

 

장점

External fragmentation이 발생하지 않는다

Direct access가 가능하다

 

단점

작은 파일의 경우 공간 낭비가 심하다 (많은 파일들이 작은 파일이다)

매우 큰 파일의 경우 하나의 블록으로 인덱스를 저장하기에 부족하다

 

해결방안

Linked scheme

인덱스 블록에 실제 파일의 위치를 적고, 마지막 위치에는 파일 위치가 아닌 또 다른 인덱스를 가리키게 한다.

-> 인덱스 블록을 여러 개 사용한다

 

multi-level index

하나의 인덱스에 또 다른 인덱스를 가리키게 하여 실제 데이터의 위치를 바로 가리키는 것이 아닌, 두 개의 인덱스를 거치게끔 만든다

 

 

 

실제 파일 시스템에서는 어떻게 저장하는가?


UNIX 파일 시스템의 구조

하나의 논리적인 디스크(파티션)에 파일 시스템을 설치한다

 

저장되는 구조가 4가지로 나눠진다 (중요 개념)

Boot block

  • 부팅에 필요한 정보를 담고있다 (bootstrap loader)
  • 어떤 파일 시스템이든 제일 앞에 존재한다
  • -> 컴퓨터 전원을 킬 때 부팅을 해야하기 때문이다

 

Superblock

  • 파일 시스템에 관한 총체적인 정보를 담고 있다

 

Inode list

  • 파일 이름을 제외한 파일의 모든 메타 데이터를 저장한다
  • 실제 파일 시스템에서는 디렉토리가 메타 데이터를 전부 가진 것이 아니다
  • -> 별도의 위치인 Inode list에 저장한다 노드 1개당 파일 1개를 의미한다

 

Data block

  • 파일의 실제 내용을 보관한다
  • 파일의 이름과 Inode의 번호는 디렉토리가 직접 다룬다.

 

파일의 위치시스템은 어떻게 저장하는가?

-> indexed allocation을 변형하여 사용한다

파일을 저장한다

-> direct blocks

큰 파일을 저장한다

-> single indirect

더 큰 파일을 저장한다

-> double indirect