파일 시스템이란,
- 컴퓨터에서 파일이나 자료를 쉽게 발견 할 수 있도록 유지,관리하는 방법`
- 저장매체에 있는 많은 파일을 관리하는 방법
- 커널 영역에서 동작하기 때문에, 파일을 빠르게 read, write 등 기본 기능을 수행할 수 있음
- 계층적 디렉토리 구조를 가짐
- 저장 장치에서는 파일 관리자가 파일 테이블을 사용하여 파일을 관리
+) 🧐 윈도우의 경우 FAT(File Allocation Table), 유닉스의 경우 I-node와 같은 파일 할당 테이블을 유지
파일 시스템의 역할과 목적
역할
- 파일 관리
- 보조 저장소 관리
- 파일의 무결성 매커니즘
- 접근 방법 제공
파일시스템을 개발한 목적
- 하드디스크를 효율적으로 이용하기 위해
- 하드디스크와 메인 메모리의 속도 차이를 줄이기 위해
- 파일을 관리하기 위해
파일 구조
1. 연속 할당(Contiguous Allocation)
- 각 파일에 대해 디스크 상의 연속된 블록을 할당
- 외부 단편화로 인한 디스크 공간 낭비
- 파일 크기가 계속 증가 가능
2. 연결 할당(Linked Allocation)
- 비어있는 임의의 블록부터 파일이 커지면 다른 블록을 할당하고 연결
- 외부 단편화 해결(remind : 총 메모리 공간은 충분하지만 실제 할당 가능한 공간은 부족하여 할당할 수 없는 상황)
- 순서대로 읽어야하고 포인터 저장해야해서 4바이트 이상 손실
- 포인터가 끊어지면 접근 불가
- FAT(File Allocation Table)로 해결. → 손실 시 복구 위해 이중 저장, direct access 가능
3. 색인할당(Indexed Allocation)
- 파일 당 한 개의 인덱스 블록
- 인덱스 블록은 포인터의 모음
- direct access 가능, 외부 단편화 없음
- 인덱스 블록 할당에 따른 저장공간 손실
🔗 파일 접근 방법
순차 접근(Sequential Access)
가장 간단한 접근 방법으로, 대부분 연산은 read와 write
현재 위치를 가리키는 포인터에서 시스템 콜이 발생할 경우 포인터를 앞으로 보내면서 read와 write를 진행. 뒤로 돌아갈 땐 지정한 offset만큼 되감기를 해야 한다. (테이프 모델 기반)
직접 접근(Direct Access)
특별한 순서없이, 빠르게 레코드를 read, write 가능
현재 위치를 가리키는 cp 변수만 유지하면 직접 접근 파일을 가지고 순차 파일 기능을 쉽게 구현이 가능하다.
무작위 파일 블록에 대한 임의 접근을 허용한다. 따라서 순서의 제약이 없음
대규모 정보를 접근할 때 유용하기 때문에 '데이터베이스'에 활용된다.
기타 접근
직접 접근 파일에 기반하여 색인 구축
크기가 큰 파일을 입출력 탐색할 수 있게 도와주는 방법임
🏠 디렉토리와 디스크 구조
1. Single-Level Directory
모든 파일들이 디렉터리 밑에 존재하는 형태. 서로 다른 사용자라도 같은 이름을 쓸 수 없다. 파일이 많아지거나 다수 사용자가 사용하는 시스템에서 문제가 발생할 수 있다.
2. 2-Level Directory
사용자마다 directory를 배정하는 것이다. 서로 다른 사용자가 같은 이름의 파일을 가질 수 있다. 하지만 다른 사용자의 파일에 접근해야 하는 경우에는 한계가 있다.
3. Tree Directory
Tree 형태의 계층적 directory이다. 사용자들이 자신의 서브 디렉터리를 만들어 파일을 구성할 수 있다. 한 비트를 활용하여, 일반 파일(0)인지 디렉터리 파일(1) 구분한다.
4. Acyclic Graph Directory
tree directory의 확장된 구조.
link의 개념을 사용. (포인터)
순환을 허용하지 않음.(A-> B -> A 처럼 파일 link가 연결되는 것을 순환이라고 한다.)
순환이 발생하지 않도록 하위 디렉터리가 아닌 파일에 대한 링크만 허용하거나, 가비지 컬렉션을 이용해 전체 파일 시스템을 순회하고 접근 가능한 모든 것을 표시.
5. General Graph Directory
cycle을 허용하는 directory structure이다. 하지만 순환이 허용되므로 무한 루프에 빠질 수 있다.