심플코더
간단한 코딩 공간
   

글쓰기    관리    수식입력
  • 분류 전체보기 (84)
    • AWS (1)
    • JavaScript (11)
    • 개인학습 (5)
    • DB (11)
    • OS (9)
    • Network (7)
    • DevOps (0)
    • TypeScript (1)
    • 개발 (1)
    • CKA (28)
hELLO · Designed By 정상우.
심플코더

간단한 코딩 공간

[OS] 9. File System
OS

[OS] 9. File System

File

file은 비휘발성 저장 장치에 저장된 data의 집합을 말한다.

 

file의 정보는 Metadata와 file data 2 종류로 나눌 수 있다.

 

File Metadata(attribute)

파일의 이름, 유형, 저장 위치, 파일 사이즈, 접근 권한 등 파일을 관리하기 위한 정보들에 해당한다.

 

File Data

File의 정보, 즉 실제 file이 수행하는 작업 등에 대한 정보이다.

 

Directory

우리가 흔히 폴더라고 부르는 대상이며, File의 Metadata중 일부를 보관하고 있는 특별한 형식의 파일이다.

 

해당 디렉토리에 속한 파일 이름과 file metadata를 담고 있다.

 

operation으로 create a file, delete a file, list a directory 등의 operation을 수행할 수 있다.

 

File System

운영체제에서 file을 관리하는 역할을 수행하는 softeware이다.

 

파일의 생성, 삭제, 읽기, 쓰기, 수정, 이동 등을 관리하며 file에 대한 접근 권한이나 resoruce도 관리한다.

 

File System API

open

파일의 메타데이터를 메모리로 올려놓는 역할을 수행한다

 

file에 대한 메타데이터에 대한 정보가 메모리에 올라오면, `Open File Table`에 메타데이터가 저장되고 `PCB`에는 해당 메타데이터의 위치가 저장되게 된다.

 

open에 성공하면 메타데이터의 위치가 저장된 entry에 접근할 수 있도록 `file descriptor`가 return되는데, 사용자는 이 `file descriptor`를 통해 `PCB`의  entry에 접근하고, 해당 entry에 저장된 file metadata의 위치를 이용하여 `file metadata`에 접근하고, `file metadata`를 통해 file의 정보에 접근할 수 있게 된다.

 

`Open File Table`의 경우 모든 process가 공유하게 되기 때문에 `System-wide open file tabl`이라고 하며, PCB(per-process file descriptor table)은 프로세스마다 고유하게 가지고 있다.

Process마다 접근중인 file의 offset이 다를 수 있기 때문에, 해당 정보를 저장하기 위해 Process마다 file descriptor table을 고유하게 가지고 있는 것이다.

 

Free Space 관리

Bitmap ,Bit vector

전체 Block을 대상으로 할당된 블락인 경우 1, 비어 있는 블락인 경우 0이라고 표시한 Bit map을 이용하여 free space를 관리하는 방식이다.

 

Linked List

모든 free block을 리스트로 연결하여 관리하는 방식이다.

 

Bitmap에 비해 추가적인 저장공간이 필요하지 않다는 장점이 있지만, 연속된 공간을 찾기 힘들다는 단점이 있다.

 

단점을 보완하기 위해 `Grouping`이나 `Counting` 방식을 적용하기도 한다.

 

Allocation

파일을 저장하면, disk에 존재하는 free space에 파일의 데이터를 저장하게 된다.

 

이러한 Allocation 방식에는 크게 `Contiguous Allogcation`, `Linked Allocation`, `Indexed Allocation`이 존재한다.

 

Contiguous Allocation

file을 disk의 연속된 free space에 할당하는 방식이다

 

Sequential access가 빠르고 Random Access가 쉽다는 장점이 있지만 `External Fragmentaion`이 발생하는 문제점이 있다.

 

또한 File크기를 키우기가 어렵다는 단점이 있으며, 이를 보완하기 위해 미리 FIle size를 크게 잡아놓으면 `Internal Fragmentation`문제가 발생한다.

 

Linked Allocation

File을 disk block의 Linked List 형태로 저장하는 방식에 해당한다.

각 Disk Block은 file data이외에 다음 block의 위치를 저장하는 pointer 영역을 따로 가지게 된다.

 

Linked Allocation 방식은 Contiguous Allocation 방식에서 발생하던 `file size의 동적인 증가`, `External Fragmentaion` 문제를 해결할 수 있지만

`Random Access가 불가능하다`는 단점이 있다.

만약 우리가 파일의 3번째 블록에 직접 접근하고 싶은 경우, Contigous Allocation 방식에서는 file의 start 주소 + offset 으로 접근할 수 있지만, Linked Allocation 방식에서는 이러한 직접 접근이 불가능하다.

 

또한 중간에 있는 disk block이 손실되면 다음 disk block으로 접근하는 방법을 잃어버리는 unreliable 문제가 발생하며

disk block에 다음 block의 위치를 저장하는 pointer 영역을 할당해야 하기 때문에, 매 block당 4byte의 공간을 사용할 수 없게 된다.

 

이러한 문제점을 보완하기 위해 `FAT(File Allocation Table)`을 도입하게 된다.

FAT는 disk block에 있는 모든 pointer들을 linked list의 형태로 따로 memory에 로드하는 방식으로, block에 사용되던

4 byte의 공간을 절약할 수 있다는 장점이 있다. 하지만 random access 속도는 여전히 매우 느리다는 문제점이 남아있다.

Indexed Allocation

File header의 각 entry에 disk block을 가리키는 pointer를 담는 방식이다.

 

위 File header는 특정 disk block에 담기게 되며, 해당 disk block의 위치만 알면 file data에 모두 접근할 수 있다.

 

Indexed Allocation은 `random access`가 빠르고, `external fragmentation`이 없다는 장점이 있지만,

너무 큰 파일의 경우 하나의 block으로 모든 Index를 저장하기 힘들기 때문에 file size에 제한이 생긴다는 단점이 있다.

 

이러한 단점을 해결하기 위한 방법이 `Linked Index`와 `Multi-Level Index` 방식이다.

 

Linked & Multi Level Indexed Allocation

 

 

Combined Scheme

UNIX는 multi level indexed allocation을 변형한 combined scheme를 사용한다.

 

위 데이터 구조는 UNIX에서 사용하는 `Inode`의 구조에 해당한다.

Inode는 Directory가 가지고 있지 않은 File의 Metadata를 담고 있는 데이터구조로, UNIX 파일 시스템에서 Inode list에 저장되어 있다.

 

3-level pointer까지 사용할 수 있기 때문에 최대 16GB까지 file size를 키울 수 있다.

 

 

 

 

'OS' 카테고리의 다른 글

[OS] 2. Process  (1) 2023.10.27
[OS] 1. 운영체제란? + 기본적인 컴퓨터의 구조  (0) 2023.10.26
[OS] 8. Virtual Memory  (0) 2023.10.03
[OS] 7. Address Translation  (0) 2023.10.03
[OS] 4. Process Scheduling  (0) 2023.10.02
    'OS' 카테고리의 다른 글
    • [OS] 2. Process
    • [OS] 1. 운영체제란? + 기본적인 컴퓨터의 구조
    • [OS] 8. Virtual Memory
    • [OS] 7. Address Translation
    심플코더
    심플코더

    티스토리툴바