본문 바로가기

OS

[OS] 파일시스템

 

파일에 대해

파일이란 저장 장치에 연관된 정보의 논리적 저장 단위이다. 장기로 보존할 수 있고 프로세스 간 공유, 다양한 응용에 맞는 내부구조를 갖는 특성이 있다.

파일에서 필드(Field)란 데이터의 기본 요소로서 단일 값을 가지는 단위이고, 레코드(Record)란 관련된 필드를 모아놓은 것으로 응용 프로그램에 의해 하나의 단위로 취급된다.


더미(Pile) 파일 :

  • 레코드는 일련의 연속적인 필드로 구성되며 생성되는 순서대로 추가되는 가장 단순한 형식
  • 더미는 일정한 구조를 가지지 않은 채 수집되는 대로 저장되는 방식
  • 레코드들은 서로 길이가 다를 수 있고, 가지고 있는 필드들의 개수나 순서도 달라 필드 이름과 값을 가져야 함
  • 데이터를 일정한 형태로 구성하기 어렵거나 데이터들의 크기나 구조가 서로 다를 때 사용하면 저장 공간을 아낄 수 있다.

순차(Sequential) 파일 :

  • 가장 일반적인 형태로서 파일은 같은 크기의 레코드들로 구성되어 있다.
  • 각 레코드는 알려진 순서로 나열된 같은 개수와 크기의 필드들로 구성된다.
  • 저장되어 있는 레코드들의 순서대로 접근하는 응용에 적합
  • 특정 레코드에 대한 읽기나 갱신이 대부분인 대화형 접근에는 효과적이지 못하다.

인덱스(Index) 순차 파일 : 

  • 순차 파일의 특성에 임의의 레코드를 빨리 접근할 수 있기 위한 파일 인덱스와 레코드의 추가를 위한 오버플로우 파일이 추가된 것이다.
  • 순차 파일의 장점을 살리면서 특 정 필드 하나를 키(Key) 필드로 한 인덱스를 이용하여 특정 레코드의 접근 시간도 줄이는 구성
  • 추가되는 레코드들은 오버플로우 파일에 모았다가 적정 시기에 원래의 순차 파일과 합병시켜 준다.

인덱스(Index) 파일 : 

  • 레코드의 모든 필드에 대해 인덱스를 만들거나 몇 개의 필드에 대해 부분 인덱스를 만들어 임의의 레코드에 대한 접근성을 높인 파일
  • 임의 레코드에 대한 빠른 접근이 요구되는 응용에 적합하고 파일 내 레코드들의 위치나 길이에도 제약 없음.

직접 (또는 해시(Hash)) 파일 :

  • 특정 필드를 키 필드로 잡는 것은 인덱스 순차 파일과 같으나 레코드들이 순차적으로 저장될 필요는 없음
  • 키 필드 값은 해싱을 통해 임의 레코드를 접근할 수 있도록 해 주는데 빠른 접근이 요구되고 한 번에 한 레코드씩 접근하는 응용에 유용하다.

파일 시스템의 구조 - 논리적 관점

 

평면 (또는 1단계) 디렉터리 구조 : 

  • 가장 간단한 구조이며 파일시스템 전체에 한 개의 디렉터리가 존재하고 모든 파일들은 이 디렉터리 내에 저장
  • 사용자가 한 명이더라도 디렉터리 안의 파일들은 서로 다른 이름을 가져야 식별이 가능

참조 : Operating System Concepts 8th

 

2단계 디렉터리 구조 :

  • 다중 사용자 시스템에서 1단계 디렉터리 구조가 갖는 파일 명 부여의 문제를 완화하기 위해 각 사용자당 하나의 디렉터리 구조를 갖게 한 구조
  • 사용자들은 각자 배정된 디렉터리에 자신의 파일을 저장 및 관리, 다른 사용자 파일 명은 신경 쓰지 않아도 됨
  • 각 사용자는 더 이상의 하부 디렉터리를 가질 수 없음.

참조 : Operating System Concepts 8th

 

