[운영체제] File System

Judy·2022년 11월 28일
0

운영체제

목록 보기
8/14

File System

File

정보를 저장하기 위해 명명된 디스크에 저장하는 단위

  • 이름을 통해 접근
  • 비휘발성인 보조기억장치에 저장
  • 장치를 관리하기 위해 file이라는 논리적 단위를 사용
  • 연산: create, read, write, reposition(lseek), delete, open, close 등

File attriute

파일의 내용이 아닌 파일을 관리하기 위한 정보들 = metadata

  • 파일 이름, 유형, 저장 위치, 파일 사이즈, 읽기 권한 등

File System

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

Directory

파일의 메타데이터 중 일부를 보관하고 있는 특별한 파일

  • 해당 디렉토리에 속한 파일 이름 및 파일 메타데이타들
  • 연산: (search, create, delte, rename) + file

Partition

  • = Logical Disk
  • 운영체제가 보는 디스크
  • 하나의 (물리) 디스크 안에 여러 파티션을 둠
  • 여러 개의 물리 디스크를 하나의 파티션으로 구성하기도 함
  • 각 파티션 별로 file system을 사용하거나 다른 용도로 사용할 수 있음

Open()

  • 파일의 메타데이터를 메모리에 올리는 것
  • 프로세스마다 해당 프로세스에서 오픈한 메타데이터의 포인터를 가짐 = open의 리턴값

File Protection

  • 하나의 파일을 여러 프로그램이 같이 사용할 수 있음
  • read/write 권한 + 어느 프로그램에 권한이 있나

1) Access control Matrix

  • 행렬에 사용자와 파일을 나열해서 각 권한을 기록하는 방법
  • 행렬이 sparse matrix가 될 텐데 낭비
  • Access control list: 각 파일 별로 누구에게 어떤 권한이 있는지 나열
  • Capability: 사용자 별로 권한을 가진 파일 및 권한을 표시

3) Grouping

  • Access control Matrix은 오버헤드가 커서 이 방식을 이용
  • 각 파일에 대해 세 그룹으로 구분 - owner, group, public
  • 세 그룹의 접근 권한(rwx)을 3비트씩 표시 ex) rwx r-- r--

4) Password

  • 파일마다 password를 두는 방법
  • 접근 권한 별로 password를 두는 방법 -> 암기와 관리가 어렵

접근 방법

순차 접근

  • 카세트 테이프 방식
  • 읽거나 쓰면 offset이 증가
  • A 이후에 있는 B를 읽으려면 반드시 A를 지나가야 함

직접 접근

  • LP 레코드 판 방식
  • 파일을 구성하는 레코드의 임의의 순서로 접근 가능
  • 직접 접근이 가능한 디스크라도 저장 방식에 따라 불가능할 수도 있음

Allocation of File Data

❗️파일은 block 단위로 저장

1) Contiguous Allocation

하나의 파일을 연속해서 저장

✅ 장점

  • 파일을 통째로 읽을 때 빠른 I/O 가능
  • 직접 접근(임의 접근) 가능
  • swaping area로 사용됨

❎ 단점

  • 외부조각이 발생할 수 있음 (비어있지만 파일을 넣을 수 없는 블록)
  • 파일이 수정되면서 크기가 변경(grow)될 수 있는데 제약이 존재
  • 커짐을 예상해 미리 할당해두면 내부 조각이 됨

2) Linked Allocation

하나의 파일을 여러 위치의 블록으로 저장
각 블록을 찾아가면 다음 블록의 번호를 가짐

✅ 장점

  • 외부 조각이 발생하지 않음

❎ 단점

  • 직접 접근 불가 (처음 블록부터 읽어야 다음 블록의 위치를 알 수 있음)
  • 순차 접근도 시간이 오래 걸림
  • 중간의 pointer가 잘못되면 뒷 부분은 유실됨
  • pointer를 저장할 공간이 필요 (4byte 정도)

변형 방법 ➡️ FAT(File Allocaion Table)


3) Indexed Allocation

파일이 가진 블록을 index block에 기록

✅ 장점

  • 직접 접근 가능
  • hole이 생기지 않음

❎ 단점

  • index block이 따로 필요 (작은 파일의 경우 공간 낭비)
  • 큰 파일인 경우 linked index block 또는 multi level index 사용


