반응형

44_디렉토리 구조 (Directory Structure)

 

디스크는 파일 시스템으로 사용 될 수 있다. 사용에 따라 하나의 디스크에 여러 개의 파일 시스템을 사용하거나 파일 시스템으로 일부분을 사용하고 나머지 부분은 스왑 공간이나 포맷되지 않은(raw) 디스크 공간으로 사용한다. 이러한 공간을 파티션(partition), 슬라이스(slice) 등 다양하게 부르기도 한다.

 

파일 시스템은 이러한 부분에 각각 생성될 수 있으며 각 부분은 볼륨(volume)이라고 불리는 좀 더 큰 구조를 형성하기 위해 합쳐질 수 있으며 여기에도 파일 시스템이 생성될 수 있다.

 

각 볼륨은 논리적인 가상 디스크(virtual disk)로 취급 될 수 있으며 볼륨은 한 개 이상의 시스템이 부팅되고 실행 될 수 있도록 여러 개의 운영체제를 저장할 수 있다. 파일 시스템을 포함하고 있는 각 볼륨은 시스템에 존재하는 파일에 대한 정보를 가지고 있어야 한다. 이 정보는 장치 디렉토리, 컨텐츠 볼륨 테이블의 항목에 저장 된다.

 

디렉토리의 연산은 다음과 같이 요약 할 수 있다.

  • 파일 찾기 : 특정 파일을 찾기 위하여 디렉토리를 탐색할 필요가 있다.
  • 파일 생성 : 새로운 파일들을 생성하여 디렉토리에 첨가 한다.
  • 파일 삭제 : 더 이상 필요하지 않은 파일들을 디렉토리에서 삭제 한다
  • 디렉토리 나열 : 디렉토리에 존재하는 파일들을 나열하고 파일에 대한 디렉토리 항목의 내용을 보여 준다.
  • 파일의 재명명 : 파일 이름을 변경할 수 있어야 한다.
  • 파일 시스템 순회(traverse) : 파일 시스템의 여러 디렉토리를 순회 하면서 파일들을 볼 수 있게 해주는 기능

 

[1단계 디렉토리(Single Level Directory)]

모든 파일이 다 같인 한 개의 디렉토리 밑에 있는 개념으로 같은 디렉토리에 모든 파일이 존재 하므로 각 파일은 유일한 이름을 가져야 한다. 따라서 다수의 사용자에게 제약이 크다.

 

 

[2단계 디렉토리(Two Level Derictory)]

각 사용자는 자신만의 사용자 파일 디렉토리(User File Directory, UFD)를 가지고있으며 UFD는 비슷한 구조를 가지고 있지만 각 디렉토리에는 오직 한 사람의 파일만을 저장 한다.

 

 

사용자 작업이 시작되거나 시스템에 사용자가 로그인 등을 통해 접속하게 되면 시스템은 마스터 파일 디렉토리(Master File Directory, MFD)를 먼저 탐색 한다. MFD는 사용자 이름이나 계정 번호로 색인되어 있고 각 항목은 그 사용자의 UFD를 가리키고 있다.

 

2단계 디렉토리 구조에서 파일이름이 충돌하는 문제는 어느 정도 해결하였으나 한 사용자의 UFD를 다른 사용자가 접근을 할 수 없기에 파일을 공유해서 사용하는 경우는 공유가 불가능 하다. 접근을 허용하려면 한 사용자가 다른 사용자의 디렉토리에 있는 파일을 지칭 할 수 있어야 한다.

 

 

[트리 구조 디렉토리(Tree Structure Directory)]

2단계 구조를 2 트리 구조라 부르듯이 여러 단계로 확장하는 일반적인 방법의 임의의 높이를 갖는 트리 구조 이다. 일반 사용자들에게 자신의 서브디렉토리(subdirectory)를 얼마든지 만들 수 있게 해 준다. 트리는 가장 일반적인 디렉토리 구조이다.

 

 

경로 이름에는 절대 경로 이름(absolute path name)과 상대 경로(relative path name) 두 가지가 있으며 절대 경로는 루트에서부터 지정된 파일까지의 경로가 명시된 것을 말하며 상대 경로는 현재 디렉토리 기준으로 목적하는 파일까지의 경로를 지칭한다.

 

[비순환 그래프 디렉토리(Acyclic Graph Directory)]

트리 구조는 파일 또는 디렉토리의 공유를 허용하지 않는다. 비순환 그래프는 디렉토리들이 서브디렉토리들과 파일들을 공유할 수 있도록 허용하는 구조로 똑같은 파일이나 서브디렉토리가 서로 다른 서브디렉토리에 있을 수 있다. 비순환 그래프는 트리 구조 디렉토리 방식을 일반화한 것이다.

 

 

파일을 공유하는 방법에는 링크(link)라 불리는 새로운 디렉토리 항목을 만드는 것과 디렉토리들이 동일한 항목 내용을 복사해서 가지고 있는 방법이 있다. 후자의 경우에는 일관성에 문제가 발생한다. 링크의 경우는 다른 파일이나 서브디렉토리를 가리키는 포인터를 가지고 참조 한다. 디렉토리를 검색할 때 디렉토리 항목이 링크로 표시되어 있다면 실제 파일 이름을 링크 정보에 포함되어 있다. 실제 파일에 대한 경로 이름을 사용함으로써 링크를 해석(resolve) 한다.

 

 

[일반 그래프 디렉토리(General Graph Directory)]

비순환 그래프 트리 구조에 있어서 중요한 문제점은 순환이 발생하지 않도록 어떻게 보장하느냐는 것이다. 2단계 디렉토리부터 시작해서 사용자가 서브디렉토리를 생성하면 트리 구조가 형성된다. 단순히 새로운 파일이나 디렉토리를 기존의 트리 구조 디렉토리에 추가하는 것은 트리 구조의 성질을 유지하지만 기존의 트리에 새로운 링크를 추가하면 트리 구조는 파괴되고 일반적인 그래프 구조가 될 수 있다.

 

 

비순환 그래프의 장점은 파일을 검색하고 파일에 대한 참조의 존재 여부를 결정하는 알고리즘이 비교적 간단하다는 것이다. 하지만 성능적인 측면에서 비순환 그래프의 공유 부분을 두 번 순회하는 것은 좋지 않다. 잘못 설계된 알고리즘은 계속 탐색하고 종료하지 못하는 무한 루프에 빠질 수도 있다. 한 가지 해결책은 한 번에 검색 할 수 있는 디렉토리의 숫자를 임의로 제한하는 것이다.

 

파일을 삭제 또한 마지막 참조가 삭제되고 디스크 공간이 재할당 될 수 있을 때를 결정하기 위해 가비지 컬렉션 기법을 사용해야 한다. 그러나 디스크 기반의 파일 시스템에서 가비지 컬렉션이 존재하면 시간을 매우 많이 소모 하므로 잘 사용하지는 않는다. 가비지 컬렉션은 그래프에 순환이 생길 경우에만 필요하기 때문에 비순환 그래프는 다루기가 훨씬 쉽다. 새로운 링크가 디렉토리 구조에 추가될 때 순환이 생기지 않도록 하는 것이 주된 일이다.

 

새로운 링크가 순환을 검색하는 방법은 디렉토리를 탐색하는 도중에는 링크를 검색하지 않는 것이. 순환도 피할 수 있고 추가적인 오버헤드도 발생 하지 않는다.

 

 

[참고자료]

Operating System Concepts / 홍릉과학출판사

 

반응형

+ Recent posts