카테고리 없음

12. File Systems

YJH3968 2021. 10. 14. 23:49
728x90

1. File and File System

  • File
    • A named collection of related information
    • 일반적으로 비휘발성의 보조기억장치에 저장
    • 운영체제는 다양한 저장 장치를 file이라는 동일한 논리적 단위로 볼 수 있게 해준다.
    • Operation : create, delete, read, write, reposition(lseek), open, close
  • File attribute(파일의 metadata)
    • 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들
    • 파일 이름, 유형, 저장된 위치, 파일 크기, 접근 권한, (생성/변경/사용) 시간, 소유자 등이 있다.
  • File system
    • 운영체제에서 파일을 관리하는 부분
    • 파일 및 파일의 메타데이터, 디렉토리 정보 등을 관리한다.
    • 파일의 저장 방법을 결정한다.
    • 파일 보호 등

2. Directory

  • 파일의 메타데이터 중 일부를 보관하고 있는 일종의 특별한 파일
  • 그 디렉토리에 속한 파일 이름 및 파일 attribute들
  • operation : 파일 검색, 생성, 삭제, 디렉토리 내 파일 열거, 파일 이름 변경, 파일 시스템 전체 탐색

3. Partition(Logical Disk)

  • 하나의 (물리적) 디스크 안에 있는 여러 파티션을 두거나, 여러 개의 물리적인 디스크를 하나의 파티션으로 구성한다.
  • (물리적) 디스크를 파티션으로 구성한 뒤 각각의 파티션에 file system을 깔거나 swapping 등 다른 용도로 사용할 수 있다.

4. Open

  • 파일의 메타데이터를 메모리로 올리는 연산
  • 이를 위해 directory path를 조사한다.
    • 예를 들어 "/a/b"를 통해 파일 b의 메타데이터를 가져오고자 하면 루트 디렉토리 "/"를 open해 그 안에서 파일 "a"의 위치를 획득하고, 파일 "a"를 open한 후 read해 그 안에서 파일 "b"의 위치를 획득한다. 그리고 파일 "b"를 open한다.
  • directory path 탐색에 너무 많은 시간이 소요되기 때문에 open을 한 번 실행한 파일의 메타데이터는 메인 메모리 내 커널 주소 공간의 open file table에 보관해 그 파일에 대한 read/write 연산 시 directory search를 하지 않아도 되게 한다.
  • open file table에는 file의 메타데이터 외에도 open한 프로세스 수와 file offset(파일에 접근 중인 각 프로세스마다 파일의 어느 위치에 접근 중인지를 표시하는 지표로, 별도 테이블이 필요하다)을 추가한다.
  • file descriptor : 프로세스 별로 가지고 있는 open file table에 대한 위치 정보로 해당 프로세스의 PCB에 저장한다.
  • file 내 데이터를 read하는 경우 메모리에 file 내 데이터가 있는지와는 상관없이 항상 운영체제에게 CPU를 넘겨 운영체제 내 buffer cache에 해당 데이터가 있는지를 확인하고 그 데이터가 있으면 해당 데이터의 복사본을 요청한 프로세스에게 넘겨주고, 그렇지 않으면 디스크에서 데이터를 읽어온다. 
  • 따라서 운영체제는 모든 file의 데이터의 접근 정보를 알고 있기 때문에 LRU, LFU 알고리즘을 적용할 수 있다.

5. File Protection

  • 접근 제어 방법에 따라 Access Control Matrix, Grouping, Password 방식으로 나눌 수 있다.
  • Access Control Matrix
    • 모든 파일과 모든 사용자에 대한 표를 만들어 각 사용자가 각 파일에 대해 어떠한 접근 권한을 가지고 있는지를 나타내는 행렬
    • 모든 사용자가 항상 모든 파일을 접근하는 것은 아니기에 공간 낭비가 심하다는 단점이 있다.
    • 이를 보완하기 위해 access control list(각 파일별로 누구에게 어떤 접근 권한이 있는지 표시)나 capability(사용자별로 자신이 접근 권한을 가진 파일 및 해당 권한 표시)를 이용한다.
  • Grouping
    • 전체 사용자를 owner, group, public의 세 그룹으로 구분한다.
    • 각 파일에 대해 세 그룹의 접근 권한(rwx)(read, write, execute)을 3비트씩 표시한다.
    • UNIX에서 사용하는 방식이다.
  • Password
    • 파일(디렉토리)마다 password를 두는 방법
    • 모든 접근 권한에 대해 하나의 password : all-or-nothing
    • 접근 권한별 password : 암기 문제, 관리 문제가 있다.

6. Mounting

  • 한 파일 시스템과 다른 파일 시스템을 연결하기 위해 사용하는 방식
  • 루트 디렉토리의 하위 파일에 다른 파일 시스템의 루트 디렉토리를 연결한다.

7. Access Methods

  • 시스템이 제공하는 파일 정보의 접근 방식
  • 순차 접근
    • 어떤 파일을 접근하다가 다른 파일을 접근하고자 하면 목적 파일까지 순차적으로 이동해 접근한다. 카세트 테이프를 사용하는 방식처럼 접근한다고 생각하면 된다.
    • 읽거나 쓰면 offset은 자동적으로 증가한다.
  • 직접 접근
    • 어떤 파일을 접근하다가 다른 파일을 접근하고자 하면 바로 해당 파일로 접근한다. LP 레코드 판과 같이 접근한다고 생각하면 된다.
    • 파일을 구성하는 레코드를 임의의 순서로 접근할 수 있다.

