[운영체제/OS] 파일 시스템
파일 시스템
컴퓨터 시스템의 편리한 사용을 위해 정보를 저장하고 관리하는 시스템
저장 장치의 물리적인 특성을 고려하여 논리적으로 저장하고 사용하는 체계
컴퓨터에서 사용되는 파일들을 다루는 운영체제의 파일 관리 체계
- 성능 판단 요소
- 소멸성(Volatility) - 파일의 추가나 삭제의 빈도수
- 활성율(Activity) - 주어진 시간에 접근한 파일 레코드의 백분율
- 크기(Size) - 저장된 정보의 양
- 파일 시스템 요구사항
- 대량의 정보를 파일로 저장할 수 있어야 한다
- 파일로 저장된 정보가 사용 중에 파괴되어서는 안 된다
- 하나 이상의 프로세스가 공동으로 사용할 수 있어야 한다
- 파일 시스템 기능
- 사용자가 파일을 생성, 변경, 제거할 수 있다
- 파일 간의 정보 전송을 할 수 있어야 한다
- 파일을 공유한다
- 여러 종류의 접근 제어 방법을 제공
- 다양한 응용 처리 수행
- 백업 및 복구 수행
- 사용자가 물리적 이름을 사용하는 대신 기호형 이름을 사용하여 자신의 파일을 참조할 수 있도록 장치 독립성 제공
FAT(File Allocation Table)
- FAT16
- 대부분의 MS 운영체제에서 호환되며 단순한 구조
- 최대
2GB
까지만 지원 - 암호화 및 압축이 불가능
- 파일명의 최대 길이는 영문 8자
- 클러스터 당 1,632KB를 할당하여 내부 단편화가 발생한다
- FAT32
- FAT16을 보강한 것으로 최대
2TB
까지 지원 - 암호화 및 압축이 불가능
- 파일명의 최대 길이는 영문 256자
- 클러스터 당 4KB를 사용하여 내부 단편화를 줄였다
- FAT16을 보강한 것으로 최대
NTFS(New Technology File System)
- 암호화 및 압축을 지원하며 대용량 파일 시스템을 지원
- 가변 클러스터 크기(512KB ~ 64KB)이며 기본값은 4KB
- 트랜잭션 로깅을 통한 복구 및 오류 수정이 가능
- Window NT 이상에서 지원
EXT(Extended File System)
- EXT
- MINIX File System을 보완하여 최대
2GB
까지 파일 시스템 크기를 지원 - 255Byte까지 파일명 지원
- 접근 제어, inode 수정, 타임스탬프 수정 등의 기능이 불가능
- 사용할수록 단편화가 심해진다
- MINIX File System을 보완하여 최대
- EXT2
- 파일 시스템은 2GB까지 볼륨 크기는
32TB
까지 지원되며 서브 디렉터리 개수 제한이 대폭 증가(32,768개) FSCK
를 사용한 파일 시스템 오류 수정을 지원- FSCK 이요한 파일 복구 시간에 많은 시간이 소요(전체 섹터를 검사하므로)
- 캐시의 데이터를 디스크에 저장 중 오류 발생 시 파일 시스템에 손상이 올 수 있다(Sync 이전 데이터 손실)
- 파일 시스템은 2GB까지 볼륨 크기는
- EXT3
- EXT2에 저널링 기능 추가 및 온라인 파일 시스템이 증대
- 파일 시스템 변경 시 저널에 먼저 수정 내용을 기록(갑작스런 다운 시 빠르게 오류 복구)
- 온라인 조각 모음이 불필요(장시간 사용 시 조각화 발생)
- 디스크 조각화를 최소화
- EXT4
16TB
까지 파일 시스템을 지원, 볼륨은 1EB(엑사바이트)까지 지원- Block Mapping 방식 및 Extends 방식을 지원
- 저널 체크섬 기능이 추가되어 안정성이 강화됨
- 하위 호환성 지원 : EXT3, EXT2
- Delayed Allocation : 디스크에 쓰이기 전까지 블록 할당을 미루는 기술로 조각화 방지에 효과적
- 온라인 조각 모음 : 조각화 방지를 위한 커널 레벨의 기술
- Persistent Pre-Allocation : 파일 전체만큼의 공간을 사전 할당, 스트리밍, 데이터베이스 등에 유용
UFS(Unix File System)
- VTOC 디스크 레이블 : 각 파티션의 기본 정보
- 부트블록 : 부트스트랩에 필요한 파일들
- 프라이머리 슈퍼블록 : 데이터 블록의 개수, 실린더 그룹의 개수, 마운트 정보
- 백업 슈퍼블록 : 각 실린더마다 슈퍼블록에 대한 복사본을 가진다
- 실린더 그룹 : 슈퍼블록, 실린더 그룹 블록, i-node 테이블, 데이터 블록을 포함
- 슈퍼블록 : 파일 시스템 크기, i-node 테이블의 크기, free 블록 리스트 등 파일 시스템 관리 정보
- 실린더 그룹 블록 : 실린더 그룹 내의 유효 블록들의 비트맵 정보나 통계 정보
- I-node 테이블 : 파일에 대한 중요한 정보, 파일 크기, 위치, 유형, 사용 허가권, 날짜 정보
- 데이터 블록 : 실제 데이터가 저장되는 공간
파일 구조
순차 접근 파일(Sequential Access File)
입력되는 데이터의 논리적인 순서에 따라 물리적으로 연속적인 위치에 기록하는 파일 방식
- 저장 매체의 효율이 높다
- 물리적으로 연속적인 저장이 되기 때문에 접근 시간이 가장 빠르다
- 특정한 데이터를 검색하는데 비교 횟수가 많아지므로 검색 시간이 느리다
- 저장 정보를 따로 구성하지 않아도 되므로 공간의 낭비가 없다
- 구현이 쉽기 때문에 어떤 매체라도 쉽게 사용 가능
- 대화식 처리보다 일괄 처리에 적합
- 순차 파일은 테이프를 모형화한 것이다
직접 접근 파일(Direct Access File)
데이터 내의 키 필드를 해싱 사상 함수에 의해 물리적인 주소로 변환하여 데이터를 기록하거나 검색하는 방식의 파일
- DASD(Direct Access Storage Device)의 물리적 주소를 통하여 직접 액세스
- 특정 레코드를 검색하기 위하여 키와 보조 기억 장치 사이의 물리적인 주소로 변환할 수 있는 사상 함수(Mapping Function)가 필요
- 해싱 사상 함수를 사용하므로 검색 속도가 가장 빠르다
- 한 번 파일을 개방하면 읽거나 쓰기를 자유롭게 가능
- 어떤 레코드라도 평균 접근 시간 내에 접근 가능
- 키 변환법에 따라 공간의 낭비를 초래할 수 있다
- 일반적으로 디스크 기억 장치에 많이 사용
색인 순차 접근 파일(ISAM, Indexed Sequential Access File)
순차 파일과 직접 파일에서 지원하는 편성 방법이 결합된 형태로 순차 처리와 직접 처리가 모두 가능한 방식
- 디스크 기억 장치에 많이 이용
- 각 레코드는 레코드 키 값에 따라 논리적으로 배열
- 시스템은 각 레코드의 실제 주소가 저장된 인덱스를 관리한다
- 순차 접근과 직접 접근을 병행할 수 있기 때문에 융통성이 우수
- 레코드를 추가 및 삽입하는 경우, 파일 전체를 복사할 필요가 없다
- 실제 데이터 처리 외에 인덱스를 처리하는 추가적인 시간이 소모되므로 파일 처리 속도가 느리다
- 인덱스를 저장하기 위한 공간과 오버플로 처리를 위한 별도의 공간이 필요하므로 기억 공간의 낭비가 있다
- 파일을 구성하는 블록의 번호는 절대 블록 번호여야 사용자가 자신의 파일이 아닌 부분에 접근하는 것을 방지할 수 있다
- 파일이 정렬되어 있어야 하므로 추가, 삭제가 많으면 효율이 낮아진다
- 삽입, 삭제가 많아지면 파일에 대한 재편성이 이뤄져야 한다
인덱스와 순차 데이터 파일을 구성하는 방법에 따라 정적 인덱스 방법과 동적 인덱스 방법으로 구분되며, 탐색 횟수를 줄이기 위해서 다단계 인덱스를 사용
- ISAM(Index Sequential Access Method)
데이터 파일에 레코드가 삽입되거나 삭제될 때 인덱스의 내용은 변하지만 인덱스 구조 자체는 변경되지 않는 방법으로 정적 인덱스 방법이라고도 한다- 기본 데이터 구역(Prime Data Area) : 실제 데이터가 기록된 구역
- 3단계 색인 구역(Index Area)
- Master Index : 실린더 색인 구역의 정보가 많을 경우 그것을 일정한 크기의 블록으로 구성하는데 이 때 해당 레코드가 어느 실린더 색인 구역에 기록되어 있는 지를 기록하는 색인
- Cylinder Index : 각 트랙 색인의 최대키 값과 해당 레코드가 기록된 실린더의 정보가 기록되는 색인으로 한 파일당 한 개씩 만들어진다
- Track Index : 처리할 레코드가 실제로 어느 트랙에 기록되어 있는지를 판별하는 구역
- 오버플로 구역(Overflow Area)
- Cylinder Overflow : 각 실린더마다 만들어지는 오버플로 구역으로 해당 실린더의 기본 구역에서 오버플로된 데이터를 기록
- Independent Overflow : 실린더 오버플로 구역에 더 이상 오버플로된 데이터를 기록할 수 없을 때 사용할 수 있는 예비 공간으로 실린더 오버플로 구역과는 별도로 만들어진다
- VSAM(Virtual Storage Access Method)
인덱스나 데이터 파일을 블록으로 구성하고 각 블록에는 추가로 삽입될 레코드를 감안하여 빈 공간을 미리 예비해두는 방법으로 동적 인덱스 방법이라고도 한다- 제어 구간(Control Interval) : 데이터 레코드가 저장되는 부분
- 제어 구역(Control Area) : 몇 개의 제어 구간을 모아 놓은 구역
- 순차 세트(Sequence Set) : 제어 구역에 대한 인덱스를 저장하는 구역
- 인덱스 세트(Index Set) : 순차 세트의 상위 요소
파일 제어 블록(FCB, File Control Block, File Descriptor)
파일을 관리하기 위해 운영체제가 필요로 하는 정보를 갖고 있는 제어 블록으로 파일마다 독립적으로 갖고 있다. 프로세스가 필요에 따라 파일을 Open하면 FCB의 항목은 주기억 장치로 옮겨진다. FCB는 운영체제 시스템에 따라 다른 자료 구조를 가질 수 있다
- 파일명
- 보조 기억 장치의 파일 위치
- 파일의 구조
- 보조 기억 장치 유형
- 접근 제어 정보
- 파일 유형
- 제거 시기
- 생성 날짜, 시간
- 제거 날짜
- 최종 수정 날짜
- 접근 횟수
파일의 디스크 공간 할당과 회수
파일의 데이터를 디스크에 물리적으로 저장하고 삭제하는 방법을 의미
연속 블록 할당(Contiguous Block Allocation)
물리적으로 연속적인 공간에 저장되고 저장할 크기를 미리 지정하는 방식으로 파일마다 크기가 다르고 추가, 삭제가 빈번히 발생할 경우에 단편화 현상이 많이 발생한다.
따라서 디스크 활용을 최대화하기 위한 통합, 집약, Garbage Collection 필요
- 파일의 크기보다 큰 연속 공간이 없을 경우에는 파일을 생성할 수 없다
- 다중 프로그래밍에 적용하기 어렵다
- 가상 기억 장치를 응용하여 사용할 수 없다
- 용적률이 줄어든다
불연속 블록 할당(링크 블록 할당)
디스크 공간을 일정한 길이를 갖는 단위(섹터/블록)로 나누어 할당하는 기법. 분할된 영역은 독립적으로 취급되며 파일의 데이터들은 분할된 영역에 순차적, 분산적으로 저장할 수 있는 방법이다. 분할 저장된 파일의 각 데이터들은 파일 Open 시에 연결된 정보를 이용해 사용된다.
실제 데이터를 저장하는 공간 외에 분할된 정보와 파일의 연결된 데이터 정보를 저장해야 하는 영역이 필요하므로 부가적인 저장 공간이 연속 블록 할당보다는 많이 사용되고 그에 따른 구현 방법도 복잡하다.
-
섹터 단위
디스크 섹터 단위로 파일의 데이터가 분산되어 저장되며 각 섹터는 연결 리스트 구조 형태로 연결. 파일의 크기가 커지면 비어있는 섹터를 사용하고 작아지면 사용하지 않은 섹터를 반납한다 -
블록 단위
- 블록 체인 기법 : 여러 개의 섹터를 묶은 블록을 체인처럼 연결한 방식
- 인덱스 블록 체인 기법 : 인덱스에 블록의 주소를 링크시켜 사용 - Unix
- 블록 단위 파일 사상 기법 : 파일 정보의 해당 블록을 사상시켜 연결하여 사용한다 - Windows, MS-DOS
- 파일의 크기보다 큰 연속 공간이 없을 경우라도 파일을 생성할 수 있다
- 다중 프로그래밍에 유용하게 사용
- 가상 기억 장치를 응용하여 사용
- 용적률이 좋아진다
- 액세스 시간이 증가한다
디렉터리
파일 시스템 내부에 있는 기능으로 디스크 내에 존재하는 많은 파일을 쉽게 사용(저장/검색/관리)할 수 있도록 하는 조직화된 기법
단(일) 단계 디렉터리
- 디렉터리 시스템에 보관된 모든 파일의 정보를 포함해야 한다
- 파일이 같은 디렉터리 내에 있어야 하므로 유일한 파일명으로 작성해야 한다
- 파일명의 길이를 제한한다
2 단계 디렉터리
- 중앙에 마스터 디렉터리가 존재하며 그 아래 사용자 디렉터리가 있는 구조
- 다른 사용자와의 파일 공유가 어렵다
- 파일명의 길이가 길어 사용하기 매우 어렵다
- 2단계 이상으로 깊어지면 트리 구조 디렉터리가 된다
트리 구조 디렉터리
- 하나의 루트 디렉터리와 여러 개의 부 디렉터리로 구성
- 부 디렉터리는 그 하위로 또 다른 디렉터리를 구성할 수 있다
- 각 디렉터리의 생성과 파괴가 용이
- 동일한 이름의 여러 디렉터리 생성이 가능
- Unix, MS-DOS, Windows 운영체제에서 사용
비순환(주기) 그래프 디렉터리
- 기본적으로 트리 구조와 유사하나 사이클을 허용하지 않는다
- 하나의 파일이나 디렉터리를 상위 디렉터리에서 공유할 수 없다
- 링크 수만큼 파일을 공유하고 있으며 링크 수가 0이면 완전히 제거할 수 있다
- 하나의 파일을 여러 사용자가 공유하기 때문에 삭제 시 문제점이 많이 발생
- 융통성이 있으며 기억 공간을 절약할 수 있으나 복잡하다
- 공용된 파일이나 디렉터리는 물리적으로 한 개만 존재한다
- 하나의 파일이 다수의 이름으로 존재할 수 있다
- 공유하고 있는 파일 제거 시 Dangling Pointer(사용할 수 없는 해제된 주소를 가리키는 것)가 발생할 수 있다
- Unix 운영체제에서 사용
일반 그래프 디렉터리
- 사이클을 인정하므로 파일 접근이 용이하다
- 그래프 탐색 알고리즘이 간단
- 하나의 파일이나 디렉터리를 상위 디렉터리에서 공용할 수 있다
- 상위 파일이나 디렉터리를 자신의 파일이나 하위 디렉터리로 구성할 수 있다
- 파일을 제거하기 위한 Garbage-Collection을 위한 참조 계수기가 필요
댓글남기기