dh_0e

[OS] File System 본문

Operating System

[OS] File System

dh_0e 2025. 12. 7. 06:02

File Concept

  • 파일(File): Byte들의 배열(Array of Bytes)로 정의되며, 관련 정보들의 집합(A Collection of Related Information)으로도 정의
  • 추상화된 파일 객체를 다룸

File vs Address Space

 

File System

  • File과 Physical Disk Block 간Mapping을 제공하며, Disk 위치 배치를 담당
    • File Blocks >> Disk Blocks
  • 독립성(Independence): 사용자는 File이 저장된 물리적 위치를 알 필요 없음
  • Disk에 저장된 전체 File들을 총칭하며, File System 종류에 따라 File들의 배치나 구성이 달라질 수 있음

File Attributes(파일 속성) - metadata

  • 이 외에 Time(수정된 시각), Data(수정된 날짜), User Information, etc ..

Operation(주요 연산)

  • Current-File-Position Pointer: File을 읽거나 쓸 때마다 자동으로 업데이트되며, Process가 File에 대해 어디까지 작업했는지를 기록하는 포인터 (PC와 비슷한 원리)

 

Open/Close Semantics

  • 여러 Process가 File을 공유하는 경우
  • 두 개의 Open File Table 유지
    • 각 Process Table: 각 Process마다 유지하는 state를 가짐
      • ex) File Pointer
  • Open은 Open Count를 하나 증가시키고, Close는 감소
  • Delete 동작은 System-wide Table에서 Open Count를 확인한 후 이루어짐
    • System-wide Table: 프로세스 독립적인 정보
      • ex) Access date, File location, Open count

 

File Access Method

순차 접근(Sequential Access)

  • File에 있는 정보에 대한 접근이 Record의 순서대로 이루어짐
  • Operation
    • Read next
    • Write next
    • reset

이제는 거의 쓰지 않는 방식

 

임의 접근

  • File의 어떠한 위치라도 바로 접근하여 Read나 Write를 수행
  • Operation
    • Read n
    • Write n
    • reset
    • 인자로 받는 n은 읽고자 하는 File의 Block Number

지금은 다 랜덤 access 사용
전형적인 File System의 구성

  • 목적별로 파티션을 나눠서 사용
  • 여러 개의 disk하나의 파티션이 될 수 있음
    • disk 하나만 죽어도 시스템이 죽어버림

 

File System의 계층화

  • File System은 일반적으로 여러 개의 계층으로 나뉘어져 구성
  • 이유
    • File System을 구현하고자 하는 장치가 다양할 수 있음
    • 한 System에 1개 이상의 File System을 사용 가능하게 함
    • 계층화된 구성을 통해서 File System에 유연성을 제공

  • 다양한 File system을 VFS를 통해 접근/관리 할 수 있음
    • Diskmgmt.msc in Windows
    • Fdisk in Linux

 

Mount

  • Directory와 Device를 분리
  • Window에선 거의 안 씀
  • 비어 있는 Directory임의의 Device를 붙일 수 있음
  • File을 사용하기 위해 Open을 하듯, Fiile System을 사용하려면 Mount가 필요로 함
  • /home 위에 disk A /a/b/c Directory를 Mount하면 /home/a/b/c가 됨

특정 dir 밑으로 어떤 disk의 root가 달라 붙음

