Computer Science/[ OS ]

[ OS ] 21. 저장장치와 입출력 - 파일시스템

kim.svadoz 2021. 6. 5. 16:47
반응형

파일 시스템

컴퓨터에서 파일이나 자료를 쉽게 발견할 수 있도록, 유지 및 관리하는 방법

저장매체에는 수많은 파일이 있기 때문에, 이런 파일들을 관리하는 방법이다.

file + directory

  • file

    • 이름을 가지는 디스크에 저장되는 bytes의 집합이다.
    • 비휘발성의 보조기억장치에 저장된다.
    • O/S는 다양한 저장 장치를 file이라는 동일한 논리적 단위로 볼 수 있게 한다.
    • Operation
      • create, read, write, reposition, delete, open, close
  • file attribute (metadata)

    • 파일 이름, 유형, 저장위치, 파일사이즈, 접근권한, 시간, 소유자와 같은 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들
  • directory

    • 파일의 메타데이터 중 일부를 보관하고 있는 일종의 특별한 파일이다.
    • 그 디렉토리에 속한 파일 이름 및 파일 attribute
    • Operation
      • search for a fiile
      • create a file
      • delete a file
      • list a directory
      • rename a file
      • travers the file system
  • file system

    • O/S에서 file을 관리하는 부분
    • file 및 file 의 metadata, directory 정보
    • file의 저장 방법 결정
    • file을 보호
  • Naming

    • Disk상에 존재하는 File은 addressing할 수 있어야 하는 이유로 인해 외부적으로는 Text Name을 가져야 한다.
    • 내부적으로는 File Indentify를 가진다.
    • O/S는 File뿐만 아니라, I/O Devices에도 Naming을 적용시킨다.
  • Partition ( = Logical Disk)

    • 하나의 물리적 디스크 안에 여러 파티션을 두는게 일반적이다.
    • 여러 개의 물리적인 디스크를 하나의 파티션으로 구성하기도 한다.
    • 물리적 디스크를 파티션으로 구성한 뒤 각각의 파티션에 file system을 깔거나 swapping 등 다른 용도로 사용도 가능하다.
  • open()

    출처 : https://developyo.tistory.com/221?category=752792

    파일의 메타데이터를 메모리로 올린다.

    image-20210522140900761

    1. fd = open("/a/b") : 프로그램이 b 메타데이터 정보를 요청
    2. 시스템콜을 하여 CPU를 운영체제에 넘긴다.
    3. CPU가 root 메타데이터를 먼저 메모리에 올린다(root 메타데이터의 디렉토리는 이미 알고 있음)
    4. root 메타데이터를 연다
    5. root 메타데이터에 존재하는 a 메타데이터의 파일시스템상 위치정보로 디스크에서 a의 메타데이터를 가져와 메모리에 올린다
    6. a의 메타데이터를 연다
    7. a의 메타데이터에 존재하는 a content의 파일시스템상 위치정보로 디스크에서 a의 content 안에 존재하는 b의 메타정보를 가져와 메모리에 올린다
    8. b의 메타정보를 가리키는 포인터의 인덱스(파일 디스크립터) 값을 리턴
    9. read(fd...) : 프로그램이 b content 정보 요청(읽기)
    10. 읽은 내용을 사용자 프로그램(Process A)에 직접 주는게 아닌, 커널 메모리 영역(buffer cache)으로 가져온다
    11. 사용자 메모리영역(Process A)엔 그 내용을 카피해서 준다.
    • 만약 다른 프로그램(Process B)에서 b의 content 를 요청한다면 운영체제가 buffer cache에서 전달해준다
    • File System 의 Buffer cache 환경에선 운영체제가 모든 정보를 알고 있으므로(파일 시스템 접근시 시스템 콜을 통해 제어권이 CPU로 넘어오므로) LRU, LFU 알고리즘을 사용할 수 있다.
    • per-process file descriptor table : 파일 디스크립터 테이블은 프로세스마다 따로 존재
    • system-wide open file table : system wide 로 전체 시스템에 한개로 관리되지만 각각의 프로그램들이 파일의 offset을 프로그램 별로 관리하기 위한 공간(table)은 따로 존재

특징

  • 커널 영역에서 동작
  • 파일 CRUD 기능을 원활히 수행하기 위한 목적
  • 계층적 디렉터리 구조를 가짐
  • 디스크 파티션 별로 하나씩 둘 수 있음

역할

  • 파일 관리
  • 보조 저장소 관리
  • 파일 무결성 메커니즘 제공
  • 접근 방법 제공

역할

  • 하드디스크와 메인 메모리 속도차를 줄이기 위함
  • 파일 관리
  • 하드디스크 용량 효율적 이용

구조

  • 메타 영역 : 데이터 영역에 기록된 파일의 이름, 위치, 크기, 시간정보, 삭제유무 등의 파일 정보
  • 데이터 영역 : 파일의 데이터

