파일 시스템
컴퓨터에서 파일이나 자료를 쉽게 발견할 수 있도록, 유지 및 관리하는 방법
저장매체에는 수많은 파일이 있기 때문에, 이런 파일들을 관리하는 방법이다.
file
+directory
file
- 이름을 가지는 디스크에 저장되는 bytes의 집합이다.
- 비휘발성의 보조기억장치에 저장된다.
- O/S는 다양한 저장 장치를 file이라는 동일한 논리적 단위로 볼 수 있게 한다.
- Operation
create, read, write, reposition, delete, open, close
file attribute (metadata)
- 파일 이름, 유형, 저장위치, 파일사이즈, 접근권한, 시간, 소유자와 같은 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들
directory
- 파일의 메타데이터 중 일부를 보관하고 있는 일종의 특별한 파일이다.
- 그 디렉토리에 속한 파일 이름 및 파일 attribute
- Operation
search for a fiile
create a file
delete a file
list a directory
rename a file
travers the file system
file system
- O/S에서 file을 관리하는 부분
- file 및 file 의 metadata, directory 정보
- file의 저장 방법 결정
- file을 보호
Naming
- Disk상에 존재하는 File은 addressing할 수 있어야 하는 이유로 인해 외부적으로는
Text Name
을 가져야 한다.- 내부적으로는
File Indentify
를 가진다.- O/S는 File뿐만 아니라, I/O Devices에도 Naming을 적용시킨다.
Partition ( = Logical Disk)
- 하나의 물리적 디스크 안에 여러 파티션을 두는게 일반적이다.
- 여러 개의 물리적인 디스크를 하나의 파티션으로 구성하기도 한다.
- 물리적 디스크를 파티션으로 구성한 뒤 각각의 파티션에 file system을 깔거나 swapping 등 다른 용도로 사용도 가능하다.
open()
파일의 메타데이터를 메모리로 올린다.
- fd = open("/a/b") : 프로그램이 b 메타데이터 정보를 요청
- 시스템콜을 하여 CPU를 운영체제에 넘긴다.
- CPU가 root 메타데이터를 먼저 메모리에 올린다(root 메타데이터의 디렉토리는 이미 알고 있음)
- root 메타데이터를 연다
- root 메타데이터에 존재하는 a 메타데이터의 파일시스템상 위치정보로 디스크에서 a의 메타데이터를 가져와 메모리에 올린다
- a의 메타데이터를 연다
- a의 메타데이터에 존재하는 a content의 파일시스템상 위치정보로 디스크에서 a의 content 안에 존재하는 b의 메타정보를 가져와 메모리에 올린다
- b의 메타정보를 가리키는 포인터의 인덱스(파일 디스크립터) 값을 리턴
- read(fd...) : 프로그램이 b content 정보 요청(읽기)
- 읽은 내용을 사용자 프로그램(Process A)에 직접 주는게 아닌, 커널 메모리 영역(buffer cache)으로 가져온다
- 사용자 메모리영역(Process A)엔 그 내용을 카피해서 준다.
- 만약 다른 프로그램(Process B)에서 b의 content 를 요청한다면 운영체제가 buffer cache에서 전달해준다
- File System 의 Buffer cache 환경에선 운영체제가 모든 정보를 알고 있으므로(파일 시스템 접근시 시스템 콜을 통해 제어권이 CPU로 넘어오므로) LRU, LFU 알고리즘을 사용할 수 있다.
- per-process file descriptor table : 파일 디스크립터 테이블은 프로세스마다 따로 존재
- system-wide open file table : system wide 로 전체 시스템에 한개로 관리되지만 각각의 프로그램들이 파일의 offset을 프로그램 별로 관리하기 위한 공간(table)은 따로 존재
특징
- 커널 영역에서 동작
- 파일 CRUD 기능을 원활히 수행하기 위한 목적
- 계층적 디렉터리 구조를 가짐
- 디스크 파티션 별로 하나씩 둘 수 있음
역할
- 파일 관리
- 보조 저장소 관리
- 파일 무결성 메커니즘 제공
- 접근 방법 제공
역할
- 하드디스크와 메인 메모리 속도차를 줄이기 위함
- 파일 관리
- 하드디스크 용량 효율적 이용
구조
- 메타 영역 : 데이터 영역에 기록된 파일의 이름, 위치, 크기, 시간정보, 삭제유무 등의 파일 정보
- 데이터 영역 : 파일의 데이터
파일 시스템의 두 가지 접근방법
Sequential Access
file pointer
를 한 칸씩(bytes) 움직이면서 파일의 내용을 읽는다.magetic tape
과 같이 데이터를 순차적으로 접근하는 방법이다.데이터의 위치에 따라 시간이 달라진다.
Random Access (Direct Access)
file pointer
를 임의로 이동하면서 파일의 내용을 읽는다.
File Protectoin
Access Control Matrix
- Linked List 형태로 권한을 관리한다 (overhead가 크다)
Access Control list
: 파일별로 누구에게 어떤 접근 권한이 있는지 표시Capability list
: 사용자별로 자신이 접근 권한을 가진 파일 및 해당 권한 표시
- Linked List 형태로 권한을 관리한다 (overhead가 크다)
Grouping
전체 User를
owner
,group
,publiic
의 세 그룹으로 분류한다.각 파일에 대해 세 그룹의 접근 권한(rwx)을 3비트씩 표시한다.
UNIX를 포함한 대부분의 OS에서 사용한다.
Password
- 파일마다 pass word를 두는 방법이다.
- rwx마다 password를 하나씩 부여해야 하므로 관리가 어렵다.
File System Mounting
- File System은 파티션을 통해 여러개의 논리적 디스크로 분리된 하나의 물리적 디스크이다.
- 각각의 논리적 디스크에 file system이 존재한다.
- 다른 파일시스템에 접근할 경우에
mount
를 사용한다.
- disk3의 루트를 disk1의 usr 경로에 연결(mount)하여 타 파일시스템 접근이 가능하다.
Allocation File System
1. Contiguous Allocation
각 파일에 대해 디스크 상의 연속된 블럭을 할당한다.
옛날 IBM VM/CMS에서 사용했으며 동영상, 음악, VOD 등에 적합하다.
파일의 크기가 큰 애들이 흩어져 있다면 가져오는데 오래걸리지만, 모여있으면 가져오는데 시간이 적게 걸린다.
- 단점
- external fragmentatioin, hole이 발생
- 파일 생성 당시 파일의 크기를 알 수 없다.
- 즉, 어느 파일을 어느 hole에 넣어야 할지 알 수 없다.
- 더 나아가 파일의 크기가 계속 증가할 수 있다(log file) -> 기존의 hole 배치로는 불가능
- 장점
- FAST I/O (헤드가 이동하는 시간이 짧다)
- 한번의 seek/rotation으로 많은 바이트 transfer가 가능
- Realtime file용, process의 swapping 용으로 사용한다
- Direct Access(=Random access)가 가능하다
2. Linked Allocation
파일을 연속적으로 나누는게 아니고,
Linked-List
로 바라봄으로써 아무데나 들어갈 수 있다.file directory는 제일 처음 블록을 가리킨다.
각 블록은 포인터 저장(다음 블록이 어디있는지)을 위해 4바이트 또는 그 이상을 소모한다.
- 장점
external fragmentation
이 발생하지 않는다.
- 단점
- No Random Access
Reliability
와 관계없다. (낮은 신뢰성)- 느린 속도 (헤더의 움직임)
- 한
Sector
가 고장나Pointer
유실 시 많은 부분을 잃게 된다. Pointer
를 위한 공간이 block의 일부가 되어 공간 효율성을 떨어뜨린다.
- 개선 : FAT(File-Allocation-Table) 파일시스템
- 포인터들만 모은 테이블(FAT)을 별도 블록에 저장하고 FAT 손실 시 복구를 위해 이중 저장하는 시스템
- 포인터를 별도의 위치에 보관해
reliability
와 공간효율성 문제를 해결한다. - 이는 직접접근(Direct Access)도 가능하며(FAT내용을 가져와 헤드를 움직인다), FAT는 일반적으로 메모리 캐싱을 한다.
3. Indexed Allocation
연결할당과 같이 아무데나 파일을 할당할 수 있으며 그 정보를 저장하는 블락을 할당한다.
데이터 블럭 외에 각 파일 당 한 개의 인덱스 블록이 존재한다.
인덱스 블록은 포인터의 모음이며, 디렉토리는 인덱스 블록을 가리킨다. Unix/Linux등에서 사용한다.
디지털 포렌식에서 사용하는 방법으로 없어진 해당 파일을 찾기 위해선 indexed block만 찾으면 복원이 가능한다
- 장점
- pointer가 여기저기 흩어져있는 linked allocation의 단점을 보완한다.
external fragmentation
이 발생하지 않는다.- Direct Access가 가능하다
- Small file의 경우 공간을 낭비한다
- 파일이 너무 큰 경우 하나의 block으로 index를 저장할 수 없다.
'Computer Science > [ OS ]' 카테고리의 다른 글
[ OS ] 20. 저장장치와 입출력 - I/O (0) | 2021.06.05 |
---|---|
[ OS ] 19. 저장장치와 입출력 - 디스크 저장장치 (0) | 2021.06.04 |
[ OS ] 18. 메모리 관리 전략 - 캐시 메모리 (0) | 2021.06.03 |
[ OS ] 17. 메모리 관리 전략 - 가상 메모리 Paging(페이지 교체 알고리즘)과 Thrasing(쓰레싱) (1) | 2021.06.03 |
[ OS ] 16. 메모리 관리 전략 - 가상 메모리 Paging (Demand Paging) (2) | 2021.06.03 |