[OS] File System

Operating Systems 2013. 5. 18. 01:07

※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


File System 구조에 대해서 이야기 해보자. 디스크가 어떤 구조로 이루어져 있을까? 보통 우리들은 하드디스크를 여러 개의 파티션(C드라이브, D드라이브...)등으로 나누어서 사용하고 있다. 이런 식으로 나누어서 사용하는 것을 Partition한다고 한다. 이렇게 파티션된 각각이 파일 시스템이다. 파티션은 해도 되고 안 해도 되는 것이다. 그림으로 보자.



하나의 디스크를 두개로 나누어서 파티션 A, 파티션 B로 쓸 수도 있고 두 개의 디스크를 하나의 파일 시스템으로 묶어서 쓸 수 있다.


위 사진에서 하나의 파티션을 보자. 하나의 파티션은 디렉토리와 파일 부분으로 나뉘어 있다. 그렇다. 우리가 머리 속에 가지고 있는 트리 구조의 디렉토리는 사실 파일 시스템의 일부분에 데이터로 저장되어 있는 형태를 띈다. 


요즘 디렉토리 구조는 보통 트리 구조를 사용한다. Flat directory structure, 2-level directory structure 등도 있지만 현실적이지 않기 때문에 설명하지 않고 자주 쓰이는 트리구조에 대해서 이야기 해보련다.


트리 구조는 예상하다시피 다음과 같다.



각각의 디렉토리들이 트리 구조를 이루고 있다. 여기서 질문 하나!! 링크는 어떻게 구현한 것일까? 링크는 다들 알다 시피, 윈도우즈로 따지면 "바로가기 아이콘" 같은 것이다. 위의 그래프를 기반으로 했을 때 제일 오른쪽에 있는 파일 A가 젤 왼쪽에 있는 파일 B에 대한 링크(바로가기)라고 한다면 어떻게 되야할까? 상식적으로 생각했을 때, 그냥 선이 이어져 있으면 될 것 같다. 그렇다. 그냥 선만 이으면 된다.



이와 같은 그래프를 Acyclic graph라고 한다. 잠깐 자료구조 이야기를 하면, 위에 위에 그림에서는 트리라고 했고 위의 그림에서는 Acyclic graph라고 했는데, 그래프라고 한 이유가 있다. 즉, 위의 구조는 트리 구조는 아니기 때문이다. 그런데 왜 아닌가.. 그건 잘 모르겠다. 자료구조 이야기이므로 지금은 잠깐 패스하자. Acyclic이라고 한 이유는 루프가 없기 때문이다. 그런데 로프가 존재하는 파일 디렉토리 구조도 있다. 



링크에 대해서 잠깐만 이야기 해보자. 하드링크와 소프트링크가 있다는 것은 어느 정도 들어봤으리라고 생각한다. 각각이 무엇을 의미할까? 하드링크는 하나의 파일 시스템 내에서의 링크를 의미하고 소프트링크는 서로 다른 파일 시스템에 존재하는 파일끼리도 링킹을 할 수 있게 하는 것을 말한다. (하드 링크가 훨씬 빠르다고 한다.)


파일을 링크를 통해서 연결을 하면 어떤 현상이 나타나는가? 가령 /usr/include/sys/realfile.h라는 파일을 /usr/src/uts/sys/testfile.h과 연결하려고 하고 /usr/include/sys 폴더를 /usr/src/uts/sys 폴더로 연결하려고 한다. 그러면 아래와 같은 구조로 보인다.


이렇게 접근했을 때, /usr/src/uts/sys/ 폴더와 /usr/include/sys 폴더는 무슨 관계인가? 두 개는 같은 파일이다. 같은 파일이라는 뜻은 같은 metadata를 가지고 있다는 뜻이고 그 뜻은 같은 inode table index를 갖는다고 이해하면 된다. 

(OS에서 파일 시스템을 논할 때 "같은 파일"이라는 말을 들으면 이 관계를 머리 속에서 떠올려야 한다.)


이제 다음 이야기를 해보자. 다음에 이야기 할 부분은 mounting이다. 마운팅이란 무엇인가? 우리가 흔히 생각하는 마운팅이란 그냥 어떤 것을 접근가능하도록 파일시스템에 붙이는 거. 이 정도이다. 정확한 정의는 다음과 같다. 하나의 파일 시스템을 다른 파일시스템의 어떤 location에 붙이는 것이다. Windows와 Mac-OS는 Auto mounting이 지원된다. 그래서 Windows에서 USB를 꽂으면 F드라이브 등으로 자동으로 생성되는 것이다. Unix 시스템에서는 일일이 USB 등을 마운트 해줘야 한다. 하나의 파일 시스템을 다른 파일 시스템의 location에 붙인다는 말이 무슨 말일까?


아래 두 개의 파일 시스템이 있다. 



File System2를 File system 1의 dev 에 마운팅 시키면 다음과 같이 된다.



이제 마운팅의 개념은 잘 알겠지요? 한 가지 덧붙여서 이야기 하자면 File System 1의 dev와 같이 다른 파일 시스템이 마운팅 되는 포인트를 Mount Point라고 한다. 이 마운트 포인트는 비어 있는 것이 일반적이다. 


다소 짧은 경향이 없지 않아 있지만 이번 포스팅은 여기서 그만해야 할 것 같다. 다음에 이야기 할 부분이 너무 길다는 것이 그 이유이다. 다음에는 파일 시스템에서 중요하게 논의되어야 할 Consistency를 비롯하여 Protection에 대한 이야기까지 해볼 생각이다.

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

[OS] Memory Management Scheme  (8) 2013.06.30
[OS] File System (Protection)  (1) 2013.05.18
[OS] File System  (4) 2013.05.17
[OS] Deadlock Detection  (2) 2013.02.03
[OS] Deadlock Avoidance (Banker's Algorithm)  (5) 2013.02.03
Posted by 빛나유
,