[OS] File System

동동·2022년 4월 22일
post-thumbnail

File / File System

File

  • "A named collection of related information"
  • 일반적으로 비휘발성의 보조기억장치에 저장
  • 운영체제는 다양한 저장 장치를 file이라는 동일한 논리적 단위로 볼 수 있게 해 줌
  • Operation
    • create, read, write, reposition(lseek), delete, open, close 등

File attribute(혹은 File의 metadata)

  • 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들
    • 파일 이름, 유형 저장된 위치, 파일 사이즈
    • 접근 권한(읽기/쓰기/실행), 시간(생성/변경/사용), 소유자 등

File system

  • 운영체제에서 파일을 관리하는 부분
  • 파일 및 파일의 메타데이터, 디렉토리 정보 등을 관리
  • 파일의 저장 방법 결정
  • 파일 보호 등

Directory / Logical Disk

Directory

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

Partition(=Logical Dist)

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

🛠 open()

open("/a/b/c")

  • 디스크로부터 파일 c의 메타데이터를 메모리로 가지고 옴

  • 이를 위하여 directory path를 search

    • 루트 디렉토리 "/"를 open하고 그 안에서 파일 "a"의 위치 획득
    • 파일 "a"를 open한 후 read하여 그 안에서 파일 "b"의 위치 획득
    • 파일 "b"를 open한 후 read하여 그 안에서 파일 "c"의 위치 획득
    • 파일 "c"를 open함
  • Directory path의 search에 너무 많은 시간 소요

    • Open을 read/write와 별도로 두는 이유임
    • 한 번 open한 파일은 read/write 시 directory search 불필요
  • Open file table

    • 현재 open된 파일들의 메타데이터 보관소(in memory)

    • 디스크의 메타데이터보다 몇 가지 정보가 추가

      • Open한 프로세스의 수
      • File offset: 파일 어느 위치 접근 중인지 표시(별도 테이블 필요)
  • File descriptor(file handle, file control block)

    • Open file table에 대한 위치 정보(프로세스 별)

root 디렉토리의 메타데이터를 먼저 메모리에 올림(루트를 먼저 open)
root의 metadata에는 파일의 위치가 있음
그래서 root의 metadata를 열면 실제 그 파일의 위치가 어디 있는지 알 수 있음
root의 content는 root가 디렉토리 파일이기 때문에 그 내용이 디렉토일 밑에 있는 파일들의 정보들을 가지고 있음
a의 메타데이터를 메모리에 올림
open은 그 파일의 메타데이터를 메모리에 올리는 작업
open은 system call임
각 프로세스마다 그 프로세스가 오픈한 파일들에 대한 메타데이터 포인트를 가지고 있는 일종의 배열같은게 있음(file descriptor)

한 번 file을 오픈하면 이미 그 메타데이터가 메모리에 올라가 있음

프로세스는 파일디스크립터숫자(인덱스)만 가지고 read/write 요청을 할 수 있음
read 요청을 하면 open한 다음 파일디스크립터를 적음(read(fd))

디스크에서 파일을 읽어서 바로 사용자 프로세스에 바로 전달하는 것이 아닌 운영체제가 자신의 메모리 공간 일부에 먼저 읽어 놓는다. 그 후에 사용자 프로세스에 그 내용을 copy해서 전달한다.

만약 해당 프로그램이나 다른 프로그램이 read system call을 하면 디스크까지 가는게 아니라 이미 운영체제가 한번 읽어놓은 데이터를 전달 (버퍼 캐싱)

요청한 내용이 버퍼 캐시가 있든 없든 간에 무조건 CPU가 운영체제한테 넘어감. (시스템콜이니까)

따라서 LRU / LFU 같은 알고리즘을 사용할 수 있음

메타데이터가 디스크에 있을 때에는 위에 적어 놓은 정보들만이 메타데이터가 되는데 메모리에 올라왔을 때는 추가로 한가지 메타데이터가 더 필요하다. 현재 이 프로세스가 이 파일 어디에 접근하고 있는지 하는 offset 정보를 가지고 있어야 한다.

서로 다른 프로그램이 같은 파일에 접근할 때 둘의 offset은 다를 수 있음(그 파일에 대한 메타데이터는 하나)
따라서 프로세스들과 무관하게 system wide하게 하나만 가지고 있어도 되는 메타데이터를 모아놓은 테이블과 따로 offset을 저장하는 테이블을 별도로 두는 것이 일반적이다.

File Protection

  • 각 파일에 대해 누구에게 어떤 유형의 접근(read/write/execution)을 허락할 것인가?
  • Access Control 방법


메모리에 대한 프로텍션은 read/write 권한에 대한 얘기만 했었음

File은 여러 사용자와 프로그램이 같이 사용할 수 있기 때문에 접근권한이 누구한테 있느냐와 어떤 권한이 있느냐에 대해 설정해주어야함

ACL은 파일권한을 엮어서 linked list로 관리
Capability는 사용자를 엮어서 linked list로 관리

이 방법은 오버헤드가 크다

따라서 일반적으로 Grouping이라는 방법을 쓴다.

File system의 Mounting

하나의 물리적 디스크를 파티션응ㄹ 통해서 여러개의 논리적 디스크를 만들 수 있음 각 논리적 디스크마다 파일 시스템을 설치할 수 있음
만약 각 다른 파티션에서 다른 파티션의 파일 시스템에 접근하고 싶다면?
마운틴이라는 연산이 있음

Access Methods

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

  • 순차 접근(sequential access)
    • 카세트 테이프를 사용하는 방식처럼 접근
    • 읽거나 쓰면 offset은 자동적으로 증가
  • 직접 접근(direct access, random access)
    • LP 레코드 판과 같이 접근하도록 함
    • 파일을 구성하는 레코드를 임의의 순서로 접근할 수 있음

오픈 연산은 파일의 메타데이터를 메모리로 올려 놓는 것
파일의 메타 데이터

메모리는 주소를 통해 접근
파일은 이름을 통해 접근하는 단위

디스크는 논리적 디스크와 물리적 디스크가 있음
운영체제가 보는 디스크는 논리적 디스크(파티션)
파티션에 파일 시스템을 설치할 수 있음
논리적 디스크를 버추얼 메모리 스왑에어리어 용도로 사용할 수 있음

profile
괴발개발

0개의 댓글