전공공부/운영체제 (Operating System)

[운영체제] File System Interface

jooona 2021. 1. 6. 23:39
반응형

운영체제에서 마지막으로 다뤄볼 챕터는 바로 파일 시스템으로, 두 번의 글에 나누어 Interface와 Implementation에 대해 공부해보고자 합니다. 파일 시스템이란 사실상 메모리의 관리에 관한 내용이며, 운영체제 중에서 사용자에게 가장 많이 노출되는 부분입니다. 한 번 시작해보도록 하겠습니다.

 

1. 파일과 디렉터리 (File & Directory)

컴퓨터는 정보를 어떤 저장 매체에 저장할 수 있으며, 파일이란 이 정보를 담는 논리적인 단위로 생각할 수 있습니다. 사용자의 관점에서 보면, 파일은 이름이 붙여져 있고, 시스템이 재부팅되어도 사라지지 않는 데이터들의 집합으로 생각할 수 있고, 운영체제의 입장에서 보면 데이터를 저장하고 있는 디스크 블록들의 집합체로 볼 수 있습니다. 어떠한 자료이든, 자료가 파일 안에 존재해야만 저장 장치에 기록될 수 있습니다. 그리고 파일 시스템이란 컴퓨터에서 파일이나 자료를 쉽게 발견하고 접근할 수 있도록 보관 및 조직하는 체제를 말합니다. 

 

파일은 이름, id, 타입, 위치, 크기, 접근 권한 정보, 시간, 날짜 등을 속성으로 가집니다. 또한 운영체제는 이 파일을 관리하기 위하여 생성(create), 쓰기(write), 읽기(read), 위치 재설정(reposition), 삭제(delete) 등의 시스템 콜을 제공합니다.

 

디렉터리란 쉽게 생각하면 폴더와 같은 의미로써, 파일 시스템 내에서 파일들과 다른 디렉터리들을 포함시키는 구조물을 말합니다. 일반적으로 컴퓨터는 수만 개, 수억 개의 파일을 가지기 때문에, 이를 체계적으로 구성하기 위해 디렉터리가 사용됩니다. 디렉터리에서는 파일 찾기, 파일 만들기, 파일 삭제하기, 디렉터리 나열하기, 파일 이름 변경하기, 파일 시스템 순회하기(traverse)라는 연산들을 제공합니다.

 

2. 디렉토리 구조

1. 1단계 디렉터리 (Single-level Directory)

Single-level Directory

1단계 디렉터리는 가장 간단한 형태의 디렉터리로써, 컴퓨터 내의 모든 파일들이 하나의 디렉터리에 속해 있는 형태를 말합니다. 물론 유지나 구현이 쉽다는 장점이야 있겠으나, 이러한 시스템에서는 사용자가 여러 명이더라도 모든 파일이 고유한 이름을 가져야 하고, 사용자가 한 명이더라도 파일을 사용하기 위해서는 모든 파일의 이름을 기억해야 한다는 단점이 있습니다.

 

2. 2단계 디렉터리 (Two-level Directory)

Two-level Directory

2단계 디렉터리에서는 각 사용자들은 자신만의 사용자 파일 디렉터리를 가집니다. 그리고 사용자가 시스템에 접속하면 마스터 파일 디렉터리를 탐색하여 자신의 사용자 파일 디렉터리를 찾습니다. 그리고 사용자가 특정한 파일에 대한 검색을 실행하면, 자신의 사용자 파일 디렉터리에서만 검색하게 됩니다. 그렇기 때문에 파일의 이름이 다른 사용자 파일 디렉터리의 파일의 이름과는 같아도 상관이 없습니다.

 

이 구조에서는 한 사용자가 다른 사용자의 디렉터리에 접근할 수 없기 때문에 파일을 공유해서 사용하기 어렵다는 단점이 있습니다. 물론 서로의 사용자 파일 디렉터리에 접근을 허용한다면, 사용자 명과 파일 이름을 동시에 사용하여 파일을 공유할 수 있습니다.

 

