OS

10. 파일 시스템

깜이오빠 2024. 1. 23. 14:20

1. 파일 & 파일 시스템

File

  • 보조기억장치에 저장된 관련 정보의 집합 ("A named collection of related information")
    → 또한 운영체제는 다양한 저장 장치를 File이라는 동일한 논리적 단위로 취급

 

File Attribute (= Metadata)

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

 

File System

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

 

2. 디렉터리 & 파티션

Directory

  • 파일의 메타데이터 중 일부를 저장하고 있는 특별한 형태의 파일
    파일 이름, 파일 위치 등

 

Partition (= Logical Disk)

  • 저장 장치를 논리적으로 구획한 영역
     하나의 (물리적) 디스크 안에 여러 개의 파티션을 구성하는 것이 일반적
     여러 개의 (물리적) 디스크를 하나의 파티션으로 구성하기도 함
     (물리적) 디스크를 파티션으로 구성한 뒤 각각의 파티션에 File System을 설치하거나 Swapping 용도로 사용 가능

 

3. open() 시스템 콜 & read() 시스템 콜

 

open("/a/b")

  • 1. root의 메타데이터를 Open File Table에 저장
     Open File Table : 현재 열려있는 파일들에 대한 메타데이터를 유지하는 테이블 (Open File Table은 메모리의 커널 영역에 하나만 존재)
     root의 메타데이터 위치는 운영체제가 알고 있음
  • 2. root의 content 내 파일 a를 찾은 후 파일 a의 메타데이터를 Open File Table에 저장
  • 3. 파일 a의 content 내 파일 b를 찾은 후 파일 b의 메타데이터를 Open File Table에 저장
  • 4. 프로세스의 PCB 내 File Descriptor Table에 파일 b의 메타데이터를 가리키는 포인터가 담긴 엔트리가 추가됨
    File Descriptor Table : Open File Table의 엔트리를 가리키는 포인터를 유지하는 테이블 (File Descriptor Table은 메모리 커널 영역에 프로세스별로 하나씩 존재)
    File Descriptor Table 엔트리의 인덱스를 File Descriptor라고 함
  • 5. 파일 b의 File Descriptor를 반환

 

Read(fd ...)

  • 1. File Descriptor를 통해 Open File Table의 엔트리를 읽음
     해당 엔트리에는 파일의 메타데이터가 저장되어 있음
  • 2. 파일의 메타데이터를 통해 읽고자 하는 파일의 content가 메모리 내 버퍼 캐시에 캐시 되어있는지 확인
     if cached : 캐시 데이터를 복사하여 프로세스에 반환
     else : 파일의 content를 읽어 버퍼 캐시에 저장 후 복사하여 프로세스에 반환

 

4. 파일 보호 (File Protection)

각 파일에 대해 누구에게 어떤 유형의 접근 (Read / Write / Execute)을 허락할 것인가?

 

Access Control Matrix

  • 파일과 파일에 대한 접근 권한으로 이루어진 행렬 표
  • 오버헤드가 심하기 때문에 Linked List를 통한 구현이 존재
     Access Control List : 파일 중심 Linked List
     Capability List : 사용자 중심 Linked List

 

Grouping

 

  • 전체 사용자를 Owner, Group, Other 세 그룹으로 구분
  • 각 파일에 대해 세 그룹의 접근 권한 (rwx)을 3비트씩 표시

 

Password

  • 파일마다 비밀번호를 두는 방법
     디렉터리 파일에 비밀번호를 두는 방법도 가능

 

5. 마운팅 (Mounting) & 파일 접근 방법 (File Access Methods)

Mounting

 

  • 한 저장 장치의 파일 시스템을 다른 저장 장치의 파일 시스템에 접근할 수 있도록 편입시키는 작업

 

File Access Methods

  • 시스템이 제공하는 파일 정보의 접근 방식
    순차 접근 (Sequential Access)
     직접 접근 (Direct Access, Random Access)

 

6. 파일 저장 방식 (Allocation of File Data in Disk)

