CS/운영체제

[운영체제] 파일 시스템(File System) 정리

happy_life 2022. 7. 25. 09:44

목차

1. File and File System

2. File Protection

3. Directory

4. Directory Implementation

4. Allocation 방식

5. Free Space Management

File and File System

 

1. 파일(File)은 논리적인 저장 단위로, 관련된 정보 자료들의 집합을 의미한다. Record, Block 단위로 비휘발성 보조기억장치(하드디스크)에 저장된다.

 

2. 파일 속성(File attribute) 또는 파일 메타데이터(metadata)는 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들을 의미한다. 파일 이름, 유형, 저장 위치, 사이즈 등이 이에 해당한다.

 

3. 파일 시스템(File System)은 운영체제와 모든 데이터, 프로그램의 저장 접근을 위한 기법을 제공한다. 시스템 내의 모든 파일에 관한 정보를 제공하는 계층 디렉터리 구조이고, 파일 및 디렉터리 정보 등을 관리한다.

 

4. 파티션(Partition)은 연속된 저장 공간을 하나 이상의 연속되고 독립적인 영역으로 나눈 것을 의미한다. 물리적인 하드디스크를 로컬 디스크C, D 등으로 나누는 것을 생각하면 된다.

 

 

File Protection

1. 개요

각각의 파일마다, 읽기만 가능한 것이 있을 수 있고, 쓰기만 가능한 것이 있을 수도 있다. 또 어떤 사용자이냐에 따라서 그 권한이 다를 수도 있다. File Protection에 대한 부적절한 접근 방지를 위해 File Protection 개념이 있다.

 

2. 종류

 각 file마다 PW를 부여하는 방법도 있겠지만, 각 파일에 대한 PW를 모두 기억해야한다는 점에서 비현실적이다. 현실적인 File Protection 방법을 알아보자.

 

1) Global Table

Global Table

 

시스템 전체 file들에 대한 권한을 Table로 유지하는 방식이다. 

모든 파일을 저장해야하므로, 용량이 크고, 빈공간이 많이 생긴다는 단점이 있다.

 

 

2) Access Matrix

Access Matrix

 

각 파일을 기준으로, 권한이 있는 사용자를 list로 표현한 것이다.

파일에 사용자가 접근할 때마다, 배열을 순차 탐색하면서 체크해야하므로 시간이 오래걸릴 수 있다는 단점이 있다.

 

 

3) Capability List

Capability List

 

각 사용자를 기준으로, 권한이 있는 파일을 list로 표현한 것이다. List가 노출되면 보안상 위험하므로, 시스템이 capability list 자체를 보관해야한다. 보통 kernel안에 저장한다.

 

파일 별 권한 관리가 어렵다는 단점이 있다. 예를 들어, 파일1에 Write접근을 모두 해제하고 싶은 경우, 각 사용자들을 순차 탐색하면서, <파일1, Write>를 배열에서 해제해주어야 하기 때문이다.

 

4)  혼합

따라서 현대에는 많은 OS가 Access list와 Capability list 개념을 함께 사용한다. 파일에 첫 접근 시 access list로 탐색하고, 접근 허용 시 Capability를 생성해 그 이후 접근 시에는 검사하지 않는 방식으로 한다. 

 

 

Directory

1. Single-Level Directory 

Single-Level Directory

 

모든 파일들이 디렉터리 밑에 존재하는 형태. 서로 다른 사용자라도 같은 이름을 쓸 수 없다. 파일이 많아지거나 다수 사용자가 사용하는 시스템에서 문제가 발생할 수 있다.

 

 

2. 2-Level Directory

2-Level Directory

 

 

사용자마다 directory를 배정하는 것이다. 서로 다른 사용자가 같은 이름의 파일을 가질 수 있다. 하지만 다른 사용자의 파일에 접근해야 하는 경우에는 한계가 있다.

 

 

 

3. Tree Directory 

Tree Directory

 

Tree 형태의 계층적 directory이다. 사용자들이 자신의 서브 디렉터리를 만들어 파일을 구성할 수 있다.

 

 

4. Acyclic Graph Directory

Acyclic Graph Directory

 

tree directory의 확장이다.

Directory안에 shared directory, shared file을 담을 수 있음

link의 개념을 사용한다. (포인터)

cycle을 허용하지 않는다.(A-> B -> A 처럼 파일 link가 연결되는 것을 cycle이라고 한다.)

 

 

 

5. General Graph Directory

General Graph Directory

 

cycle을 허용하는 directory structure이다. 하지만 순환이 허용되므로 무한 루프에 빠질 수 있다.

 

 

Directory Implementation

1. 종류

1. Linear list

Linear list

 

구현이 간단하지만, 디렉토리 내에 파일이 있는지 찾으려면 순서대로 탐색해야하므로 시간이 오래걸린다.

 

 

