[1] 개요
- 파일 시스템 = 파일 집합체 + 디렉터리 구조
- 관련된 정보를 포함하는 실제적인 파일들의 집합체이다.
- 시스템 내의 모든 파일에 대한 정보를 제공하는 디렉터리 구조이다.
- 파일 시스템은 OS가 관리하며, 파일과 폴더를 생성할 수 있는 시스템이다.
File
- 정보의 집합체, 프로그램이나 데이터로 구성된다.
- 작성자에 의해 의미가 정의된 비트, 바이트, 행, 레코드들의 연속체이다.
- 파일의 이름, 형태, 작성 시기, 작성자, 길이 등의 속성 정보를 포함한다.
Format
- 목적은 파일시스템을 디스크에 설치하는 것이다.(원래는 모두 지우는 용도로 알고 있음)
- 윈도우 전용 파일 시스템 종류 : FAT32, NTFS, EXFAT
- SSD,HDD는 포맷을 안 하면 못 쓰지만, USB는 기본적으로 FAT32로 포맷이 되어 있어서 포맷이 필요없다.
[2] 파일 시스템 기능
- 파일의 생성, 수정, 삭제 방법과 파일 공유를 위한 적절한
접근 제어 방법(판독, 기록, 수행 등)을 제공
한다.
- 사용자의 응용 분야에 적합한 형태로 파일의 구성 방법을 제공한다.
- 백업(Backup) 및 복구(Recovery) 기능을 제공한다.
- 사용자와 장치 간의 독립성(Device Independence)을 유지하기 위해 기호화된 이름(Symbolic Name) 사용 방법을 제공한다.
- 정보 보호와 비밀 보장이 가능한 암호화(Encryption)와 복호화(Decryption)기능을 제공한다.
- 사용자에게 친숙한 인터페이스(User Friendly Interface)를 제공한다.(Ex-파일 탐색기)
[3] 파일의 구조
- 파일을 구성하는 레코드들(파일의 집합)이 보조 기억장치에 배치되는 방법이다.
- 파일에 대한 접근 방법 및 파일 I/O 처리 속도와 밀접한 연관성이 있다.
1. Sequential File 구조
- 가장 단순한 방법으로, 일괄 처리에서 주로 사용한다.
- 논리적인 레코드(파일의 내용을 구성하는 단위)를 물리적인 순서에 따라 순차적으로 저장하고 검색한다.
- 순차접근 기억장치(SASD : Sequential Access Storage Device)에 저장한다.
- 순차 접근이 가능한 자기 테이프를 모형화한 구조이다.
장점 : 다음 레코드에 대한 빠른 접근이 가능하고, 프로그래밍이 쉽다.
단점 : 파일에 저장된 레코드 순서와 다른 순서로 레코드 검색 시 프로그램의 접근 속도 저하, 또한 새로운 레코드 삽입/삭제 시 많은 시간이 소요된다.
위 사진은 자기테이프이다. 순차적으로 저장하기 때문에 중간에 삽입하게 되면 뒤의 레코드들의 뒤로 다 밀어야 한다. 자기테이프를 쓰다보니 어쩔 수 없이 순차적으로 저장하는 방법을 썼다.
2. Direct File 구조
- 다른 레코드를 참조하지 않고 임의 레코드를 직접 접근이 가능하다.(트랙과 섹터 정보만 알면 바로 접근 가능)
- 특정 응용 분야에 적합한 순으로 레코드를 직접 기억장치에 저장이 가능하다.
- 디스크와 같은 직접 접근 기억장치(DASD:Direct Access Storage Device)에 저장된다.
- HDD/SSD만 사용가능하고, 자기테이프는 사용불가하다.
장점 : 다른 레코드에 영향을 주지 않고 특정 레코드의 검색, 삽입, 수정, 삭제가 용이하다.
단점 : 레코드 키 값의 순서에 의한 순차 검색이 어렵다.
3. Indexed Sequential File 구조
- 직접 파일에서 순차 검색의 단점을 보완한 것으로, 순차 및 직접 접근을 모두 처리할 수 있는 파일 구조이다.
- 데이터 저장 영역 이외에 레코드의 키 값을 모은 색인 블록 영역이 존재한다.
- 레코드는 순차적으로 접근될 수도 있고, 시스템에 의해 관리되는 색인 블록의 검색을 통해 직접 접근이 가능하다.
- 보통 디스크와 같은 직접 접근 기억장치(DASD)에 저장된다.
장점 : 융통성이 많고 검색 성능이 우수하며, 새로운 레코드 삽입, 삭제가 용이하다.
단점 : 파일 구조의 복잡성이 증가하여 설계 시 고려할 사항이 많고, 별도의 색인 블록 영역 관리가 필요하다.
[4] 파일 공간의 할당과 회수 방법
- 파일을 보조기억장치에 저장할 때 파일을 어떻게 할당할 것인가에 대한 방법으로, 얼마나 빠르게 접근할 수 있을지를 결정하게 된다.
- 잦은 할당과 회수는 보조기억장치 공간의 단편화를 발생시킨다. 따라서 주기적인 집약(compaction)이 필요하다.
할당 방법
(1) Contiguous Allocation Method
- 파일들이 보조기억장치 내의 연속적으로 인접된 공간에 할당된다.
- 파일 디렉터리에서는 각 파일에 대한 시작주소 및 파일 길이 정보를 유지한다.
- 새로운 파일 생성을 위해서는 필요한 공간의 크기를 미리 명시해야 한다.
- 충분한 기억 공간 확보를 위하여 주기적인 집약이 필요하다.
장점
연속하는 논리적 블록들에 대한 빠른 접근(검색)이 가능하다.
단점
원하는 만큼의 기억 공간이 확보되지 않으면 파일이 생성되지 못한다. (+큰 파일 저장 못함)
(2) Noncontiguous Allocation Method
연속 할당 방법의 단점인 파일 크기 문제와 가용 공간 단편화 문제를 해결한 방법으로, 연결 리스트(Linked List)와 색인 블록(Indexed Block)기법이 있다.
1. Linked List Method
- 동일 파일에 속해 있는 블록들이 서로 연결 리스트의 형태를 취하면서 다른 것과의 연결을 위한 주소 포인터를 가지고 있다.
- 디렉터리에는 해당 파일의 시작 주소 및 마지막 주소에 대한 포인터 정보를 유지한다.
단점
- 연속된 블록들의 검색에 긴 시간이 요구된다.
- 연결 리스트 구조를 유지하는데 필요한 시간이 추가적으로 소요된다.
- 연결된 리스트 내에 있는 포인터 정보는 파일 데이터를 위한 가용 공간을 감소시킨다.
OS가 상황에 따라 적절하게 주소를 할당하지만, 연속할당보다 속도가 느리다.
2. Indexed Block
각 파일마다 색인 블록을 두고, 각 파일의 블록 항목들에 대한 주소 포인터 정보를 유지한다.(주소 정보를 한 곳에 모아둠)
장점
해당 블록에 대한 직접 접근이 가능하다.
단점
연결 리스트 방법보다 기억장소의 낭비를 더 초래한다. (색인 블록에서 낭비 발생)
[5] 파일의 보호
- 파일의 공유와 병행 사용을 위하여 보호 메커니즘이 필요하다.
- 물리적인 손상(신뢰성 문제)과 *부당한 접근(보호 문제)으로부터 보호해야 한다.
*부당한 접근 : 접근 허가가 없는 것을 의미한다.
보호 기법
- 파일 이름(Naming) : 파일의 이름을 알지 못하는 경우 접근이 불가하다.
- 암호(Password) : 사용자마다 서로 다른 암호를 제공하여 그 암호를 알아야만 파일을 이용할 수 있게 한다.
- 보호를 위한 작은 노력과 기억장소가 소요되고, 파일 보호가 불확실하다는 단점이 있다.(보호에 관한 정보가 파일 시스템에 존재)
- 접근 제어(Access Control)
- 사용자에 따라 접근 유형을 다르게 명시하고 OS가 접근 여부를 결정한다.
- Unix(Linux) 시스템은 세 종류의 접근 유형(read, write, execute)과 세 종류의 사용자 유형(파일 소유자, 그룹 사용자, 모든 사용자)으로 정의한다.
[6] Directory
- 디렉터리는 그 장치에 있는 모든 파일들에 대한 파일 이름, 적재 위치, 크기, 형태 등에 관한 정보를 공유한다.
- 파일 시스템 내부에 있는 많은 파일들을 조직화하는 메커니즘이다.
- 폴더랑 같은 개념이라고 생각하면 된다.
기능
- Search(탐색) : 특정 파일을 발견하기 위해서는 디렉터리를 검색하는 기능이다.
- File Create(파일 생성) : 새로운 파일들을 디렉터리에 첨가하는 기능이다.
- File Delete(파일 삭제) : 디렉터리로부터 파일을 제거하는 기능이다.
- Directory List(디렉터리 열람) : 디렉터리 항목의 내용을 보여주는 기능이다.
- Back Up(백업) : 파일들을 자기 테이프 등에 복사하는 기능이다.
디렉터리 내에 저장되어 있는 각 파일에 대한 정보
- File Name(파일명) : 기호화된 파일 이름
- File Type(파일 형태) : 다른 형태의 파일을 사용하는 시스템들을 위한 파일 형태
- Size(크기) : 파일의 크기와 허용되는 최대 크기
- Protection(보호) : 읽기, 쓰기, 처리 등을 제어하기 위한 접근 제어정보
- Usage Count(사용 횟수) : 현재 이 파일을 사용하는 프로세스들의 개수
- 시간, 날짜
Directory 구조
1. 일 단계 구조 Directory
- 가장 간단한 구조로, 모든 파일들이 같은 디렉터리 내에 위치한다.
- 같은 디렉터리 내에 파일들이 모두 상이한 이름을 가져야 한다.
- 초기에는 서브 디렉터리를 만들 수 없었다.
2. 이 단계 구조 Directory
Master File Directory
(MMD : 마스터 파일 디렉터리, 메인 디렉터리)와 User File Directory
(UFD : 사용자 파일 디렉터리)로 구성 되어있다.
- 일 단계 디렉터리의 단점인 서로 다른 사용자들 간의 파일명 혼란을 해결한다.
- MFD에 사용자 이름이 등록되고, 각 항목은 한 사람의 사용자에 대한 사용자 디렉터리를 가리킨다.
- 하지만, 사용자들 간의 파일 공유가 어렵다.
같은 이름의 파일을 만들 수 있다. 하지만 여전히 서브 디렉터리는 만들지 못한다.
3. 트리 구조 디렉터리
- 이 단계 디렉터리 구조의 일반화된 확장으로, 서브 디렉터리들을 가질 수 있다.
- 현재 사용하고 있는 구조이다.
디렉터리 삭제 방법
- 디렉터리가 비어 있다면 그 디렉터리는 간단히 삭제되지만,
비어있지 않다면 먼저 그 디렉터리 내에 있는 모든 파일들을 삭제
해야 한다.
- 디렉터리의 삭제 요구가 디렉터리 내의 모든 파일뿐 아니라 서브 디렉터리들도 제거해야 한다는 조건하에서 수행된다.
4. 비 순환 구조 디렉터리
- 트리 구조를 좀 더 확장한 것으로, 트리 구조로 된 디렉터리 시스템 중 가장 일반적인 방법이다.
- 디렉터리들이 서브 디렉터리나
파일을 공유
할 수 있도록 허용하고 cycle을 허용하지 않는다.
- 공유파일을 삭제 할 때 존재하지 않은 파일을 가리키는 포인터*
(Dangling Pointer)
가 발생할 수 있다. 이는 참조계수(Reference Counter)
를 이용하여 해결한다.
- 단순 트리 구조보다 융통성은 좋으나, 공유를 허용하기 때문에 그 구조가 너무 복잡한다.
파일과 서브 디렉터리의 공유 방법
- 비 순환 구조 디렉터리 : 일반적인 공유 방법은 Link라고 하는 새로운 디렉터리 항목을 생성한다.
- 공유 파일에 관한 모든 정보를
그대로 복사
하여 두 개의 디렉터리에 똑같은 내용의 항목을 유지한다. 그러나 공유를 하다보면 내용이 바뀔 수도 있고, 원본 파일이 무엇인지 잘 모르게 되는 일관성 문제
가 발생할 수 있다.
- 만일, 사용자1이 count 파일을 삭제하면 사용자2가 count 파일을 확인 불가능하다. 이것을 Dangling Pointer라고 하는데, 이를 해결하기 위해서 각 파일마다 참조계수를 넣는다.
- 사용자1이 count파일을 지우면 참조계수를 하나 감소시키는데 이때, 참조계수가 1 남았으니 그 파일은 지워지지 않는다. 물론 사용자1의 파일만 지워지고 사용자2의 count파일은 남아있다.
5. 일반적 그래프 구조 디렉터리
- cycle이 허용되는데,
전역 탐색 시에 Infinite Loop이 발생
할 수 있다.
- 각 디렉터리마다 불필요한 파일 제거를 위하여
Garbage Collection
이 필요하다.
- 실제로 잘 쓰이지 않는다.
book -> avi -> book -> avi ... 무한 순환이 발생한다. 따라서 book파일을 삭제하기가 어려워서 쓰레기 수집이 필요하다.
[7] 파일 시스템 예
FAT(File Allocation Table)
- IBM에서 개발한 파일 시스템으로 자주 쓰이고 있다.
- FAT12 구조는 MS-DOS 3.0까지의 파일시스템으로 현재 쓰지 않는다.
- FAT32 구조는 Windows 95, 98, Me에서 제공하고, 2TB 볼륨 디스크 지원(Windows는 32GB까지 지원), 파일 이름 256문자 지원, 4GB 파일 크기까지 지원한다. (단점 : 용량 제한)
- Ex) FAT or FAT64 구조는 4GB파일 이상 지원하고, NTFS보다 가볍다.
NTFS(New Technology File System)
- MS사에서 개발했고, 대용량의 파일을 지원한다. (안정적)
- Windows NT, Windows XP, Windows Vista, Windows 7에서 제공한다.
UFS(Unix File System)
- Unix 및 Unix 계열 운영 체제에 쓰인다.
Ext(Extended File System)
- Linux의 기본적인 파일 시스템이다.
- Ext1부터 Ext4까지 있음.