Chapter 13~15. File Systems

박병준·2022년 6월 2일
0

운영체제

목록 보기
11/11

File Concepts

운영체제는 저장장치의 물리적 특성을 추상화하여 논리적 저장 단위, 즉 파일 을 정의한다

속성

사용자의 편의를 위해 파일에 이름을 부여하고, 하나의 문자열로 나타낸다. 시스템에 따라 대소문자를 구분하기도, 안하기도 한다.

  • 이름 : 사람이 읽을 수 있는 형태로 유지되는 유일한 정보
  • 식별자 : 파일 시스템 내에서 파일을 식별하는 고유의 번호 PK
  • 타입 : 여러 타입의 파일을 제공하는 시스템을 위해 필요
  • 위치 : 장치 내에서 파일의 위치를 가리키는 포인터
  • 크기 : 파일의 현재 크기
  • 보호 : 접근 제어 정보
  • 시간, 날짜, 사용자 식별 : 생성, 최근 변경, 최근 사용 등에 대한 정보

파일 연산

운영체제가 파일을 관리하기 위해 사용하는 시스템 콜과 그것들의 조합.

  • 파일 생성(Create)
    사용할 수 있는 공간을 찾고 파일을 할당한다, 또한 파일이 디렉터리에 만들어져야 한다.
  • 파일 쓰기(Write)
    파일 이름과 기록될 정보를 명시하는 시스템 콜을 호출한다. 시스템은 파일 내의 다음 쓰기가 일어날 위치를 가리키는 쓰기 포인터를 유지하고 있어야 한다. 쓰기 포인터는 쓰기가 일어날 때마다 갱신된다.
  • 파일 읽기(Read)
    파일 이름과 피일이 읽혀 들어갈 블록의 위치를 명시하는 시스템 콜을 호출한다. 다음 읽기가 일어날 파일 안의 위치를 기록하는 읽기 포인터를 유지해야 한다.
    프로세스는 일반적으로 파일 읽기 나 파일 쓰기 중 한 가지를 하고 있기 때문에, 대부분의 시스템은 한 개의 현재 파일 위치 포인터 를 가진다. 읽기,쓰기 연산 모두 이 포인터를 이용하여 공간을 절약하고, 복잡성을 감소시킨다.
  • 파일 안에서의 위치 재설정(Reposition within file)
    디렉터리에서 적합한 항목을 탐색하고, 현재 파일 위치를 주어진 값으로 설정한다.
  • 파일 삭제(Delete)
    지명된 파일을 디렉터리에서 찾는다, 발견하면 파일이 차지하는 공간을 방출하고 디렉터리 항목을 삭제한다.
  • 파일 절단(Truncate)
    파일의 내용을 지우고, 속성만을 남긴다.

open files

운영체제는 모든 열린 파일에 대한 정보를 갖는 열린 파일 테이블(open file table) 을 유지한다.
시스템 콜 open()은 전형적으로 열린 파일 테이블의 항목에 대한 포인터를 리턴한다.

열린 파일들을 관리하기 위해 필요한 몇 가지 정보들

  • 파일 포인터
    가장 최근의 읽기/쓰기 위치를 가리킨다. 파일을 오픈한 프로세스 당 하나가 만들어진다.
  • 파일 오픈 개수
    파일의 총 열린 횟수와 닫힌 횟수를 추적하며 개수값이 0이면 테이블에서 해당 항목을 제거한다.
  • 파일의 디스크 위치
    대부분의 파일 연산은 데이터를 변경하도록 요구, 매 연산마다 디스크에서 읽는 것을 피하기 위해 메모리에 저장한다. (한 번 메모리에 저장해 두었다가 파일을 닫을 때 다시 디스크로 옮긴다는 것 같다.)

File System Implementation

Information on disk

  • Boot block
    부팅에 필요한 정보 (bootstrap loader)
    UNIX 시스템뿐 아니라, 어떤 파일 시스템이라도 가장 먼저 나온다.

  • Volume control block
    파일 시스템에 관한 총체적인 정보를 담고 있다.
    어디까지 빈 블록이고 어디부터 실제 사용 중인 블록인지, 혹은 어디까지 inode list가 있고 어디부터 data block이 있는지 등을 관리한다.

  • Directory structure for a file system
    디렉토리 구조를 이용하여 inode를 가져온다.
    파일 하나당 inode가 하나씩 할당된다. 이 inode에 파일 이름을 제외한 파일의 모든 메타 데이터가 저장된다.

  • Per-file FCB
    파일의 실제 내용을 보관한다.
    UNIX 파일 시스템에서 data block 내의 디렉토리는 메타 데이터 중 하나인 파일의 이름, 그리고 inode 번호만을 가지고 있다.