연속 할당 (Contiguous Allocation)

 

  • 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식
    디렉터리에 파일명과 파일의 시작 주소와 파일 길이가 저장됨
  • 장점
     빠른 I/O 가능 (한 번의 보조기억장치 seek / rotation으로 많은 바이트를 transfer 가능, 프로세스의 Swapping 용도로 사용 가능)
    Direct Access 가능
  • 단점
     외부 단편화 발생
     파일 사이즈 확장이 어려움

 

연결 할당 (Linked Allocation)

 

  • 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당하는 방식 (Linked List)
     디렉터리에 파일명과 파일의 시작 주소와 끝 주소가 저장됨
  • 장점
    외부 단편화 발생 X
  • 단점
     Direct Access 불가
     신뢰성 문제 발생 (하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록부터 접근 불가)
    포인터를 위한 공간이 블록의 일부가 되므로 공간 효율성 감소
  • 변형
     FAT 파일 시스템 : 포인터를 별도의 위치에 보관하여 신뢰성과 공간 효율성 문제 해결

 

색인 할당 (Indexed Allocation)

 

  • 하나의 파일의 모든 블록 주소를 인덱스 블록이라는 하나의 블록에 모아 관리하는 방식
     디렉터리파일명과 파일의 인덱스 블록 주소가 저장됨
  • 장점
     Direct Access 가능
     외부 단편화 발생 X
  • 단점
     내부 단편화 발생
     파일 사이즈가 클 경우 하나의 인덱스 블록에 할당할 수 없음 (해결 방법 : Linked Scheme, Multi-Level Index 등)
  • 변형
     UNIX 파일 시스템

 

7. UNIX 파일 시스템

 

UNIX 파일 시스템의 디렉터리 내부

  • 파일명과 i-node 번호가 저장됨

 

Boot Block

  • 부팅에 필요한 정보가 저장된 블록 (Bootstrap Loader 포함)
    Bootstrap Loader : 컴퓨터의 부팅 프로세스를 시작하는 프로그램
  • 부팅 과정
     1. 컴퓨터의 전원이 켜지면 Boot Block 내 BootStrap Loader가 실행됨
     2. Bootstrap Loader가 보조기억장치 내의 운영체제 커널을 찾아 메모리에 적재
     3. 제어권을 운영체제에 전달
  • UNIX 파일 시스템뿐만 아니라 타 파일 시스템의 0번 블록 또한 Boot Block

 

Super Block

  • 파일 시스템에 대한 총체적인 정보가 저장된 블록
     사용 중인 블록의 위치, 빈 블록의 위치 등

 

 i-node List

  • i-node를 저장하는 List
     i-node (index node) : 파일명을 제외한 모든 메타데이터Data Block 주소를 저장하는 데이터 구조
  • Multi-Level Index 방식을 통해 파일 사이즈가 큰 파일 또한 표현 가능

 

Data Block

  • 실제 파일 내용이 저장된 블록

 

8. FAT (File Allocation Table) 파일 시스템

 

FAT 파일 시스템의 디렉터리 내부

  • 파일명과 파일의 시작 Data Block 주소와 다른 모든 메타데이터가 저장됨

 

FAT

  • 파일의 메타데이터 중 파일의 Data Block 주소를 저장하는 테이블 (파일의 2번째 Data Block 주소부터)
    → FAT 파일 시스템에서 디렉터리는 이를 제외한 모든 메타데이터를 저장 
  • Linked List 형태로 연결되어있기 때문에 파일의 시작 Data Block 주소를 알고 있다면 파일의 전체 데이터를 알 수 있음
  • 파일의 저장 방식 중 연결 할당 방식의 단점을 보완
    Direct Access 가능
     신뢰성 문제 해결

 

9. Disk Free Space Management

Bit map (Bit Vector)

 

  • 0 또는 1의 값을 가지는 플래그를 통해 사용 중인 블록과 비어있는 블록을 나타내는 방식
     부가적인 공간이 필요
     연속적인 n개의 비어있는 블록을 찾는 데 효과적

 

