💡13장 목표
사용자 입장에서 파일 시스템에 어떻게 접근하는지
- 파일 시스템 기능
- 파일 시스템 인터페이스
- 파일 시스템의 다양한 방법
파일은 연속적인 공간(논리 주소 공간)을 제공한다.
데이터 파일(숫자, 문자, 이진)과 프로그램 파일 유형으로 나눠진다.
텍스트 파일, 소스 파일, 실행 파일 등이 있다.
Attributes
- 파일 자원 관리를 위해 file table이 존재하고, 그 안에는 다음과 같은 속성(정보)를 가진다.

- 이러한 파일 정보들은 보통 디스크에 있는 트리 구조의 디렉토리 밑에 파일에 저장된다.
Operations
- 파일 operation은 OS의 file system에서 system call로 지원된다. 이를 통해 application이 파일 operation을 사용한다.

- pointer는 읽거나 쓸 위치(포지션)으로, seek으로 이 포지션을 지정한다.
- 파일을 먼저 열어서 빠른 접근을 할 수 있도록 준비를 한 다음, 읽기 또는 쓰기가 완료되면 준비 작업들을 종료한다.
Open files
OS는 열린 파일들을 open file table과 file pointer, locking 등으로 관리한다.
- Open-file table: 각 열린 파일에 대한 정보를 가진다. 상태, 위치, 접근 권한 등
- File pointer:각 프로세스가 열린 파일의 마지막 읽기/쓰기 위치를 가리키는 포인터
- File-open count: 파일이 열린 횟수 카운트, 마지막 프로세스가 파일을 닫을 때 file table에서 데이터 제거 (이걸 알아야 한 프로세스가 파일 작업을 끝내도 접근 프로세스가 남아있으면 파일이 종료되지 않도록 할 수 있음)
- Open-file Locking: 여러 프로세스가 파일에 접근할 떄의 충돌을 방지하기 위한 잠금 기능
- Shared lock: 여러 프로세스가 동시 접근 가능 (reader)
- Exclusive lock: 독점권, 한 wrtier가 들어오면 다른 reader, writer 들어올 수 없음
- Mandatory lock: 이미 잠겨있으면 접근 거부, 다시 lock 막는 것
- Advisorty lock: 잠금 상태를 확인
- lock example - java API


File Structure
- None: 단순히 단어 또는 바이트의 연속으로 구성 → 이게 근본이고, 이걸 활용해서 다른 구조도 만드는 것
- Record: record 단위로 구성
- complex: 파일마다 형식이 정해져 있거나, 재배치 가능한 로드 파일 등
🔹Access Methods
파일에 접근하는 다양한 방법
- Sequential access: 순차적으로 접근
- Direct access: 읽거나 쓸 위치를 지정
direct access를 아래와 같이 적용하면 sequential access를 할 수 있다.
- Index access: 파일에 대한 인덱스를 메모리에 저장하여 데이터 위치를 빠르게 찾을 수 있도록
- 인덱스가 너무 크면 인덱스의 인덱스를 디스크에 저장하는 방법도 있음 → multi Index level
- ex) ISAM: 작은 master index와 디스크 블록에 저장된 secondary index로 구성
- ex) VMS에서는 index file과 relative file을 제공

🔹Directory Structure
파일에 대한 정보를 포함하는 노드 집합
- Directory: 파일들이 저장되는 곳으로, 파일에 대한 정보를 포함 (계층적, 트리 구조)
- 트리 구조로 구성
- 효율적 관리, 파일 빠르게 찾을 수 있음
- 사용자가 쉽게 사용할 수 있도록 네이밍 가능
- 파일 속상에 따라 그룹화
Operation
- 파일 검색, 생성, 삭제
- 디렉토리 목록 나열, 파일 서치
- 파일 이름 변경
- 파일 시스템 탐색 (traverse, 트리구조 탐색)
Disk structure
디렉토리와 파일은 모두 디스크에 저장된다.
- Partition: 디스크를 쪼개서 여러개의 파티션, 각 파티션은 별도의 파일 시스템을 가질 수 있음
- 디스크나 파티션은 RAID를 통해 에러 처리 및 성능 향상
- 파일 시스템 없이 raw하게 직접 사용하거나, 파일 시스템으로 format하여 사용
- 한 파일 시스템의 크기가 커서 여러개의 파티션을 차지하게 될 수 있으니까 Volume을 사용해서 이를 방지한다.
- ‘파일시스템-볼륨-디스크’ 구조로, 파일 시스템과 볼륨은 1:1로, 볼륨과 디스크는 1:n으로 연결
- volume table 존재
File system 종류
- general-purpose file system: 일반적으로 알고있는 다양한 데이터를 파일에 저장하는 시스템
- special-purpose file system: 디바이스, 프로세스, 메모리 등의 리소스를 파일 처럼 쉽게 접근할 수 있는 환경을 제공하는 시스템
- tmpfs, objfs, ctfs, lofs, procfc
Structure
디렉토리 구조는 tree가 일반적이지만 다양하다. single, two level은 거의 사용 안함
- single level directory: 모든 사용자가 동일한 디렉토리에 저장

