파일 시스템
- 사용자가 직접 파일을 보관하는 대신 파일 관리자를 두어 저장 장치의 관리를 맡기는 시스템
- 파일 관리자가 파일 테이블을 사용하여 파일 관리
- 사용자가 특정 파일에 접근하려면 파일 관리자로부터 파일에 접근할 수 있는 권한(키)을 획득해야 함
파일 시스템의 사용 목적
- 컴퓨터 시스템의 편리한 사용
- 정보를 저장하고 관리하는 시스템
- 논리적이고 일관성 있는 정보 저장 체계
- 저장 장치의 물리적 특성을 고려하여 논리적으로 저장해야 함
파일 시스템의 요구사항
- 대량의 정보를 파일로 저장 가능
- 파일로 저장된 정보가 사용 중에는 파괴 불가
- 하나 이상의 프로세스가 공동 사용 가능
파일 시스템의 성능 평가
구분 | 특징 |
소멸성 | 파일의 추가나 삭제의 빈도수 (정해진 시간 안에) |
활성율 | 주어진 시간에 접근할 수 있어야 함 |
크기 | 저장된 정보량 |
파일 시스템의 기능
- 파일 구성: 사용자의 요구에 따라 파일과 디렉터리를 만듦
- 파일 관리: 파일 생성, 수정, 삭제 등의 관리를 하고 수시로 조각 모음을 하여 사용자가 파일에 빨리 접근할 수 있게 함
- 접근 권한 관리: 다른 사용자로부터 파일을 보호하기 위해 접근 권한 관리
- 접근 방법 제공: 파일을 읽고 쓰고 실행할 수 있도록 사용자에게 접근 방법 제공
- 무결성 보장: 파일의 내용이 손상되지 않도록 무결성 보장
- 백업과 복구: 사고로부터 파일을 보호하기 위해 백업과 복구 작업을 함
- 암호화: 파일을 암호화하여 악의적인 접근으로부터 파일을 보호
블록 & 파일 테이블
- 블록: 저장장치에서 사용하는 가장 작은 단위
- 한 블록에 주소 하나가 할당됨
- 여러 개의 섹터로 구성되며 블록의 크기는 시스템마다 다름
- 파일이 여러 블록으로 나뉘면 파일 입출력 속도가 느려짐
- 큰 파일을 많이 사용할 때는 블록 크기를 크게 잡는 것이 좋음
- 파일 테이블: 파일 시스템이 파일을 관리하는 데 사용하는 커널 내의 자료 구조
- 열려 있는 모든 파일의 목록 포함
- 각 파일에 대한 정보를 파일 테이블 엔트리로 저장
- 파일 상태 플래그 (읽기, 쓰기, 추가 등)
- 파일의 현재 위치
- 동적 i-node에 대한 포인터
- 파일 저장: 파일 시스템은 파일을 여러 블록으로 나누어 저장
- 파일 접근: 파일 테이블은 각 파일이 어떤 블록에 저장되어 있는지에 대한 정보를 관리
- 데이터 검색: 사용자가 파일을 요청하면, 시스템은 파일 테이블을 참조하여 필요한 블록을 찾아 데이터를 검색
- 효율적인 관리: 블록 단위의 저장과 파일 테이블을 통한 관리를 결합하여 파일 시스템은 효율적으로 데이터를 저장하고 접근할 수 있음
파일 분류
- 실행 파일: OS가 메모리로 가져와 CPU를 이용하여 작업을 하는 파일
- 데이터 파일: 실행 파일이 작업하는 데 필요한 데이터를 모아놓은 파일
파일 이름
- 사용자 입장에서 어떤 응용 프로그램이 사용하는 데이터인지 구분
- 데이터의 종류를 구분하기 위해 확장자를 사용
- 파일 확장자는 3자 이하가 대부분이지만 더 긴 확장자도 있음
- 파일 이름은 현재 경로 이름을 포함하여 최대 255자
- 파일 이름에는 영문자, 숫자, 붙임표, 밑줄, 마침표를 주로 사용
연결 프로그램
- 데이터 파일을 더블클릭하면 실행되는 해당 파일을 사용하는 응용 프로그램
- 파일의 확장자를 바꿔도 내용은 유지되므로 적합한 연결 프로그램 필요
파일 속성
- name: 파일 이름
- type: 파일 종류
- size: 파일 크기
- time: 파일 접근 시간
- location: 파일 위치
- accessibility: 파일 접근 권한
- owner: 파일 소유자
파일 헤더
- 파일 테이블에서 관리하며 파일의 이름, 종류, 크기, 시간, 접근 권한 등과 같은 일반적인 내용과 파일이 저장장치의 몇 번째 블록에 있는지에 대한 정보를 가지고 있음
- 고유 헤더: 데이터 파일에는 응용 프로그램이 필요로 하는 고유 헤더가 따로 달려 있는데, 파일의 버전 번호, 크기, 특수 정보 등 응용 프로그램이 필요로 하는 정보가 있음
파일 자체를 변경하는 작업
- open: 파일 열기
- close: 파일 닫기
- create: 새로운 파일 생성
- remove: 파일 이동
- copy: 파일 복사
- rename: 파일 이름 변경
- list: 파일 나열
- search: 파일 검색
파일 내용을 변경하는 작업
- open(): 파일 열기
- create(): 새로운 파일 생성
- close(): 파일 닫기
- read(): 파일 내용 읽기
- write(): 파일에 새로운 내용 작성
- update(): 파일 내용 중 일부 변경
- insert(): 파일에 새로운 내용 추가
- delete(): 파일 내용 중 일부 제거
파일 시스템 액세스 방법
순차 파일 구조
- Sequential File Structure
- 이동 디스크: 탐색 시간 + 회전 지연 + 전송 시간
장점
- 모든 데이터가 순서대로 기록
- 저장 공간에 낭비되는 부분이 없음
- 단순한 구조 (테이프, 플로피디스크, 메모리를 이용한 저장장치에도 적용)
- 순서대로 데이터를 읽거나 저장할 때 매우 빠르게 처리됨
단점
- 파일에 새로운 데이터를 삽입하거나 삭제할 때 시간이 많이 걸림
- 특정 데이터로 이동할 때 직접 접근이 어려워 앞에서부터 순서대로 움직여야 하기 때문에 데이터 검색에 부적합
인덱스 파일 구조
- Index File Structure
- 순차 파일 구조에 인덱스 테이블을 추가하여 순차 접근과 직접 접근이 가능
- 현대의 파일 시스템은 인덱스 파일 구조
- 파일을 저장할 때는 순차 파일 구조로 저장
- 파일에 접근할 때는 인덱스 테이블을 보고 원하는 파일에 직접 접근
직접 파일 구조
- Direct File Structure
- 저장하려는 데이터의 특정 값에 어떤 관계를 정의하여 물리적인 주소로 바로 변환하는 파일 구조
- 특정 함수를 이용하여 직접 접근이 가능한 파일 구조
- 이때 사용하는 함수를 해시 함수라고 함
장점
- 해시 함수를 이용하여 주소를 변환하기 때문에 데이터 접근이 매우 빠름
단점
- 직접 파일 구조를 제대로 작성하려면 해시 함수의 선정이 매우 중요한데, 전체 데이터가 고르게 저장될 수 있는 해시 함수를 찾기가 어려움
- 해시 함수를 잘 찾았다고 하더라도 저장 공간이 낭비되는 문제
디렉터리
- 장치 디렉터리: 장치에 있는 모든 파일들에 대한 파일 이름, 적재 위치, 크기, 형태 등에 관한 정보를 가짐
- 디렉터리 구조: 파일 시스템 내부에 있는 많은 파일들을 조직화하는 메커니즘
디렉터리에서 실행되어야 할 기능
- 탐색: 특정 파일을 발견, 디렉터리를 찾는 기능
- 파일 생성: 새로운 파일들을 생성하는 기능
- 파일 삭제: 파일이 더 이상 필요 없을 때 디렉터리로부터 삭제하는 기능
- 디렉터리 리스트: 디렉터리의 내용을 보여줄 수 있어야 하고, 그 리스트 내의 각 파일에 대한 디렉터리 항목의 내용을 보여줄 수 있어야 하는 기능
- 백업: 만약의 경우를 대비하여 일반적으로 파일들을 복사하여 저장하는 기능
디렉터리 내의 파일 정보
- 파일명: 기호화된 파일의 이름
- 파일 형태: 각기 다른 형태의 파일이 사용되는 시스템들을 위한 파일 형태
- 위치: 장치에서의 파일 위치를 가리키는 포인터
- 크기: 파일의 크기와 허용되는 최대 크기
- 보호: 읽기, 쓰기, 처리 등을 제어하기 위한 접근 제어 정보
- 사용 횟수: 현재 이 파일을 사용하고 있는 프로세스들의 개수
- 시간, 날짜, 프로세스 식별: 파일의 생성과 수정 및 프로세스를 위해 보관되며, 보호와 사용 모니터링에 유용
디렉터리 구조
1단계 구조 디렉터리
- 모든 파일들이 같은 디렉터리 내에 위치
- 모두 상이한 이름을 가져야 하므로 상당한 제약 조건이 따름
2단계 구조 디렉터리
- 사용자 파일 디렉터리(UFD, User File Directory)와 마스터 파일 디렉터리(MFD)로 구성
- MFD에는 사용자의 이름이 등록되어 있고, 각 항목은 한 사람의 사용자에 대한 사용자 디렉터리를 가리킴
- 각 사용자는 자신의 UFD를 가지고, 각 사용자 디렉터리는 오직 한 사용자 파일만을 기술
- 1단계 구조 디렉터리의 단점인 서로 다른 사용자들 간의 파일명의 혼란을 해결
트리 구조 디렉터리
- 임의 높이 트리
- 2단계 구조 디렉터리의 구조 확장을 위해 일반화된 방법
- 사용자들이 자신의 서브디렉터리들을 생성하게 하고 그것에 따라 자신의 파일을 구성하도록 하는 것
- 트리는 루트 디렉터리를 가지고 시스템 내의 모든 파일들은 유일한 경로 이름을 가짐
- 경로 이름: 루트로부터 모든 서브디렉터리를 거쳐 지정된 파일까지 이르는 경로
- 절대 경로 이름: 루트에서 시작하여 해당 파일이나 서브디렉터리에 이르는 경로 상의 모든 디렉터리 이름을 정의
- 상대 경로 이름: 현재 디렉터리에서부터의 경로를 정의
- 디렉터리가 비어 있다면, 그 디렉터리는 간단히 삭제 가능
- 디렉터리가 비어 있지 않다면, 사용자가 먼저 그 디렉터리 내에 있는 모든 파일들을 삭제해야 함
- 디렉터리의 삭제 요구가 디렉터리 내의 모든 파일뿐만 아니라 서브디렉터리들도 제거해야 한다는 조건하에서 수행
비순환 그래프 구조 디렉터리
- 트리 구조로 된 디렉터리 시스템 중 가장 일반적인 방법
- 비순환 그래프는 디렉터리들이 서브디렉터리나 파일을 공유할 수 있도록 허용
- 순환은 불허용
- 파일과 서브 디렉터리의 공유 방법
- 링크: 새로운 디렉터리 항목을 생성
- 공유 파일에 관한 모든 정보를 그대로 복사하여 두 개의 디렉터리에 똑같은 내용의 항목을 갖도록 하는 것 (일관성 유지 어려움)
- 트리 구조 디렉터리에서 파일이나 디렉터리의 공유 허용
- 사이클이 허용되지 않는 구조로, 구조가 복잡하고 다수의 경로가 존재
일반적 그래프 구조 디렉터리
- 비순환 그래프 구조에 사이클을 허용한 구조
- 원하는 파일로의 접근이 쉬우며, 파일 제거를 위해 참조 계수기가 필요
- 단순한 트리 구조보다 융통성은 좋으나 그 구조가 너무 복잡함
- 파일 삭제 시 공유 파일에 할당된 기억장소가 언제 해제되며 재사용할 수 있는가 하는 문제 발생
- 트리 구조의 디렉터리에 링크를 첨가시킨 일반적 그래프 구조를 디렉터리 시스템에 적용
- 순환이 허용되고 그래프 탐색(traversal) 알고리즘도 간단
- 순환이 허용됨으로써 무한 순환이 가능
- 각 디렉터리마다 불필요한 파일의 제거를 위한 쓰레기 수집을 수행
파일 시스템의 예시
- 각 저장 장치의 특성에 따라 파일 시스템의 설계가 다름
- 윈도우 - NTFS, 유닉스 - UFS, 리눅스 - Ext4
FAT
- File Allocation Table
- MS-DOS 3.0까지의 파일 시스템은 FAT12 구조
- MS-DOS 4.0의 파일 시스템은 FAT16 구조
- FAT32 파일 시스템은 윈도우, 맥, 안드로이드 등의 다양한 운영체제에서 채택
NTFS
- New Technology File System
- FAT 파일 시스템에 비해 데이터 보호와 파일 복구 면에서 많이 개선
- 대용량의 파일을 표현 가능
- 암호 기능 제공
- 윈도우 NT, 2000 뿐만 아니라 XP, 7 ~ 10에서 제공
UFS
- Unix File System
- 유닉스 및 유닉스 계열 운영체제에 쓰이는 파일 시스템
- Sun 솔라리스, 애플 OS X 등에서 UFS를 변형하여 사용
- 부트 블록, 슈퍼 블록, inode, 데이터 블록으로 구성
Ext
- Extended File System
- Ext2는 리눅스의 기본 파일 시스템
- Ext3는 Ext2 파일 시스템에 저널링(journaling) 복구 기능 추가
- 저널링: 데이터베이스에서 백업 구현의 방법
- 하나로 파일을 쓰는 작업을 수행할 때 저널이라 불리는 로그를 특정 영역에 기록한 뒤 실제 사용되는 영역에 기록
- Ext4가 발표됨으로써 현재 리눅스의 기본적인 파일 시스템으로 사용
GFS
- Google File System
- 구글은 대규모 클라우드 서비스를 제공하기 위해 구글 파일 시스템을 개발
- 구글 파일 시스템은 크게 클라이언트, 마스터, 여러 개의 청크 서버들로 구성
- 청크의 크기는 64MB이고, 파일은 장애에 대응하기 위해 고정된 크기의 청크들로 나누어져서 청크 서버에 분산되어 저장
HDFS
- Hadoop Distributed File System
- Hadoop: 대표적인 빅 데이터 기술로써 대용량 데이터 분석 처리를 위한 오픈소스 프레임워크
- 대용량 데이터를 분산시키고 저장하고 관리하는 HDFS와 대용량 데이터의 분산 병렬 컴퓨팅
- 처리를 위한 맵리듀스(Mapreduce)로 구성
- 아마존, IBM 등 클라우드 컴퓨팅 플랫폼에 기반이 되는 분산 파일 시스템으로 가장 널리 사용
- 네임 노드 서버, 보조 네임 노드 서버와 다수의 데이터 노드 서버로 구성
- 파일들은 고정된 크기의 조각(chunk)들로 나뉘어 저장
- 수백 혹은 수천 개의 저가용 하드웨어로 구성된 저장 기기에서 구현
파일의 디스크 할당
연속 할당
- 파일명 + 시작 주소 + 길이
- 파일크기만큼의 공간이 있어야 함
- 디렉터리가 단순하고, 관리 및 구현이 용이함
- 단편화 제거를 위한 주기적 압축 필요
불연속 할당
- 섹터 단위 연결 리스트, 블록 단위 연결 리스트 (블록체인)
- 파일명 + 시작 주소 + 마지막 주소 (파일명 + 블록의 시작 주소 + 블록의 마지막 주소)
- 탐색 속도는 느리나, 삽입과 삭제가 용이함
- 단편화 없음
인덱스 블록체인
- 색인 블록, 그룹핑
- 파일마다 색인 블록을 두고, 포인터로 연결
- 직접 접근 가능, 탐색 시간 빠름
- 삽입 시 색인 블록 재구성, 색인으로 인한 기억장소 낭비