2. Hash table

Hash table

 

 hash를 사용해 directory를 구성하는 방식이다. 탐색 시간을 줄일 수 있지만, 해시 특성상 collision이 발생할 수 있다.

 

2. 기타

File의 metadata의 보관위치는 어떻게 될까? 디렉터리 내에 직접 보관하는 경우도 있고,  inode, FAT 등 포인터를 두고 다른 곳에 보관하는 경우도 있다.

 

 

 

 

Allocation 방식

1. 개요

파일을 하드디스크에 할당하는 방식에는 이론적으로 3가지가 있다.  

 

2. 종류

1) Contiguous Allocation

Contiguous Allocation

 

한 File을 디스크의 연속된 block에 저장하는 것이다. 

 

장점

효율적인 file 접근이 가능하다. 시작 위치와 길이만 알면 직접, 순차 접근이 용이하기 때문이다.

 

단점

1. 새로운 file을 위한 공간 확보가 어렵다. 예를들어 용량이 9인 파일이 있으면, 넣을 수가 없다. 위의 사진 4~13사이의 빈공간이 있음에도 불구하고 넣을 수 없어 빈공간이 생긴다. 즉, External Fragmentation이 발생하는 문제가 있다.

 

2. File 공간 크기 결정이 어렵다는 문제도 있다. 용량이 8이면 가능할까? 그것도 애매하다. File 크기는 커질수 있기 때문이다. 

 

 

2) Linked Allocation

Linked Allocation

 

File이 저장된 block들을 linked list로 연결하는 것이다.  Directory는 각 file의 첫번 째 block에 대한 포인터를 가진다.

 

장점

external fragment가 발생하지 않는다.

 

단점

1. 직접 접근에 비효율적이다. 포인터를  계속 따라가야 하기 때문이다.

 

2. 포인터를 저장하기 위한 공간이 따로 필요하다.

 

3. 신뢰성의 문제가 있다. 사용자가 포인터를 실수로 건드리면 파일을 참조할 수 없다.

 

 

 

3) Indexed Allocation

Indexed Allocation

 

 

File이 저장된 block의 정보(pointer)를 index block에 모아두는 것이다.

 

장점

1. 직접 접근에 효율적이다.

 

2. External Fragmentation이 발생하지 않는다.

 

단점

1. 아무리 작은 파일이라고 하더라도 index block을 모아둔 것이 필요하므로 공간 낭비가 발생한다.

 

2. 너무 큰 파일의 경우 하나의 block으로 index를 저장하기 부족할 수도 있다.

 

 

4) 실제 Allocation

Unix

Unix

 

Unix에서 하드디스크는 위와 같이 구성되어 있다. Data block에는 실제 내용과 Inode 번호가 저장되어 있다. InodeList에는 번호마다 파일 이름을 제외한 파일의 모든 메타데이터가 저장되어 있다.

 

 

FAT

FAT

 

FAT은 링크드 리스트로 구현되어 위치 정보를 저장하고 있고, 나머지는 다 directory에 저장된다. 기존에 linklist를 사용한 allocation방식은 포인터를 저장하기 위한 공간이 추가로 필요하다는 단점이 있었다. 하지만 data block에 다음 위치를 저장하지 않고 따로 FAT을 두어 이러한 문제를 해결하였다. 또한 FAT는 중요한 정보이므로, 여러 카피를 저장하고 있는데 이를 통해 신뢰성 문제도 해결한다. 링크드 리스트의 형식이지만 단점을 해결한 것이다.

 

 

Free Space Management

1) Bit map

Bit map

 

하드디스크의 빈공간을 체크하기 위해 순서대로 빈 공간이면 0, 빈 공간이 아니면 1로 구분해 저장해놓은 것이다. Bit map은 부가적인 공간을 필요로 하지만, 연속적인 n개의 빈 공간을 찾는 데 효과적이다. 연속할당을 하면 디스크 헤드가 많이 이동할 필요가 없으므로 연속할당이 더 빠른데, bit map은 연속적으로 체크할 수 있기 때문이다.

 

 

2) Linked list

Linked list

 

모든 빈 공간을 링크드리스트로 연결한 것이다. 공간의 낭비가 없지만, 연속적인 빈 공간을 찾기 쉽지 않다.

 

3) Grouping

Grouping

 

인덱스 allocation처럼 첫번째 빈 공간이 n개의 빈 공간을 가리키는 것이다. 

 

4) Counting

grouping 방식에 더해, 연속적인 빈공간이 몇개있는지까지 저장하는 방식이다. 예를들어, 5개의 빈공간이 필요하면 contiguous free blocks를 탐색해 찾으면 된다는 장점이 있다.  

 

 

 

 

참고

https://www.youtube.com/watch?v=zrzbETkxljM&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=41 

 kowc 이화여대 반효경 교수님 운영체제 강의