OS-11-File Systems
File and File System
- File
- “A named collection of related information”
- 일반적으로 비휘발성의 보조 기억 장치에 저장
- 운영체제는 다양한 저장 장치를 file이라는 동일한 논리적 단위로 볼 수 있게 해 줌
- Operation
- create, read, write, reposition (lseek), delete, open, close 등
- File attribute (혹은 파일 metadata)
- 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들
- 파일 이름, 유형, 저장된 위치, 파일 사이즈
- 접근 권한 (읽기/쓰기/실행), 시간 (생성/변경/사용), 소유자 등
- 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들
- File system
- 운영체제에서 파일을 관리하는 부분
- 파일 및 파일의 메타 데이터, 디렉토리 정보 등을 관리
- 파일의 저장 방법 결정
- 파일 보호 등
open()

open(“/a/b/c)
디스크로부터 파일 c의 메타 데이터를 메모리로 가지고 옴
이를 위하여 directory path를 search
- 루트 디렉토리 “/“를 open하고 그 안에서 파일 “a”의 위치 획득
- 파일 “a”를 open한 후 read하여 그 안에서 파일 “b”의 위치 획득
- 파일 “b”를 open한 후 read하여 그 안에서 파일 “c”의 위치 획득
- 파일 “c”를 open한다
Directory path의 search에 너무 많은 시간 소요
- Open을 read/write와 별도로 두는 이유임
- 한 번 open한 파일은 read/ write 시 directory search 불필요
Open file table
- 현재 open된 파일들의 메타데이터 보관소 (in memory)
- 디스크의 메타데이터보다 몇 가지 정보가 추가
- Open한 프로세스 수
- 한 번 open한 파일은 read/ write 시 directory search 불필요
File descriptor (file handle, file control block)
- Open file table에 대한 위치 정보 (프로세스 별)
/a/b/c search 및 파일 읽기 과정
- OS가 hard disk의 root metadata의 저장 위치를 알기 때문에 Open file table에 root metadata 정보를 저장한다
- root metadata에서 a의 metadata 위치정보를 통해 metadata 정보를 불러온다
- 앞의 과정을 반복한다
- file descripter를 통해서 fd에 b의 metadata 정보를 읽는다
- b의 metadata 정보로 file b의 내용을 OS의 메모리에 올린다
- OS 메모리에 올라간 정보를 Process A의 메모리에 올린다
File Protection
각 파일에 대해 누구에게 어떤 유형의 접근(read/write/execution)을 허락할 것인가?
Access Control 방법
Access Control Matrix
- Access control list: 파일별로 누구에게 어떤 접근 권한이 있는지 표시 - Capability: 사용자별로 자신이 접근 권한을 가진 파일 및 해당 권한 표시
Grouping
전체 user를 owner, group, public의 세 그룹으로 구분
각 파일에 대해 세 그룹의 접근 권한 (rwx)을 3비트씩으로 구분
Password
- 파일마다 password를 두는 방법
- 모든 접근 권한에 대해 하나의 password: all or noting
- 접근 권한별 password: 암기 문제, 관리 문제
File System의 Mounting
- 물리적 디스크로 논리적 디스크 disk1 disk2, disk3으로 파티셔닝
- 이후에 disk1의 root 디렉토리의 하위 디렉토리 중 하나로 disk1, disk2를 위치시킴 (= Mounting)


Access Methods
- 시스템이 제공하는 파일 정보의 접근 방식
- 순차 접근 (sequential access)
- 카세트 테이프를 상요하는 방식처럼 접근
- 읽거나 쓰면 offset은 자동적으로 증가
- 직접 접근 (direct access, random access)
- LP 레코드 판과 같이 접근하도록 함
- 파일을 구성하는 레코드를 임의의 순서로 접근할 수 있음
- 순차 접근 (sequential access)
Allocation of File Data in Disk
- Contiguous Allocation
- Linked Allocation
- Indexed Allocation
Contiguous Allocation
- 단점
- external fragmentation
- File grow가 어려움
- file 생성시 얼마나 큰 hole을 할당할 것인가?
- grow 가능 vs 낭비 (internal fragmentation)
- 장점
- Fast I/O
- 한 번의 seek/rotation으로 많은 바이트 transfer
- Realtime file 용으로, 또는 이미 run중이던 process의 swapping 용
- swap area의 저장 데이터는 영구저장용이 아니기 때문에 공간 효율성을 중요하게 여기지 않는다
- Direct access(=random access)가능
- Fast I/O

Linked Allocation
- 장점
- External fragmentation 발생 안 함
- 단점
- No random access
- Reliability 문제
- 한 sector가 고장나면 pointer가 유실되면 많은 부분을 잃음
- Pointer를 위한 공간이 block의 일부가 되어 공간 효율성을 떨어뜨림
- 512 bytes/sector, 4 bytes/pointer
- 변형
- File-allocation table (FAT) 파일 시스템
- 포인터를 별도의 위치에 보관하여 reliability와 공간 효율성 문제 해결
- File-allocation table (FAT) 파일 시스템

Indexed Allocation
- 장점
- External fragmentation이 발생하지 않음
- Direct access 가능
- 단점
- Small file의 경우 공간 낭비 (실제로 많은 file들이 small)
- Too Large file의 경우 하나의 block으로 index를 저장하기에 부족
- linked scheme
- multi-level index
UNIX 파일 시스템의 구조

inode에서 index allocation 사용하며 파일 사이즈에 따라 multi level index의 수가 달라집니다

FAT File System

Linked Allocation 방식으로 파일을 저장합니다
사용하면 파일에 파일 시작 주소값 217을 저장하고 다음 데이터가 저장된 주소값은 FAT에 217번지에 저장되어있는 주소값을 제공하는 방식으로 파일 데이터의 저장 위치를 제공합니다
VFS and NFS
- Virtual File System (VFS)
- 서로 다른 다양한 file system에 대해 동일한 시스템 콜 인터페이스 (API)를 통해 접근할 수 있게 해주는 OS의 layer
- Network File System (NFS)
- 분산 시스템에서는 네트워크를 통해 파일이 공유될 수 있다
- NFS는 분산 환경에서의 대표적인 파일 공유 방법이다

Page Cache and Buffer Cache
Page Cache
- Vitrual memory의 paging system에서 사용하는 page frame을 caching의 관점에서 설명하는 용어
- Memory-Mapped I/O를 쓰는 경우 file의 I/O에서도 page cache 사용
Memory-Mapped I/O
File의 일부를 virtual memory에 mapping 시킴
매핑시킨 영역에 대한 메모리 접근 연산은 파일의 입출력을 수행하게 함
OS를 거치지 않고 File에 접근 할 수 있다.
Process의 code, data, stack 영역중 code 영역은 read-only 파일이 때문에
swap area에 존재하지 않으며 memory-mapped I/O 빙식을 사용할 수 있다.
Buffer Cache
- 파일 시스템을 통한 I/O 연산은 메모리의 특정 영역인 buffer cache 사용
- File 사용의 locality 활용
- 한 번 읽어온 block에 대한 후속 요청시 buffer cache에서 즉시 전달
- 모든 프로세스가 공용으로 사용
- Replacement algorithm 필요 (LRU, LFU 등)
Unified Buffer Cache
- 최근의 OS에서는 기존의 buffer cache가 page cache에 통합됨


참고
- 반효경 교수님 운영체제 강의