Directory Structure Concept

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

  • Single-level Directory: 모든 사용자에 대해서 하나의 단일한 Directory

  • Two-level Directory: 사용자마다 Directory를 분리

  • Tree-Structured Directories
    • 루트(root)를 가지는 트리 구조로 디렉토리를 구성 
    • 효율적인 탐색, Grouping 특성
    • Window가 사용중인 구조

  • Acyclic-Graph Directories
    • 둘 이상의 서로 다른 이름을 이용(Aliasing)하여, File이나 Sub Directory를 공유
    • Dangling Pointer가 생길 수 있음
      • ex) 예시 그림 가장 밑 Directoy인 list를 삭제할 경우

  • General Graph Directory
    • Cycle이 없도록 보장하는 방법
      • Link를 File로만 가능하도록 함 (디렉토리 바로가기는 없음)
        • 링크(Sharing): 이미 존재하고 있는 파일이나 디렉터리를 다른 디렉터리에서도 있는 것처럼 가리키는 기술
        • ex) Window 바탕화면의 바로가기 아이콘
      • 새로운 Link를 만들 때마다 Cyclee Detection Algorihthm을 사용하여 Cycle이 생기지 않는지 확인

 

File 구현

  • Disk Block: File System의 입출력 단위
  • 고려 사항: 파일 구현에서는 파일 내용을 담고 있는 Data Block의 위치 정보를 어떻게 디스크에 저장할지가 중요
  • Data Block 관리 4가지 방식
    • 운영체제마다 파일을 구성하는 Data Block 정보를 관리하는 방식이 다르며, 주로 다음 네가지가 사용됨
      • Contiguous Allocation (연속 할당)
      • Linked List Allocation (연결 목록 할당)
      • Linked List Allocation using an Index (색인을 이용한 연결 목록 할당)
      • I-nodes (색인 노드)

 

Contiguous Allocation(연속 할당)

  • File을 물리적으로 연속된 Disk Block에 저장
    • Frame Allocation에서의 Contiguous Allocation과 유사
  • 장점
    • 구현이 간단함
    • 물리적으로 연속된 공간에 있으므로, 전체 File을 한 번에 읽어들일 경우 성능이 매우 뛰어남
  • 단점
    • File은 반드시 한번에 끝까지 기록 되어야 함
    • 운영체제에서 File의 끝에 예비용 Block을 남겨둘 경우, Disk의 공간을 낭비하게 됨
      • 예비용 Block: 파일이 커질 것을 대비해 미리 비어두는 공간

Contiguous Allocation 도식

  • 실제로 사용하기 어려움
    • 이유: 얼마나 커질지 모름, 낭비가 너무 심함(Internal Fragment), 이동시 시간 지연

 

Linked List Allocation

  • Disk의 Block을 Linked List로 구현하여, File의 Data를 저장하도록 함
  • 장점
    • File의 Data Block은 Disk의 어디든지 위치할 수 있음
      • Linked List의 next pointer로 다음 공간을 알 수 있음
    • 공간의 낭비가 없음 (Contiguous Allocation의 단점 해소)
  • 단점
    • Random Access 불가능: 특정 위치를 찾기 힘듬
      • File의 특정 위치를 찾기 위해서 해당 File의 시작 Node부터 찾아가야 함
    • 다음 Data Block에 대한 Pointer로 인해, Data Block에서 Data를 저장하는 공간이 반드시 2의 배수가 아닐 수도 있음
      • 대부분의 Program은 Read/Write하는 Data의 크기가 2의 배수이기 때문에 2의 배수가 아니면 binary로 탐색을 못해서 성능면에서 떨어질 수 있음
      • ex) 물리적 블록 크기가 512 Byte에서 4 Byte가 포인터이기 때문에 대부분의 OS에서 512 Byte를 읽어오려고 시도할 때 508 Byte를 읽고, 블록 하나를 더 읽어야 

Linked List Allocation 도식

 

Linked List Allocation using an Index

  • File의 Data에 관련된 Block을 하나의 Block에 모아 둠
    • File의 Data Block 중 하나를 Index Block이라 하여, 모든 Data Block의 위치를 Index Block에서 알 수 있음
  • Linked List Allocation 보다 개선된 점
    • Random Access 시, 하나의 Data Block(Index Block)에서 찾아가고자 하는 Data Block의 위치를 알 수 있으므로, Linked List Allocation보다 빠르게 Random Access 가능
  • 단점
    • 최대 File의 크기가 고정
      • Index Block의 크기가 고정되어 있기 때문에, Index Block에서 수용할 수 있는 Disk Block에 대한 Pointer의 수가 한정되어 있기 때문