8. Contiguous Allocation

  • 하나의 file을 연속하는 block의 배열에 할당하는 방식
  • 단점
    • 메인 메모리처럼 external fragmentation이 발생할 수 있다.
    • file의 크기가 커지는 경우 문제가 생길 수 있다. 이를 위해 file의 크기가 커질 것을 대비해 빈 block(hole)을 미리 할당을 해야한다. 이로 인해 internal fragmentation이 발생한다.
  • 장점
    • 빠른 I/O가 가능하다. 이는 seek time이 rotation latency보다 훨씬 크기 때문이다. 이 때문에 realtime file 용이나 swap area로 사용한다.
    • direct access(직접 접근)가 가능하다.

9. Linked Allocation

  • 하나의 file을 여러 개의 block들로 나누고 이들을 디스크 내 임의의 공간에 넣는 방식
  • 디스크 내 각 block의 pointer는 file 내 다음 block을 가리킨다.
  • 장점 : external fragmentation이 발생하지 않는다. 
  • 단점
    • 직접 접근이 불가능하다.
    • reliability 문제가 발생할 수 있다. 하나의 sector가 고장나면 pointer가 유실되어 많은 부분을 잃어버린다.
    • pointer를 위한 공간이 block의 일부가 되어 공간 효율성을 떨어뜨린다.

10. Indexed Allocation

  • file마다 별도의 index block을 추가해 해당 block에는 file 내 각 block이 디스크 내 어느 공간에 있는지를 알려준다.
  • 장점
    • external fragmentation이 발생하지 않는다.
    • 직접 접근이 가능하다.
  • 단점
    • 작은 file의 경우 공간 낭비가 심하다.
    • 너무 큰 file의 경우 하나의 block으로 index를 저장하기에는 부족할 수 있다.
      • 해결 방안 : linked scheme(index block 내 마지막 index는 다음 index block의 index를 가리키도록 한다.), multi-level index

11. UNIX 파일 시스템의 구조

  • boot block : 부팅에 필요한 정보를 저장하고 있다.
  • super block : 파일 시스템에 관한 총체적인 정보를 담고 있다.
  • Inode : 파일 이름을 제외한 파일의 모든 메타 데이터를 저장하고 있다.
  • data block : 파일의 실제 내용을 보관하고 있다.

12. FAT File System

  • Linked Allocation의 reliability 문제를 해결하기 위해 FAT이라는 별도의 공간을 만들었다.
  • FAT는 일종의 list로 어떤 block의 index에 대응하는 위치에 다음 block의 index를 저장하고 있다.

13. Free-Space Management

  • bit map or bit vector : 각 블록이 사용 중인지 비어 있는지를 bit로 저장한다. 연속적인 가용 공간을 찾기 쉽다.
  • linked list : 비어있는 블록을 linked list 형태로 연결해둔다. 연속적인 가용 공간을 찾기 어렵다.
  • grouping : 첫 번째 free block이 n-1개의 pointer를 가지는데, n-1개의 pointer는 free data block을, 마지막 pointer는 다시 n개의 pointer를 가진 block을 가리킨다.
  • counting : 첫 번째 free block의 index와 연속적인 free block의 개수를 쌍으로 저장한다.

14. Directory Implementation

  • linear list
    • <file 이름, file의 메타데이터>의 list
    • 구현이 간단하지만, 연산을 위해서는 시간이 오래 걸린다.
  • hash table
    • hashing을 틍해 file 이름을 이 파일의 linear list의 위치로 바꾸어준다.
    • 연산 시간을 줄일 수 있다.
    • collision이 발생할 수 있다.
  • file의 메타데이터의 보관 위치 : 디렉토리 내에 직접 보관, 디렉토리에는 포인터를 두고 다른 곳에 보관
  • long file name의 지원
    • list에서 각 entry는 일반적으로 고정된 크기를 가진다. 
    • file name이 고정 크기의 entry 길이보다 길어지는 경우 entry의 마지막 부분에 이름의 뒷부분이 위치한 곳의 포인터를 두는 방법
    • 이름의 나머지 부분은 동일한 directory file의 일부에 존재한다.

15. VFS and NFS

  • VFS(Virtual File System) : 서로 다른 다양한 file system에 대해 동일한 시스템 콜 인터페이스를 통해 접근할 수 있게 해주는 OS의 layer
  • NFS(Network File System) : 분산 시스템에서는 네트워크를 통해 파일이 공유될 수 있는데, NFS는 분산 환경에서의 대표적인 파일 공유 방법이다.

16. Page Cache and Buffer Cache

  • page cache : 가상 메모리의 paging system에서 사용하는 page frame을 caching의 관점에서 설명하는 용어
  • buffer cache
    • 파일 시스템을 통한 I/O 연산은 메모리의 특정 영역인 buffer cache를 사용한다.
    • file 사용의 locality를 활용한다. 즉, 한 번 읽어온 block에 대한 후속 요청 시 buffer cache에서 즉시 전달한다.
    • 모든 프로세스가 공용으로 사용한다.
    • replacement algorithm(LRU, LFU 등)이 필요하다. 
  • unified buffer cache : 최근의 OS에서는 기존의 buffer cache가 page cache에 통합되었다.
  • memory-mapped I/O : file의 일부를 가상 메모리에 mapping시킨다. 매핑시킨 영역에 대한 메모리 접근 연산은 파일의 입출력을 수행하게 한다.

 

출처 : 운영체제 강의

 

 

 

728x90