실제 사용 예시

UNIX 파일 시스템의 구조

  • 역사가 오래되었고, 가장 기본적인 파일 시스템 구조

구조

Boot block : 부팅에 필요한 정보 (어떤 파일 시스템이든 부트 블럭이 가장 먼저 나옴)
Super block : 파일 시스템에 관한 총체적인 정보
Inode List : 파일 이름을 제외한 파일의 모든 메타데이터 (디렉터리에 모든 메타데이터가 있진 않음)
Data block : 파일의 실제 내용을 보관 (파일의 이름은 디렉터리가 직접 가지고 있음)


FAT 파일 시스템

Boot block
FAT : 파일의 메타데이터 중 일부를 보관 = 파일의 위치
Root directory
Data block

FAT

  • Linked Allocation
  • 직접 접근이 가능함
  • 파일의 다음 위치를 FAT 테이블에 적어둠 (마지막 파일이면 EOF을 기록)
  • 포인터를 별도의 위치에 보관하여 reliability와 공간효율성 문제 해결

Free Space Management

비어있는 블록을 관리하는 방법

1) Bit map or Bit vector

  • 블록 별로 사용중인지 bit로 표현
  • bit map은 부가적인 공간을 필요로 함
  • 연속적인 n개의 빈 블록을 찾는 데 효과적

2) Linked list

  • 비어있는 블록을 포인터로 연결
  • 다음 비어있는 블록의 포인터를 가짐
  • 추가적인 공간 낭비가 없음
  • 연속적인 빈 블록을 찾기에 어려움

3) Grouping

  • Linked list의 변형
  • 첫 번째 빈 블록에 n개의 포인터를 가짐
  • 포인터로 연결된 마지막 블럭에는 다시 비어 있는 n개의 포인터를 가짐

4) Counting

  • 빈 블록의 첫 번째 위치와 연속적으로 몇 개가 비어있는지 쌍으로 가짐
  • 연속적인 빈 블록을 찾기 유용

Directory Implementation

디렉터리 내부에 있는 파일의 메타데이터를 관리
일부는 디렉터리 내부에 직접 가지고 일부는 다른 곳에 보관 ex) inode, FAT 등

1) Linear list

  • 파일을 나열해 순차적으로 정보를 저장
  • 정보를 저장하는 리스트의 크기를 고정
  • 디렉터리 내부 파일을 찾기 위해서는 순차 탐색이 필요

3) Hash Table

  • 파일 이름을 해쉬 함수로 저장
  • 해쉬 함수를 통해 파일 이름을 특정 범위의 위치로 변경해줌
  • 특정 파일을 찾을 때 해쉬 함수로 한 번에 찾을 수 있음
  • 서로 다른 파일의 이름이 동일한 인덱스로 반환되는 Collsion이 발생할 수 있음

이름이 긴 파일의 보관 방법

  • list에서 각 entry는 일반적으로 고정
  • 고정 크기보다 길어지는 경우 entry 마지막에 이름 뒷부분이 위치하는 포인터를 둠

VFS and NFS

❗️ 사용자가 파일에 접근할 때는 시스템 콜을 이용

VFS

Virtual File System

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

NFS

Network File System

분산 시스템 환경에서 파일을 공유할 수 있는 인터페이스


Page Cache and Buffer Cache

Page Cache

  • 페이징 시스템에서 사용하는 page frame을 caching 관점에서 설명

Buffer Cache

  • 파일 데이터를 사용자가 요구했을 때 버퍼 캐시에 저장한 후 다음 요청 시 제공하는 방법
  • 이미 파일 요구 자체가 시스템 콜을 이용했으므로 운영체제에게 권한이 있어 LRU, LFU 등의 Replacement 알고리즘 사용 가능

Unified Buffer Cache

  • 버퍼 캐시와 페이지 캐시를 통합해서 관리하는 방법
  • 버퍼 캐시도 페이지 단위로 관리
  • 최근 OS에서 사용

Memory-Mapped I/O

  • 파일의 일정 부분을 가상 메모리에 맵핑한 후 해당 영역에 대한 메모리 접근 연산은 파일 입출력을 수행
profile
iOS Developer

0개의 댓글