3. 트리 구조 디렉터리 (Tree-Structured Directories)

 

Tree-Structured Directories

가장 흔한 형태의 디렉터리로써, 트리는 root 디렉터리를 가지고, 모든 파일들은 자신 만의 경로명(path name)을 가집니다.  경로명에는 절대 경로명(Absolute path name)과 상대 경로명(Relative path name)이 존재하는데, 절대 경로명은 root로부터 해당 파일까지의 경로를 뜻하고, 상대 경로명은 현재 디렉터리에서 해당 파일까지의 경로를 뜻합니다.

 

디렉터리들은 자신의 밑에 다른 디렉터리나 파일을 가질 수 있고, 여기서 디렉터리는 파일들을 저장하는 파일로써의 역할을 합니다. 즉, 디렉터리는 단순히 다른 그 하위 디렉터리와 파일들의 정보를 가지는 특별한 파일과 같은 취급을 받습니다. 

 

그리고 각각의 프로세스들은 현재 디렉토리(current directory)를 가져서 만약 파일을 탐색할 때, 현재 디렉터리에 속한 파일들을 먼저 탐색하고, 현재 디렉터리가 아닌 곳에 속한 파일을 참조하기 위해서는 탐색 경로를 사용하거나 해당 디렉터리로 옮겨가야 합니다.

 

4. 비순환 그래프 디렉토리 (Acyclic-Graph Directories)

 

Acyclic-Graph Directories

트리 구조 디렉터리에서는 파일 또는 디렉터리의 공유를 허용하지 않습니다. 즉 같은 파일이나 디렉터리에 둘 이상의 디렉터리가 연결되어 있는 것을 금지한다는 뜻입니다. 이를 허용하여 주는 것이 바로 비순환 그래프 디렉터리입니다. 비순환 그래프 디렉터리는 링크(Link)를 이용해서 이러한 공유를 허용합니다. 링크에는 하드 링크와 소프트 링크, 두 가지 종류가 존재하지만, 여기서는 그냥 넘어가도록 하겠습니다. 

 

비순환 그래프 디렉터리에서는 두 가지 사항을 꼭 고려해야 합니다. 

 

첫째는 가명 문제(Aliasing Problem)입니다. 비순환 그래프 디렉터리에서는 파일이 여러 개의 경로명을 가질 수 있기 때문에 파일을 순회하거나 할 때, 동일한 파일을 중복적으로 탐색하는 경우가 생길 수 있습니다. 만일 시스템을 백업한다거나, 통계를 내기 위해 순회하는 경우라면 더 심각한 문제를 야기할 수 있습니다.

 

둘째는 할당 해제에 대한 문제(Deallocation Problem)입니다. 즉 공유 파일에 할당된 공간을 언제 반납할 것인가를 고려해야 한다는 것입니다. 해당 파일을 가리키고 있는 어떤 포인터든 하나라도 삭제되면 해당 파일을 삭제할 수도 있을 것이고, 모든 포인터가 다 사라져야 파일을 삭제할 수도 있을 것입니다. 잘못 관리하여 포인터가 남아있게 만들면, 엉뚱한 파일을 가리키게 될 수도 있습니다.

 

5. 일반 그래프 디렉터리 (General Graph Directory)

 

General Graph Directory

마지막으로 일반 그래프 디렉터리는 링크를 만드는데 어떠한 제약도 두지 않는 형태를 말합니다. 순환 시에 중복 탐색을 피하기 위해, 한 번의 순환에 하나의 디렉터리에 접근할 수 있는 횟수를 제한하는 counter를 이용하거나, 특정 링크들을 순환할 때 우회하는 등의 방법을 사용할 수 있습니다.

 

 

 

 

오늘은 파일 시스템, 특히 디렉터리의 구조에 대해 공부해보았습니다. 다음 글에서는 운영체제의 마지막인 File System Implementation에 대해 공부해보도록 하겠습니다. 읽어주셔서 감사합니다.

 

 

반응형