- two level directory: 사용자마다 디렉토리 제공

- Tree-structured directories: 그룹화해서 원하는 만큼 트리 레벨 생성
- 절대 경로: 루트 디렉토리에서 시작하는 경로
- 상대 경로: 현재 디렉토리 기준 경로

- Acyclic-graph directories: 여러 디렉토리가 같은 파일을 공유할 수 있다. → link
- link때문에 동일한 파일이 디렉토리마다 이름이 다를 수 있음, 그래도 cycle은 없음
- 디렉토리가 끊어지면 밑으로 접근 불가능해서 삭제된다. (dangling pointer 삭제)

- General-graph directories: cycle도 존재
- 위에서는 reference count를 사용해서 현재 자신의 파일을 참고한 것이 0개 이면 연결이 끊어졌다고 보고 삭제할 수 있었는데, cycle이 생기면 연결이 끊어졌더라도 cycle에서는 서로를 참고하기 때문에 reference count가 0이 되지 않는다. 그래서 root부터 서치해서 닿지 않은 부분에 대한 삭제를 하는 garbage collection이 필요하다.

🔹File System Mounting
파일 시스템을 특정 디렉토리 구조에 연결하여 접근하는 것
예를 들어, 한 파일 시스템이 있는데, 루트에 연결되어있지 않아 접근이 불가능한 상태 → 루트와 연결된 파일 디렉토리 구조에 연결하여 접근 가능하도록 함
(mount할 때, 파일 시스템은 consistency check를 한다)
- 왼쪽은 마운팅이 끝난 상태, 오른쪽은 마운팅 전

- User를 마운팅 포인트로 잡아 마운팅

🔹File Sharing
멀티 유저 시스템에서 중요한 기능
- 여러 사용자가 동시에 파일에 접근하고 수정할 수 있는 환경 제공
- 사용자 및 그룹에 대한 접근 권한 설정 → 보안 유지
- User ID, Groun ID를 누군지 구별하고 권한 설정 및 파악
Remote file system
네트워크를 통해 파일 시스템에 접근하는 방법
- 접근 단계
- manually: 수동적 접근, FTP(파일 접근 프로토콜)과 같은 프로그램을 사용하여
- automatically: distributed file system/을 통해 자동 접근, 사용자 입장세어 local인지 remote인지 모름
- semi automatically: world wide web을 통해 반자동 접근
- 서버-클라이언트 모델
- 서버에서 파일 시스템을 제공하고, 클라이언트들은 그 파일 시스템에 접근해서 local에 있는 것처럼 사용하는 것 (remote mount)
- UNIX 기반 표준 파일 공유 프로토콜 NFS (15장)
- 분산 정보 시스템 LDPA, DNS 등은 원격 컴퓨팅을 위한 정보에 대한 통합 접근 도와줌
파일 공유 모드
- State information: 파일에 접근하는 클라이언트 상태 정보를 유지, open-r/w-close를 따르며, 이 과정에서 발생하는 모든 정보 기록
- Stateless protocol: 상태 정보 포함 안함, 바로 r/w함 → 에러 복구가 쉽지만 보안성이 낮다.
Consistency Semantics
여러 프로세스가 파일에 접근할 때, 데이터의 일관성을 어떻게 유지할 것인가 (일관성이란 프로세스 순서가 달려져도 항상 같은 결과)
-
Unix 파일 시스템 (UFS)에서는 한 사용자가 파일을 수정하면 다른 사용자가 실시간으로 변경 사항을 확인할 수 있다. local기반이라서
-
하지만 Andrew 파일 시스템 (AFS)는 remot 기반이기 때문에 실시간 변경 사항을 확인하기 어렵다(네트워크 오버헤드), close해야 변경 사항을 확인할 수 있다.
🔹Protection
파일 소유자는 아래 사항을 제어할 수 있다
- 파일에 누가 접근할 수 있는지
- 파일에 무엇을 할 수 있는지
Unix/Linux
- 소유자/그룹/공용 접근 권한 설정
- RWX(읽기, 쓰기, 수행)의 각 비트로 접근 권한 설정

Window는 더 복잡한 접근 모드를 가진다.