본문 바로가기
3학년 학사/운영체제

[운영체제] #11. File System

by whiteTommy 2024. 12. 1.
반응형
더보기

목차

  • File Concept
    • File Attributes
    • File Operations
    • File Access Method
  • Directory Structure Concept
    • 전형적인 File System 구성
    • Directory Structures
  • File 의 구현
  • Directory 의 구현
  • Protection
    • Acess Lists and Groups

 

File Concept

File as Abstraction

  • 정의
    • 파일은 연관된 정보의 집합(Array of Bytes) 이다.
    • 무언가를 영구적으로 저장하기 위해서 쓰는 추상화된 개념
    • 운영 체제에서 파일은 Persistent Storage를 담당하며, 주소 공간(Address Space)과는 다르다.

 

 

File System

  • 역할:
    • 파일과 Physical Disk Block 사이의 매핑을 제공.
      • Disk 위치 배치를 담당 : File Blocks -> Disk Blocks
    • 사용자는 파일의 물리적 저장 위치를 알 필요가 없도록 독립성 제공.
  • 특징:
    • 디스크에 저장된 파일의 전체 구성을 추상화하여 관리.
    • 운영 체제마다 파일 시스템 구조가 다를 수 있음.

 

File Attributes

  • 파일의 속성 정보(Metadata):
    • Name: 파일 이름.
    • Type: 파일 유형 (실행 파일, 텍스트, 라이브러리 등).
    • Location: 파일의 저장 위치 (물리적 주소).
    • Size: 파일 크기.
    • Protection: 파일 접근 권한 (읽기, 쓰기, 실행).
    • 추가적으로 시간(Time), 사용자 정보(User Information) 등이 포함됨.
  • 파일 정보 저장 위치: 파일 관련 Metadata는 디렉토리 구조(Directory Structure)에 저장됨.

 

File Operations

  • 파일과 관련된 기본 작업:
    • Create:
      • 파일을 새로 생성.
      • 메타데이터가 함께 생성되서 Directory Structure 에 저장됨
      • 새로운 파일에 대한 entry 정보를 만듦
    • Write: 파일에 데이터를 기록.
    • Read: 파일에서 데이터를 읽음.
    • File Seek: Current-File-Position Pointer를 이동하여 파일의 읽기/쓰기 위치 변경.
    • Delete: 파일을 삭제하고 메타데이터 및 디스크 블록 할당 해제.
    • Open/Close: 파일의 디렉토리 엔트리를 열거나 닫음.
  • Current-File-Position Pointer란?
    • 파일을 읽거나 쓸 때 현재 위치를 가리키는 포인터.
    • 읽기/쓰기 작업이 수행되면 포인터가 자동으로 갱신됨.

 

Open / Close Semantics

  • Open/Close 작업:
    • 여러 Process가 파일을 공유하는 경우, 파일의 상태(State)를 유지하기 위해 두 개의 Open File Table을 관리.
      • Per-Process Table:
        • 각 프로세스에서 독립적으로 유지되는 정보.
        • 예: 파일 디스크립터, 접근 모드(Read/Write) 등.
      • System-wide Table:
        • 시스템 차원에서 파일 관련 정보를 공유.
        • 예: 파일의 위치, 접근 날짜, Open Count 등.
  • Open Count:
    • 파일이 Open될 때마다 System-wide Table에서 Open Count를 증가시키고, Close 시 감소한다.
    • 파일 삭제(Delete)는 Open Count가 0인 경우에만 수행 가능하다

 

File Access Method

  • 순차 접근(Sequential Access):
    • 파일의 데이터를 처음부터 끝까지 순서대로 읽거나 쓰는 방식.
    • Operation:
      • Read Next: 다음 데이터를 읽음.
      • Write Next: 다음 위치에 데이터를 기록.
      • Reset: 파일의 읽기/쓰기 포인터를 처음으로 이동.
    • 예시:
      • rewind: 포인터를 처음으로 이동.
      • read/write: 현재 위치에서 데이터 읽기/쓰기 후 포인터 이동.

  • 임의 접근(Direct Access):
    • File 의 어떠한 위치라도 바로 접근하여 Read 나 Write 수행
    • Operation:
      • Read n: 특정 위치(n번 블록)의 데이터를 읽음.
      • Write n: 특정 위치(n번 블록)에 데이터를 기록.
    • Sequential Access와 Direct Access의 차이:
      • Sequential Access는 데이터를 순차적으로 처리.
      • Direct Access는 인덱스를 사용해 특정 데이터에 직접 접근 가능.

 

 