트리(또는 계층) 디렉터리 구조 :

  • 루트 디렉터리라는 최상의 디렉터리가 존재하고 그 아래에 여러 개의 디렉터리와 파일들이 존재
  • 시스템 내의 모든 파일들은 고유한 경로(Path) 명을 가진다.
  • 시스템은 디렉터리의 생성, 삭제, 변경 및 복사 기능을 제공

참조 : Operating System Concepts 8th

 

비순환 그래프(Acyclic Graph) 디렉터리 구조 :

  • 다수의 사용자들에 의해 공유될 필요가 있는 파일들을 하나의 디렉터리나 서브트리에 저장하여 같이 사용하도록 할 때 유용한 구조
  • 트리 구조에서 링크(Link)라는 포인터를 사용해 임의의 디렉터리를 다른 디렉터리와 연결시켜 같이 사용
  • 사용자들이 각자의 위치에서 링크를 거쳐 동일한 디렉터리나 파일로 접근이 가능

참조 : Operating System Concepts 8th

 

일반 그래프(General Graph) 디렉터리 구조 :

  • 계층구조에 링크를 추가하다 보면 탐색을 시작한 디렉터리로 다시 돌아오는 사이클이 발생하는 구조
  • 파일의 탐색이 무한 루프(Loop)에 빠질 수도 있고 삭제되어야 할 파일이 계속 남아있을 가능성도 있다.
  • 일반 그래프 구조보다 비순화 구조로 구현하는 것이 좋다.

참조 : Operating System Concepts 8th


파일 시스템의 구조 - 물리적 관점

 

연속 할당(Contiguous Allocation) :

  • 디스크 상에서 연속된 다수개의 블록들을 동원해 파일을 저장하는 방법
  • 간단하고 순차처리에는 좋은 성능을 보이지만 디스크의 빈 공간 활용은 매우 비효율적
  • 외부 단편화 때문에 시간이 지날수록 충분한 크기의 연속된 블록을 찾기 힘듦

참조 : Operating System Concepts 8th

체인 할당(Chained Allocation) :

  • 블록들이 연속적일 필요가 없는 비연속 할당
  • 블록 크기만큼 나누어진 파일의 내용이 체인을 딸 차례로 저장되는 방식
  • 블록 단위로 할당해 체인으로 연결하기 때문에 외부 단편화가 생기지 않아 공간 활용도 우수
  • 파일이 들어있는 몇 개의 블록을 연속으로 처리할 때 처리 시간 지연

인덱스 할당(Indexed Allocation) :

  • 비연속 할당이며, 연속 할당과 체인할당에서 발생되는 문제점들을 상당 부분 해결
  • 파일 당 하나의 인덱스 블록을 사용하여 할당
  • 인덱스 블록은 각 파일에 할당된 포인터를 저장한다. 
  • 연속 할당처럼 순서대로 읽을 수도 있고 특정 부분을 바로 읽을 수도 있다. (외부 단편화 x)
  • 인덱스 블록에 할당으로 인한 저장 공간이 줄어듦


빈 블록(Free-Space) 관리

  • 비트 벡터(Bit Vector) : 

디스크 블록당 하나의 비트가 대응된 벡터를 두어 각 블록에 대해 1이면 사용 중, 0이면 빈 블록으로 판단한다. 비트 벡터는 파일 시스템에서 관리하고 빠른 검색을 위해 메모리에 두는 것이 일반적이다.

  • 리스트(List) :

디스크 상의 빈 블록들을 리스트로 연결하고 첫 번째 빈 블록에 대한 포인터를 커널이 가지도록 하는 방법이다. 리스트의 각 빈 블록은 다음 빈 블록에 대한 포인터나 블록 번호를 가지도록 한 것이다.

  • 그룹화(Grouping)

각 빈블록은 n 개의 빈 블록 번호를 가지도록 한다. 이 중 n-1개는 빈 블록의 번호이며, 나머지 하나는 다음번 n개의 빈 블록 번호를 가지고 있는 블록 번호이다.

  • 인덱싱(Indexing)

인덱스 테이블을 사용해 디스크 상의 연속된 빈 블록들 당 하나의 인덱스 항목이 설정되어 관리되는 기법이다. 빈 공간 전체가 하나의 파일로 취급된다고 볼 수 있다.