Linked List

  • 모든 비어있는 블록을 연결
     공간의 낭비가 없음
     그러나 연속적인 n개의 비어있는 블록을 찾는 데 효과적이지 못함

 

Grouping

 

  • Linked List 방식의 변형
  • Linked List 방식보다는 효과적이지만 여전히 연속적인 n개의 비어있는 블록을 찾는 데 효과적이지 못함

 

Counting

  • Grouping 방식의 변형 (프로그램이 종종 여러 개의 연속적인 블록을 할당하고 반납하는 성질에 착안)
  • Grouping 방식에서 포인터를 저장하고 있는 블록이 빈 블록뿐만 아니라 빈 블록의 개수까지 저장
  • 연속적인 n개의 비어있는 블록을 찾는 데 효과적

 

10. 디렉터리 구현

 

Linear List

  • <파일명, 파일의 메타데이터>의 List
     검색 시간이 O(n)
     구현이 간단함

 

Hash Table

  • Linear List + Hashing
     검색 시간이 O(1)
     해시 충돌 발생 가능

 

파일의 메타데이터 저장 위치

  • 1. 디렉터리 내에 직접 저장
  • 2. 디렉터리에 포인터를 두고 다른 곳에 저장
     UNIX의 i-node, Windows의 FAT 등

 

긴 파일명의 지원

  • 파일명이 디렉터리 엔트리의 고정 크기보다 길어질 경우
     남은 파일명을 디렉터리의 일부 공간에 저장 후
     엔트리의 마지막 부분에 해당 공간을 가리키는 포인터를 저장

 

11. VFS (Virtual File System) & NFS (Network File System)

VFS

  • 다양한 파일 시스템에 대해 동일한 시스템 콜 인터페이스 (API)를 통해 접근할 수 있게 해주는 운영체제 계층

 

NFS

  • 분산 시스템에서 네트워크를 통해 파일을 공유할 수 있게 해주는 대표적인 파일 공유 방법

 

12. Page Cache & Buffer Cache

 

Page Cache

  • 가상 메모리의 페이징 시스템에서 사용하는 프레임을 캐싱의 관점에서 설명하는 용어

 

Memory-Mapped I/O

  • Memory-Mapped I/O를 통해 파일의 일부를 가상 메모리의 특정 페이지에 매핑시킨 후 해당 페이지에 대한 메모리 접근 연산으로 파일 I/O를 수행하도록 할 수 있음
  • 과정
     1. 프로세스가 운영체제에 파일의 일부를 자신의 가상 메모리의 특정 페이지에 매핑시켜달라고 요청
     2. 추후 프로세스가 해당 페이지에 접근했을 때 메모리에 적재되어있지 않았다면 페이지 폴트 발생 
     3. 운영체제가 해당 페이지를 메모리에 적재한 이후부터는 운영체제의 개입 없이 파일 I/O 가능
     4. 해당 페이지는 Swap Out될 때 Swap Area로 이동되지 않음 (운영체제가 파일에 변경된 내용을 Write)

 

Buffer Cache

  • 파일 시스템을 통한 I/O 연산에서 사용하는 메모리의 특정 영역을 나타내는 용어
    - 모든 프로세스가 공용으로 사용

 

Unified Buffer Cache

  • 최근 운영체제에서는 기존의 Buffer Cache가 Page Cache에 통합됨
    → Buffer Cache도 페이지 단위로 관리

 

이화여자대학교 반효경 교수님의 운영체제 강의를 정리한 글입니다.

http://www.kocw.net/home/cview.do?cid=3646706b4347ef09

 

운영체제

운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

www.kocw.net

 

또한 반효경 교수님의 "운영체제와 정보기술의 원리" 책을 참고하였습니다.

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=238716482

 

운영체제와 정보기술의 원리

온라인 공개강좌 KOCW에서 꾸준히 호평받아온 이화여대 반효경 교수의 컴퓨터 입문서이다. 단순히 컴퓨터 관련 전문 지식을 전달하는 것에서 그치지 않고, 복잡한 문제를 효율적으로 풀 수 있는

www.aladin.co.kr