파일 시스템의 두 가지 접근방법

  1. Sequential Access

    • file pointer를 한 칸씩(bytes) 움직이면서 파일의 내용을 읽는다.

    • magetic tape과 같이 데이터를 순차적으로 접근하는 방법이다.

    • 데이터의 위치에 따라 시간이 달라진다.

  2. Random Access (Direct Access)

    • file pointer를 임의로 이동하면서 파일의 내용을 읽는다.

File Protectoin

  1. Access Control Matrix

    • Linked List 형태로 권한을 관리한다 (overhead가 크다)
      • Access Control list : 파일별로 누구에게 어떤 접근 권한이 있는지 표시
      • Capability list : 사용자별로 자신이 접근 권한을 가진 파일 및 해당 권한 표시
  2. Grouping

    • 전체 User를 owner, group, publiic의 세 그룹으로 분류한다.

    • 각 파일에 대해 세 그룹의 접근 권한(rwx)을 3비트씩 표시한다.

    • UNIX를 포함한 대부분의 OS에서 사용한다.

      image-20210522141353086

  3. Password

  • 파일마다 pass word를 두는 방법이다.
  • rwx마다 password를 하나씩 부여해야 하므로 관리가 어렵다.

File System Mounting

  • File System은 파티션을 통해 여러개의 논리적 디스크로 분리된 하나의 물리적 디스크이다.
  • 각각의 논리적 디스크에 file system이 존재한다.
  • 다른 파일시스템에 접근할 경우에 mount를 사용한다.

image-20210522141642996

  • disk3의 루트를 disk1의 usr 경로에 연결(mount)하여 타 파일시스템 접근이 가능하다.

Allocation File System

1. Contiguous Allocation

image-20210522135019873

각 파일에 대해 디스크 상의 연속된 블럭을 할당한다.

옛날 IBM VM/CMS에서 사용했으며 동영상, 음악, VOD 등에 적합하다.

파일의 크기가 큰 애들이 흩어져 있다면 가져오는데 오래걸리지만, 모여있으면 가져오는데 시간이 적게 걸린다.

  • 단점
    • external fragmentatioin, hole이 발생
    • 파일 생성 당시 파일의 크기를 알 수 없다.
    • 즉, 어느 파일을 어느 hole에 넣어야 할지 알 수 없다.
    • 더 나아가 파일의 크기가 계속 증가할 수 있다(log file) -> 기존의 hole 배치로는 불가능
  • 장점
    • FAST I/O (헤드가 이동하는 시간이 짧다)
    • 한번의 seek/rotation으로 많은 바이트 transfer가 가능
    • Realtime file용, process의 swapping 용으로 사용한다
    • Direct Access(=Random access)가 가능하다

2. Linked Allocation

image-20210522135150448

파일을 연속적으로 나누는게 아니고, Linked-List로 바라봄으로써 아무데나 들어갈 수 있다.

file directory는 제일 처음 블록을 가리킨다.

각 블록은 포인터 저장(다음 블록이 어디있는지)을 위해 4바이트 또는 그 이상을 소모한다.

  • 장점
    • external fragmentation이 발생하지 않는다.
  • 단점
    • No Random Access
    • Reliability와 관계없다. (낮은 신뢰성)
    • 느린 속도 (헤더의 움직임)
    • Sector가 고장나 Pointer 유실 시 많은 부분을 잃게 된다.
    • Pointer를 위한 공간이 block의 일부가 되어 공간 효율성을 떨어뜨린다.
  • 개선 : FAT(File-Allocation-Table) 파일시스템
    • 포인터들만 모은 테이블(FAT)을 별도 블록에 저장하고 FAT 손실 시 복구를 위해 이중 저장하는 시스템
    • 포인터를 별도의 위치에 보관해 reliability와 공간효율성 문제를 해결한다.
    • 이는 직접접근(Direct Access)도 가능하며(FAT내용을 가져와 헤드를 움직인다), FAT는 일반적으로 메모리 캐싱을 한다.

3. Indexed Allocation

image-20210522135438454

연결할당과 같이 아무데나 파일을 할당할 수 있으며 그 정보를 저장하는 블락을 할당한다.

데이터 블럭 외에 각 파일 당 한 개의 인덱스 블록이 존재한다.

인덱스 블록은 포인터의 모음이며, 디렉토리는 인덱스 블록을 가리킨다. Unix/Linux등에서 사용한다.

디지털 포렌식에서 사용하는 방법으로 없어진 해당 파일을 찾기 위해선 indexed block만 찾으면 복원이 가능한다

  • 장점
    • pointer가 여기저기 흩어져있는 linked allocation의 단점을 보완한다.
    • external fragmentation이 발생하지 않는다.
    • Direct Access가 가능하다
  • Small file의 경우 공간을 낭비한다
  • 파일이 너무 큰 경우 하나의 block으로 index를 저장할 수 없다.
반응형