Linked List Allocation using an Index 도식

 

I-nodes

  • 현재 사용하는 방식
  • File에 대한 Data Block Index들을 Table 형태로 관리하는 방법
    • 큰 Memory 영역을 관리할 경우에 1-level Paging보다 Multi-level Paging이 유리한 것과 유사함
  • 구성 요소
    • File에 대한 속성을 나타내는 Field 
    • 작은 크기의 File을 위한 Direct Index
    • File의 크기가 커짐에 따라서 요구되는 Data Block의 Index들을 저장하기 위한 Index Table들
      • Single Indirect Block: 하나의 블록이 Data Block의 주소를 가리킴 (Direct Index로 꽉 차 있는 테이블을 가리킴)
      • Double Indirect Block: 하나의 블록이 Single Indirect Block의 주소를 가리킴
      • Triple Indirect Block: 하나의 블록이 Double Indirect Block의 주소를 가리킴

I-nodes 도식

 

Directory 구현

  • Directory Entry: Directory를 표현하기 위한 자료구조
    • File System의 File 구현에 따라 Directory Entry를 구성하는 Field도 달라짐
    • 일반적인 Directory Entry: File의 이름, 속성과 같은 정보가 저장
    • I-node를 사용하는 File System(UNIX): File Name과 I-node Number만이 저장됨
  • 2가지 구현 방법
    • Directories in MS-DOS
    • Directories in UNIX

 

Directories in MS-DOS

  • 파일 구현 방식: Linked List Allocation 방식

총 32 bit Directory Entry

  • Directory Entry의 First Block Number를 통해서 실제 File의 Data Block이 시작되는 Block을 알 수 있음

 

Directories in UNIX

  • 파일 구현 방식: I-node 방식
  • Directory Entry 구조: File 이름(14bytes)I-node Number(2bytes)로 이루어짐
    • MS-DOS와 달리 File의 Attirbute, Ownership과 같은 정보는 해당 File의 I-node 자료 구조에 있기 때문

  • 동작 예시: /usr/ast/mbox 파일의 경우, Root Directory에서 /usr/의 Inode 6을 찾고, Inode 6(132 block)에서 ast의 Inode 26을 찾고, Inode 26(406 block)에서 mbox의 Inode 60을 찾아 최종적으로 파일에 접근

 

Protection

  • 저장된 정보에 부적절한 접근을 막는 것
  • Types of Access
    • Read, Write, Execute, Append, Delete, List(File의 속성이나 이름의 내용)
  • 접근 모드: Read, Write, Execute
  • 세 가지 분류의 사용자

  • 관리자에게 고유의 이름을 가지는 Group G를 만들도록 요청, 그 그룹에 사용자들 추가
  • 특정한 File 또는 하위 Directory에 대해 적절한 접근을 정의

  • 파일에 그룹 적용: chgrp G name (파일 name의 그룹을 G로 변경)
  • 접근 권한 설정: ex) chmod 761 name
    • 소유자(owner): 7(RWX)
    • 그룹(group): 6(RW-)
    • 기타 사용자(public): 1(--X)
  • ex) chmod 755 file.c라고 칠 때:
    • 7 (나) = 4+2+1 → rwx (다 할 수 있음)
    • 5 (그룹) = 4+0+1 → r-x (읽고 실행만 됨)
    • 5 (남들) = 4+0+1 → r-x (읽고 실행만 됨)

'Operating System' 카테고리의 다른 글

[OS] Memory Management II  (0) 2025.12.07
[OS] Memory mangement I  (0) 2025.12.06
[OS] Synchronization II  (0) 2025.12.05
[OS] Synchronization I  (0) 2025.12.04
[OS] Thread  (0) 2025.11.28