이번 포스팅에서는 UNIX의 중요한 역할 중 하나인 파일 시스템의 의미와 종류 및 구성요소에 관해 정리해보려고 한다.
파일 시스템이란 시스템에서 파일을 효율적으로 관리 할 수 있도록 하는 체제를 의미한다.
즉, 사용자의 입장에서 보이는 파일 탐색기가 내부적으로 어떻게 동작하는지 궁금하다면 컴퓨터가 어떤 종류의 파일 시스템을 사용하고 있는지 살펴보면 된다.
파일이란 시스템에서 의미 있는 정보를 담는 논리적인 단위라고 할 수 있다.
일반적인 파일의 종류로는 대표적으로 텍스트 파일과 바이너리(Binary) 파일이 있다. 텍스트 파일은 'a sqeunce of string' 으로 정의할 수 있으며, 바이너리 파일은 프로그램이 실행을 시작할 때 코어 메모리에 나타나는 단어들의 시퀀스를 의미한다.
디렉토리(Directory)는 파일 시스템에서 디스크 상의 파일들을 효율적으로 관리하기 위해 사용하는 방법을 의미한다. 디렉토리에 대해서는 아래에서 보다 자세히 살펴볼 것이다.
디렉토리는 앞서 말했듯이 파일 시스템에서 디스크 상의 파일들을 효율적으로 관리하기 위해 사용하는 방법을 의미하며, 파일 시스템의 일부분에 데이터로 저장되어 있는 형태를 띤다.
디렉토리 엔트리란 디렉토리를 표현하는 데에 쓰이는 자료구조를 의미한다. 파일 시스템에 따라서 이를 구성하는 항목이 달라지는데 일반적으로는 파일이름, 파일속성 등 파일에 대한 여러가지 정보가 저장된다.
UNIX 계열에서는 파일 이름과 i-number(a.k.a. i-node number; a pointer to the file itself)만 저장된다
각 파일은 파일의 위치 정보를 포함한 고유의 이름을 가지며, 디렉토리는 각 파일에 대해 파일명과 디스크에 저장된 실제 데이터에 대한 mapping을 제공한다.
일반적인 파일과 구별되는 디렉토리의 특징은 일반적인 프로그램에 의해 쓰여질 수 없다는 점이다. 따라서 일반적으로 (사용자 프로그램이 아닌) 시스템이 디렉토리를 관리한다.
linking
파일 시스템에서 nondirectory 파일을 관리하는 기법이다.
nondirectory 파일은 디렉토리 entry가 파일 이름과 link로 구성된다.
이러한 linking은 다른 시스템과 구별되는 UNIX의 특징인데, UNIX는 동일한 상태를 가지는 모든 파일에 대하여 link를 허용한다. 즉, 파일의 디렉토리에서 path 정보는 linking할 대상 파일을 가리키는 pointer로 구성된다.
special entry: "..", "."
모든 디렉토리는 항상 두 개의 special entry를 가진다.
UNIX에서 디렉토리 구조는 (".."와 "."를 제외한) rooted tree로 제한된다.
디바이스에 저장되지 않으며, 필요할 때마다 마운트해서 사용하는 독립적인 파일 시스템을 일컫는 말이다.
*마운트(mount) 란 특정 디바이스를 사용하기 위해 하드웨어장치와 디렉토리를 연결하는 작업을 의미한다. 예를 들어 하드웨어 중의 하나인 하드디스크의 장치명이 /dev/hda라고 한다면 이 장치명을 지정된 마운트포인트(디렉토리위치)와 연결하는 작업이 마운트이다.
마운트 시스템은 마운트 이후 파일 시스템의 rooted tree의 leaf를 마운트 시스템의 hierarchy-subtree로 대체한다.
앞서 linking에 관하여 언급하였는데, 마운트 시스템의 경우 기존 파일 시스템의 파일과 linking이 불가능하다. 이는 마운트된 파일 시스템을 시스템에서 내릴 경우 파일 시스템 상에서 더 이상 유효하지 않은 link를 처리하기 모호하기 때문에 생긴 규제이다.
파일에 대한 개념을 잘 정리할 수 있었어요!