Information in memory

  • In-memory mount table
    파일 시스템을 사용하려면 무조건 mount를 해줘야 한다.
    각 볼륨의 마운트 된 파일시스템의 정보를 가지고 있다.

  • In-memory directory structure
    최근에 접근한 디렉토리 구조를 가지고 있다.

  • System-wide open-file table
    open file table은 시스템 전체에 하나만 있으므로 system-wide open file table이라고 한다.

  • Per-process open-file table
    각 프로세스마다 그 프로세스가 open한 파일들의 메타 데이터 포인터를 가지고 있는 배열이다.

Virtual file systems

서로 다른 다양한 파일 시스템에 대해 동일한 시스템 콜 인터페이스(API)를 통해 접근할 수 있게 해주는 OS의 계층


Allocation Methods

Contiguous Allcocation

하나의 파일이 디스크 상에 연속해서 저장되는 방식

  • 단점
    1) 파일들의 길이가 균일하지 않기 때문에 중간의 free block으로 인한 외부 조각 발생

    2) 파일 생성 이후에 연속 할당이 가능하지 않은 크기로의 확장 제약 -> 이를 위해 미리 메모리상에서 빈 공간을 확보하는 방법 -> 당장 사용하지 않는 공간으로 인한 공간 낭비(중간에 홀이 생김)

  • 장점
    1) 빠른 I/O 가능. 하드 디스크의 파일 I/O => 헤드의 이동. 어떤 파일을 전부 읽고 싶다면 한 번의 seek으로 시작 주소까지 찾아가면 더 이상 seek가 필요 없이 전부 읽어올 수 있다.

    2) 파일이 시작 위치로부터 연속적으로 위치하기 때문에, 파일의 특정 위치만 궁금하다면 굳이 시작위치부터 볼 필요 없이 시작 위치 + 해당 위치로 접근해서 데이터 확인 가능(직접 접근 가능)

Linked Allocation

파일의 데이터를 디스크에 연속적으로 배치하는 대신, 빈 위치 아무데나 들어갈 수 있게 배치하는 방식

  • 단점
    1) 해당 주소에 가야만 다음 주소를 알 수 있기 때문에 파일에서 특정 위치(중간에 위치한)의 데이터가 궁금하다면 그 시작 주소부터 하나하나 순차적으로 확인해야 함. 즉, 데이터에 직접 접근 불가능. 건너뛰는 게 불가능. 다음 위치로 이동하는 데 발생하는 헤드의 seek가 많이 발생

    2) 하나의 섹터에서 고장이 발생해 pointer가 유실되면 다음 데이터들의 주소 역시 망가지기 때문에 파일의 많은 부분을 유실할 수 있음

    3) 크기가 512Byte인 하나의 섹터에서 다음 주소의 포인터를 위해 할당해주는 크기가 4Byte. 여기서 메모리 낭비가 발생할 수 있음.

  • 장점
    메모리 공간에서 external fragmentation이 발생하지 않음. 즉, 각기 다른 크기의 파일로 인한 메모리 낭비가 없음

File-allocation table (FAT) 파일 시스템
포인터를 별도의 위치에 보관하여 reliability와 공간 효율성의 문제를 해결한다.

Indexed Allocation

블록 하나에 위치 정보를 저장하는데, 이 블록을 인덱스 블록이라고 한다. 디렉토리는 파일의 위치 정보 대신 인덱스 블록 값을 저장한다.

  • 단점
    1) 아무리 작은 크기의 파일이라도 최소 두 개의 블록 필요(실제 메모리상의 블록과, 블록에서 index block).

    2) 굉장히 큰 파일의 경우 하나의 index block으로 모든 주소를 표시하기 어려움.

    • 해결방안 1) linked scheme
      하나의 index block으로 파일의 모든 주소를 표시할 수 없을 때, index block의 마지막 주소는 메모리상 파일의 데이터 주소가 아니라 또 다른 index block의 주소로 연결.

    • 해결방안 2) multi level index: 하나의 index block의 주소들이 메모리상 파일의 데이터 주소를 나타내는 게 아니라, 또 다른 index block을 가리키게 함.

    3) 모두 index block을 위한 공간 낭비가 존재함.

  • 장점
    1) 외부 조각이 발생하지 않는다.

    2) 직접 접근(임의 접근)이 가능하다.


Examples

log-structured file system

transaction을 이용하여 atomic하게 처리한다.

network file system

원격에 저장된 파일 시스템을 불러올 때 사용. 클라이언트와 서버가 네트워크로 연결되어 있을 때, 클라이언트가 자신의 로컬에 저장된 파일 시스템과 원격에 저장된 파일 시스템에도 접근이 가능하게 만들어준다.
NFS를 통해 RPC(Remote PC)에 연결한 뒤 역시 VFS를 통해서 syscall 사용한다.
클라이언트와 서버 모두 NFS 모듈을 설치해야 한다.

profile
뿌셔뿌셔

0개의 댓글