Disk의 기본 단위는 Sector이다. 

이러한 Sector들을 묶어서 논리적으로 독립적인 Disk를 만들 수 있었다.

이를 Partition이라 부르며,

각 Partition은 Logical Formatting 단계를 거쳐 File System을 설치하거나 Swap-Space로 활용할 수 있다. 

 

"File System"는 SSD, Disk 등과 같은  저장장치에 설치되어 

File을 저장하고 관리하며, 검색할 수 있는 등의 기능을 제공하는 SW이다.

 

File System은 User 관점 혹은 저장장치 관점에 따라 2가지로 나뉠 수 있다. 

"File System Interface"는 File System과 사용자 간의 상호작용을 위한 추상화 계층이다.

예를 들어, 우리는 File의 실제 어떻게 저장되어 있는지 구조를 몰라도 파일을 조작할 수 있다. 

File, Directory, Arrtibute, Operation을 통해 User가 File System을 조작할 수 있게 해 준다.

 

"File System Implementation"은

실제 File System의 내부 동작과 구조를 구현하는 실제 코드와 알고리즘을 의미한다.

 

이번 포스팅에선 File System Interface에 대해 다루어 볼 것이다.

 

 

File Concept

File

"File"이란 파일 이름(File Name)으로 식별되며, Information들을 저장한다.

보조 저장 장치에 저장되며, System입장에선 Byte의 Sequence에 지나지 않는다.

PDF, PPT와 같은 Data File과, 

exe와 같은 Program File로 구분된다.

 

파일에는 여러 가지 Type이 존재한다. 

예를 들어, jpg와 같은 view Type, 

mp3와 같은 multimedia Type 등이 있다. 

 

보통 이들은 file extension으로 구분되지만 Unix에선 Magic Number로 구분된다. 

"Magic Number"란,

Unix에서 사용되는 File Type을 구분하는 것으로 파일의 처음 부분에 저장된다.

 

File Attribute (MetaData)

MetaData란 File자체의 정보를 의미하며,

File System에서 File을 구별하고 관리할 수 있는 정보를 제공한다.

  • Name : 파일을 식별하는 데 사용되는 이름 혹은 경로
  • Identifier : File System에서 Unique한 Tag(Number)
  • Type : Regular file, Directory, Symbolic Link 등등 File Type
  • Location : Device상에서 File의 위치를 가리킨다.
  • Size : File의 Size
  • Protection : Read, Write, Execute 등 액세스 권한 정보
  • Time, Date, User Identification 

 

File Operations

"File System Interface"는 File System을 조작하기 위해 다양한 Operator들을 제공한다.

  • Create & Delete : File System이 File을 생성 및 삭제한다.
  • Open & Close : 기존의 파일을 열어서 사용할 수 있도록 하거나 열려있던 파일을 닫는다. 
  • Read & Write : 파일에서 데이터를 읽어오고, 데이터를 쓴다.
  • Truncate : File의 크기를 조절하여 File의 데이터를 잘라내거나, 확장한다.
  • Reposition Within file-seek : 파일 내의 원하는 위치(OffSet단위)로 이동한다.

 

 

Access Methods

File System Interface는 File에 접근하는데 2가지 방법을 제공한다. 

Sequential Access

File의 시작부터 끝까지 순차적으로 접근한다. 

현재 위치의 File의 데이터를 Read 혹은 Write 한 후 다음 데이터로 이동한다. 

텍스트 파일이나, Log 파일을 순서대로 확인하는 경우 사용한다.

 

Random Access (Direst Access)

데이터를 순차적으로 접근하는 것이 아닌 임의로 접근하는 방식이다. 

File 내 특정 위치로 접근하기 때문에 Offset과 같은 부가 정보를 사용한다. 

예를 들어, DataBase File에서 임의의 레코드에 접근하여 

레코드를 검색하거나 수정할 때 사용한다.

 

 

Directory

"Directory"란,

File System에서 File을 그룹화하고 구조화하여 관리하기 위한 Virtual Contrainer이다.

Directory는 일종의 특별한 File로, metadata 중 일부를 보관한다.

 

Directory에서 정의되는 Operator는 다음과 같다. 

  • Search for a File : Directory 밑에 존재하는 파일을 찾는다.
  • Create & Delete a File : Directory 밑에 파일을 만들고 삭제한다.
  • List a Directory : Directory 밑에 존재하는 파일과 Directory의 목록을 가져온다.
  • Rename a File : Directory밑에 File의 이름을 재정의 한다.
  • Traverse the File System : Directory구조를 따라 하위 파일 및 Directory를 탐색한다.

 