파일에 대한 접근

 

파일에 대한 접근을 제어한다는 말은 파일을 보호한다는 것과 같은 뜻이다.

예를 들어 파일에 대한 접근의 종류를 읽기(R), 쓰기(W), 실행(E), 첨부(A)로 나눈 시스템에서 R과 E만 가능하도록 하는 제어 기능이 있어야 한다.

패스워드

  • 파일마다 패스워드를 부여하고 이것을 통과했을 때 접근을 허용하는 방식
  • 패스워드를 모두 기억해야 하고, 어느 정도의 접근을 허용할지 제한을 두기 어렵다.

접근 행렬(Access Matrix)

 

용어 정리 :

  • 객체(Object) : 제어가 요구되는 대상으로, 파일을 말한다.
  • 접근 권한(Access Rights) : 지정된 객체에 대해 가능한 접근 권한을 나타낸다. <F, RE>는 파일 F에 대해 읽기와 실행의 권한을 가진다.
  • 도메인(Domain) : 같은 접근 권한을 갖는 프로세스들의 집합, 프로세스 P가 도메인 D에 속할 경우 P는 D에 적혀 있는 접근 권한을 가진다.

 

도메인 / 객체 F1 F2 F3 F4
D1 R W   WA
D2   R   E
D3 RW   E  

전역 테이블 :

  • 시스템 전체에 대한 도메인과 파일들 그리고 접근 권한을 순서대로 세 개의 쌍으로 표현하여 전역 테이블에 저장하고 사용하는 기법
  • 도메인이나 파일의 개수가 많아질 경우 테이블의 크기가 매우 커지게 되고 단순한 나열에 기반함으로써 비슷한 유형의 도메인이나 파일들을 묶어 그룹화하여 표현하기가 어렵다.

접근 리스트(Access List) :

  • 각각의 파일에 대해 도메인별로 접근권한을 리스트의 형태로 나열한 기법이다.
  • 파일 P1에 대한 리스트는 F1 = {<D1, R>, <D3, RW>의 모양이 된다.
  • 사용자가 파일을 생성하면서 도메인별로 접근 권한을 부여하고 접근 리스트에 추가하면 되므로 쉽고 자연스럽다.
  • 특정 도메인에 속한 프로세스들이 접근 가능한 파일들을 모두 찾아봐야 할 경우에는 모든 파일에 대한 접근 리스트 전부를 검색해야 하는 문제가 있다.

권한 리스트(Capability List) :

  • 이 기법은 접근 리스트와는 반대로 접근 행렬의 각각의 행을 리스트로 표현한 기법이다.
  • 각 리스트는 도메인별로 그 도메인에 속한 프로세스들이 접근 가능한 파일들과 접근 권한을 나타내게 된다.
  • 프로세스는 자신이 속하는 도메인이 정해져 있으므로 임의의 파일에 접근할 때 시스템에 의해 권한 리스트가 검색된 후 접근을 허용할지 결정된다.

락-키(Lock-key) 방식

  • 접근 행렬에서 각각이 행이 가지는 정보와 열이 가지는 정보를 비트 패턴으로 표시하여 접근 권한을 결정하는 기법이다.
  • 파일들은 각각 락(Lock)이라는 비트 패턴을 도메인들은 키(Key)라 불리는 비트 패턴의 리스트를 갖는다.
  • 임의의 도메인 D에 속하는 프로세스가 특정 파일 F에 접근할 때 F의 락들 중 하나와 D의 키들 중 하나가 반드시 일치되어야 접근이 가능하다.

 

참고 자료

  • OS? Oh Yes! , 김주균 지음

  • Operating System Concepts 8th

'OS' 카테고리의 다른 글

[OS] 디스크와 스케줄링  (0) 2020.05.11
[OS] 가상 메모리의 관리  (0) 2020.05.11
[OS] 가상 메모리 : 페이징과 세그먼테이션  (0) 2020.05.10
[OS] 메모리 관리  (0) 2020.05.10
[OS] 교착 상태(Deadlock)  (0) 2020.05.09