전형적인 File System 의 구성

 

File System 의 계층화

  • 계층화의 목적:
    • 유연성(Flexibility): 시스템이 다양한 장치와 사용자의 요구를 효율적으로 지원.
    • 모듈화(Modularity): 각 계층이 독립적으로 동작하며, 특정 계층을 변경하거나 업데이트할 때 다른 계층에 영향을 최소화.
    • 표준화: 여러 File System이 하나의 시스템에서 작동 가능.
  • 계층 구조:
    • Virtual File System (VFS): 응용 프로그램과 하드웨어 간 인터페이스 역할.
    • File-organization module: 파일의 논리적 구조를 관리.
    • Basic file system: 파일의 물리적 저장과 접근을 담당.
    • I/O control: 하드웨어 장치와 통신.
    • Devices: 실제 디스크 드라이브 등.

 

 

Mount

  • Mount의 정의:
    • DirectoryDevice를 연결하는 작업.
    • File System을 사용할 수 있도록 Mount를 수행해야 함.
      ex) /home 디렉토리에 /a/b/c 디렉토리를 마운트하면 /home/a/b/c 경로를 통해 접근 가능.
  • Distributed FS: 네트워크를 통해 분산된 파일 시스템으로 확장 가능.
  • Mount 과정:
    • Disk1 Disk2가 있다고 가정:
      • Disk1에 /usr 디렉토리가 존재.
      • Disk2의 File System을 /usr 디렉토리에 마운트하면 /usr의 하위 디렉토리처럼 동작.
        ex) mount disk2 /usr 실행 시 /usr 디렉토리가 Disk2의 파일 시스템으로 연결됨

 

 

Directory Structure Concept

  • Directory:
    • 모든 File 들에 대한 정보를 가지는 Node 들의 집합.
    • Directory Structure 와 File 은 모두 Disk 상에 있음

Single-level Directory

  • 정의 : 모든 사용자에 대해서 하나의 단일한 Directory 를 관리

 

Two-level Directory

  • 정의 : 사용자 구분하기 위해 Directory 분리

  • 문제점 : file 이 늘어날수록 Directory 사이즈가 무수히 커짐

 

Tree-Structured Directories

  • 특징:
    • 계층적 구조로 디렉토리가 조직화됨.
    • 각 디렉토리는 서브 디렉토리를 포함할 수 있음.
    • 장점:
      • 효율적인 탐색 및 관리 가능.
      • 파일을 그룹화하여 조직화 가능.
    • 단점: 깊게 중첩된 디렉토리로 인해 탐색 경로가 길어질 수 있음.

 

 

Acyclic-Graph Directories

  • 특징:
    • 파일이나 서브 디렉토리를 공유 가능.
    • Alias를 이용하여 동일한 파일을 여러 디렉토리에서 참조.
    • 문제점: Dangling Pointer: 파일이나 디렉토리가 삭제될 경우 포인터가 유효하지 않게 되는 문제 발생 가능.
    • 장점: 파일 및 디렉토리의 공유로 공간 절약.

 

General Graph Directory

  • 특징:
    • 일반 그래프 구조로 디렉토리를 조직화.
    • Cycle 문제를 방지해야 함:
      • Cycle Detection Algorithm을 통해 새로운 링크 생성 시 사이클이 발생하지 않도록 제어.
    • 장점: 유연성이 높아 다양한 디렉토리 관계를 표현 가능.
    • 단점: Cycle 처리 비용 증가.

 

 