Unix Directory Structure

Unix를 예로 들어보자면 다음과 같다. 

Directory는 File을 그룹화하고, 각 Entry에는 각 File의 inode정보를 가지고 있다.

inode란 File의 권한, 소유자, 크기, 데이터 블록의 위치등의 메타데이터 정보를 저장하는 UNIX의 데이터 구조이다.

 

Tree-Structured Directory

"Tree-Structured Directory"는 하나의 최상위 Root Directory를 시작으로 Directory들이 트리 구조를 이룬다. 

즉, 각 Directory는 하위 Directory를 가지게 된다

이러한 구조에서 효율적으로 탐색하기 위해,

현재 Directory기준으로 탐색하는 "상대 경로", Root Directory를 기준으로 탐색하는 "절대 경로"가 있다. 

 

Acyclic-Graph Directory

"Acyclic-Graph Directory"란,

Directory가 SubDirectory 혹은 File을 Link를 통해 공유할 수 있도록 한다.

 

File 또는 Directory 공유를 허용하지 않았던 Tree-Structured Directory를 일반화한 방식이다.

Probelm in Acyclic-Graph Directory

"Link"는 File과 Directory를 다른 Directory에 연결해준다.

즉, Directory와 File을 공유할 수 있게 해 준다.

 

하지만, File과 Directory를 공유하기 때문에,

특정 File 혹은 Directory가 삭제되었을 때 "Delete Problem"과,

같은 File 혹은 Directory를 여러 번 방문 혹은 순환 참조하는 "Traverse Problem"이 발생한다. 

 

"Traverse Problem"의 경우에는 Ascyclic-Graph Directory가

공유가 일어나도 특정 알고리즘을 통해 Cycle이 생기지 않는 것을 보증하기 때문에, 

순환 참조 문제는 발생하지 않는다.

또한, 여러번 방문하는 문제는 방문 플래그나 특정 기법을 통해 해결할 수 있다. 

 

"Delete Problem"은 Link 방식에 따라 다르게 처리한다.

Link에는 Symbolic Link와 Hard Link가 있다. 

 

"Symbolic Link" 란, 원본 File 혹은 Directory의 Pathname만 Directory에 저장한다.

Window의 바로가기와 비슷하다.

원본 File이 삭제되면 대상이 없는 참조가 된다.(dangling reference)

즉, 제대로 된 기능을 수행할 수 없게 된다.

 

"Hard Link"란,

원본 File의 MataData를 복사한다.

즉, 복사된 File에서 수정이 일어날 경우 원본 파일에서도 적용되며, 반대도 마찬가지이다.

 

Hard Link에선 Link가 일어날 경우 Reference Count를 증가시킨다.

만약 Reference Count가 0이 되면 실제로 File을 삭제한다.

 

 

File System Mounting

"File System Mounting"이란, 

하나의 File System을 다른 File System의 특정 위치에 붙이는 것이다. 

 

앞서 설명하였지만, Disk의 Partition은 각각 File System을 가질 수 있다.

이는 OS에 의해 독립적인 Disk로 인식하게 된다.

 

일반적으로 서로 다른 File System끼리는 접근이 불가능하지만, 

Mounting을 통해 가능하게 할 수 있다.

위의 그림에선 disk1의 "/usr" 라는 위치에 disk3의 File System을 Mount한다. 

이를 통해 disk1에서는"/usr"라는 경로를 통해 disk3의 File System 접근이 가능해지게 된다.

이때 "/usr"위치를 "Mount Point"라 부른다.

 

 

File Protection

"File Protection"은 MetaData 중 하나로,

누가(Whom) 어떻게(What) Control할 수 있는지 대한 정보를 제공한다.

  • 누가 (Whom) : Users
  • 어떻게 (What) : Permission (read, write, execute, ...)

다양한 User가 존재할 수 있는데,

"Grouping"을 통해 Protection에 대한 정보를 제공한다. 

 

 

 

References

Abraham Silberschatz, Peter B. Galvin, Greg Gagne의 『Operating System Concept 9th

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

[OS] File System(2) - Implementation  (0) 2023.05.18
[OS] I/O Systems  (0) 2023.05.16
[OS] Mass-Storage Structure  (0) 2023.05.15
[OS] Virtual Memory  (0) 2023.05.13
[OS] Main Memory(2) - Memory Allocation  (1) 2023.05.11
복사했습니다!