[운영체제] 파일 할당 - 논리적 구조
파일
(관리되는) 데이터들의 논리적 단위
파일 단위로 저장 장치에 읽고 쓰임
파일 시스템
다양한 종류의 파일들을 관리(저장, 접근 등)를 위한 시스템 유틸리티 프로그램
파일이 어떤 형태로 저장, 어떻게 접근되는가
파일이란
저장 장치에 연관된 정보의 논리적 저장 단위 = 바이트의 나열
- 특징
- 장기 보존 가능
- 프로세스들 간에 공유 가능
- 다양한 응용에 맞는 내부구조 형성
- 파일에 대한 연산 : 생성, 삭제, 열기, 닫기, 읽기, 쓰기 등
- 타입 : 텍스트파일, 이진파일 등
필드 - 데이터의 기본 요소. 단일 값을 가짐
레코드 : 관련 필드들이 모인 것. 하나의 단위로 취급
학생 레코드 -> 이름, 학번, 학과 필드로 이루어짐
파일 구성 방식
파일을 어떻게 구성할 것인가 (어떤 접근이 주로 이루어 지는지, 동시에 취할 수 없는 경우도 있음)
1. 빠른 접근 시간
2. 저장 곤간의 효율성
3. 쉬운 유지 관리 및 신뢰성

1. 더미 파일 (Pile)
레코드는 일련의 연속적인 필드로 구성되며 생성되는 순서대로 추가 되는 가장 단순한 형식
일정한 구조를 가지지 않을 채 수집되는 대로 저장되는 방식
저장될 데이터들이 크기나 구조가 서로 다를 때 사용하면 저장공간을 아낄 수 있음
전체 레코드를 검색할 때는 좋지만 대부분 적합하지 못하다.
(그대로 모아놓은 데이터 보다는 접근에 대비하여 정교하게 구성되어 있는 데이터가 더 좋을 테니까..)
2. 순차 파일 (Sequential)
가장 일반적인 형태
같은 크기의 레코드들로 구성됨.
알려진 순서로 나열된 같은 개수와 크기의 필드들로 구성된다.
"전체 레코드는 몇개?", "전체 학생은 몇명?"과 같이 전체 레코드들에 대하 ㄴ접근이 요구되는 일괄처리에 적합
하지만 특정 레코드에 대한 읽기, 갱신인 대화형 접근에는 효과적이지 못함.
3. 인덱스 순차 파일 (Index)
순차 파일 특성에 임의의 레코드를 빨리 접근 할 수 있도록 인덱스와 레코드 추가를 위한 오버플로우 파일이 추가됨.
특정 필드 하나를 Key필드로 한 인덱스를 이용해서 레코드 접근 시간을 줄임.
4. 인덱스 파일
인덱스 순차 파일에서는 키 필드로 되어 있지 않은 필드의 값으로 임의의 레코드를 접근해야 할 경우 빠른 검색을 못함.
-> 레코드르이 모든 필드에 대해 인덱스 를 만들거나 몇 개의 필드에 대해 부분 인덱스를 만든다.
인덱스만을 통해 레코드 접근이 이루어져 일괄 처리가 없고 임의 레코드에 빠른 접근을 할 때 유용하다.
(ex. 티켓 예매 시스템)
5. 직접 파일 (or 해시 파일)
특정 필드를 키 필드로 잡는 것은 인덱스 순차 파일과 같으나 레코드드링 순차적으로 저장될 필요는 없는 구조.
키 필드 값 해싱을 통해 임의 레코드를 접근할 수 있도록 해 준다.
빠른 접근이 요구되고, 한번에 한 레코드씩 접근할 때 유용하다.
파일 시스템의 구조 - 논리적 관점
논리적 구조
: 사용자에게 파일 시스템이 어떻게 보이는지에 대한 구조
디렉터리, 폴더로 파일들이 어떻게 보이는지 구조를 제공함.
1. 평면 디렉터리 구조 = 1단계 디렉터리 구조

- 파일시스템 전체에 한개의 디렉터리가 존재하고
- 모든 파일들이 이 디렉터리 내에 저장된다.
- 사용자가 한 명이더라도 디렉터리 안의 파일들은 서로 다른 이름을 가져야 식별이 가능함
- -> 사용자가 다수라면?
2단계 디렉터리 구조

- 다중 사용자 시스템에서 1단계 디렉터리 구조가 갖는 파일 명 부여의 문제를 완화하기 위해 각 사용자당 하나의 디렉터리 구조를 갖게 한 구조
- 사용자들은 각자 배정된 디렉터리에 자신의 파일을 저장 및 관리, 다른 사용자 파일 명은 신경 쓰지 않아도 됨
- 각 사용자는 더 이상의 하부 디렉터리를 가질 수 없음.
- 각 사용자는 자신들의 파일에 모두 다른 이름을 가져야함 (사용자만 나뉘고 1단계 디렉터리 구조와 동일)
트리(또는 계층) 디렉터리 구조

- 루트 디렉터리(최상의 디렉터리)가 존재하고 그 아래에 여러 개의 디렉터리와 파일들이 존재
- 시스템 내의 모든 파일들은 고유한 경로(Path) 명을 가진다.
- 시스템은 디렉터리의 생성, 삭제, 변경 및 복사 기능을 제공
- 로그인 하면 홈 디렉터리, 현재 디렉터리에서 파일작업 하게 된다.
비순환 그래프(Acyclic Graph) 디렉터리 구조

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

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