File 구현

  • Disk Block : File System 의 입출력 단위
  • File 의 내용을 담고 있는 Disk Block 의 위치 정보를 어떻게 저장할지를 고려해야 한다.
  • 운영체제마다 각기 다른 방식으로 File 의 Data Block 정보를 관리하고 있다.
    • Contiguous Allocation
    • Linked List Allocation
    • Linked List Allocation using an Index
    • I-Nodes

 

Contiguous Allocation

  • 설명:
    • 파일을 저장할 때, 디스크 상에서 연속된 블록에 데이터를 저장하는 방식
    • 디렉토리는 파일의 시작 블록(start)과 파일 길이(length)를 기록하여 파일 데이터를 관리한다.
  • 장점:
    1. 구현이 간단: 파일의 시작 위치와 길이만 저장하면 되기 때문에 디스크의 검색 속도가 빠르다.
    2. 연속된 읽기 성능이 우수: 파일 데이터가 물리적으로 연속 저장되어 있어 I/O 연산 시 효율적이다.
  • 단점:
    •  File 은 반드시 한번에 끝까지 기록 되어야 한다. 
      • 중간에 작성하다가 실패하면 처음부터 다시 해야 한다.
    • OS 에서 File 끝에 예비용 Block 을 두거나, Fragmentation 같은 경우에는 Disk 공간을 낭비

 

 

Linked List Allocation

  • 설명:
    • 파일의 각 데이터 블록이 다음 데이터 블록에 대한 포인터를 포함하여 체인 형태로 연결된다.
    • 디렉토리는 파일의 시작 블록 번호만 저장한다.
  • 장점:
    1. 공간 낭비가 없음: 파일 데이터가 연속적일 필요가 없어, 빈 공간에 자유롭게 저장할 수 있다.
    2. 유연성: 파일 크기 조정이 용이하며, 블록을 재배치할 필요가 없다.
    단점:
    1. Random Access가 불가능: 파일의 중간 데이터를 읽으려면 처음 블록부터 순차적으로 접근해야 한다.
    2. 포인터 저장 공간의 추가 비용: 각 데이터 블록에 포인터를 저장해야 하므로 디스크 공간의 일부가 포인터로 사용된다.
    3. 포인터 손실 문제: 포인터가 손상되면 파일의 일부 또는 전체 데이터를 잃을 수 있다.
    4. 다음 Data Block 에 대한 Pointer 로 인해, Data Block 에서 Data 를 저장하는 공간이 반드시 2의 배수가 아닐 수 있다.
      • 대부분의 Program 은 Read / Write 하는 Data 의 크기가 2의 배수이기 때문에, 성능 측면에서 뒤쳐질 수 있음

 

Linked List Allocation using an Index

  • 개선된 방식:
    • Random Access 를 하도록 하기 위함 
    • 파일에 관련된 모든 블록의 포인터를 Index Block에 저장한다.
    • Index Block은 파일의 데이터 블록 위치를 모두 기록한 테이블 형태로, 디렉토리에서 Index Block의 위치를 참조하여 데이터를 관리
  • 단점
    • 최대 File 의 크기가 고정됨
      • Index Block 의 크기가 고정되어 있기 떄문에, Index Block 에서 수용할 수 있는 Disk Block 에 대한 Pointer 수가 한정되어 있기 때문이다.

  • 동작
    • jeep 파일의 데이터 블록은 Index Block (블록 19)에 저장됨.
    • Index Block에서 각 데이터 블록의 번호를 확인하여 접근할 수 있다.
      ex) 블록 9, 16, 25, 5, 22 순으로 파일 데이터가 저장됨.

 

I-nodes

  • 설명:
    • 파일에 대한 모든 블록 정보를 하나의 I-node Table로 관리하는 방식.
    • I-node는 파일의 메타데이터와 데이터 블록의 포인터를 저장하는 구조다.
    • 멀티 레벨 페이징 구조와 유사하여, 작은 파일은 Direct Blocks로 처리하고 큰 파일은 Indirect Blocks를 활용.
  • 구성 요소
    • Field : File 에 대한 속성
    • Direct Block: 소형 파일의 데이터 블록을 바로 가리킴.
    • Single Indirect Block: 간접적으로 데이터 블록을 가리키는 포인터.
    • Double/Triple Indirect Block: 대형 파일을 지원하기 위한 계층적 포인터 구조.

 

 

 

Directory 구현

  • Directory Entry 
    • 정의 : 파일 시스템에서 파일과 디렉토리 정보를 관리하기 위한 데이터 구조다.
    • 역할:
      • 파일 이름과 메타데이터(크기, 속성 등)를 포함.
      • 파일 시스템 구조에 따라 Directory Entry의 구현 방식이 다름.
        ex) I-node 를 사용하는 File System 에서는 File Name 과 I-node Number 만이 저장됨
  • 2가지 구현 방법
    1. Directories in MS-DOS
    2. Directories in UNIX

 

Directories in MS-DOS

  • MS-DOS에서는 Linked List Allocation 방식으로 디렉토리를 구성한다.
  • 구조:
    • 파일 이름(8 bytes)과 확장자(3 bytes), 속성, 크기, 데이터 블록 번호 등으로 구성.
    • 파일의 첫 번째 데이터 블록 번호를 통해 데이터 블록 체인을 추적 가능.

 

 

 

Directories in UNIX

  • UNIX 시스템에서는 I-node를 사용하여 디렉토리를 관리합니다.
  • 구조:
    • 파일 이름(최대 14 bytes)과 I-node 번호를 포함.
    • I-node 번호는 파일의 메타데이터와 데이터 블록 위치를 가리킵니다.
  • 특징
    • 파일 시스템이 효율적이고 확장 가능.
    • 파일 이름을 통해 I-node를 찾아 필요한 데이터에 빠르게 접근 가능.

 

  • 구조 설명
    • UNIX 파일 시스템에서 각 디렉토리는 I-node를 통해 관리.
    • 디렉토리는 파일 이름과 I-node 번호의 쌍으로 이루어진 테이블을 포함.
  • 예시
    • Root Directory:
      • Root 디렉토리는 I-node 1에 저장.
      • 하위 디렉토리나 파일로 연결된다.
    • I-node 참조:
      • 예를 들어, /usr 디렉토리는 I-node 6을 참조하며, 이 I-node는 /usr 디렉토리의 내용을 가리킨다.
      • /usr/ast는 I-node 26을 참조하며, 이는 /usr/ast의 데이터 블록에 저장된 내용을 가리킨다.
    • I-node 기반 파일 관리: 각 I-node에는 파일의 크기, 데이터 블록 번호, 권한 정보 등이 저장된다.

 

Protection

  • 목적
    • 저장된 정보에 부적절한 접근을 막는 것.
    • 사용자가 데이터를 안전하게 관리할 수 있도록 다양한 접근 제어 방식 제공.
  • 접근 유형
    • Read: 파일 내용을 읽는 권한.
    • Write: 파일 내용을 수정하는 권한.
    • Execute: 파일을 실행하는 권한.
    • Append: 기존 데이터 뒤에 추가하는 권한.
    • Delete: 파일을 삭제하는 권한.
    • List: 디렉토리 내용을 보는 권한.
  • 접근 모드 : Read , Write, Execute
  • 사용자 범주:
    1. Owner Access: 파일 소유자의 권한 (e.g., RWX).
    2. Group Access: 같은 그룹에 속한 사용자들의 권한 (e.g., RW-).
    3. Public Access: 모든 사용자에 대한 권한 (e.g., R--).
  • 예시:
    • RWX 접근 권한:
      • chmod 761 명령을 통해 설정:
        • 7: Owner가 RWX 권한.
        • 6: Group이 RW- 권한.
        • 1: Public이 --X 권한.
    • 그룹 설정:
      • 특정 그룹(G)을 추가하거나, 파일 또는 하위 디렉토리의 접근 권한을 변경할 수 있다.
        ex) 예: chgrp G file_name으로 그룹 변경.
  • 관리자에게 고유의 이름을 가지는 Group G 를 만들도록 요청하고, 그 그룹에 사용자들을 추가하게 한다.
  • 특정한 File 또는 하위 Directory 에 대해 적절한 접근을 정의한다.

 

반응형