🔹Virtual File System (VFS)
Unix, Linux는 모든걸 파일로 적용한다. 파일 종류 상관 없이 동일한 파일 시스템 인터페이스(API)를 제공한다. 이런 시스템을 Virtual File system(VFS)라고 한다.
- 파일마다 가지는 정보 inode가 있으면, 진짜 파일이 아닌 애들한테는 vnodes가 있다.
- VFS interface는 파일 종류를 구별하여 알맞은 로컬 파일 시스템으로 안내해준다.

리눅스는 4개의 오브젝트 유형을 가진다.
- inodes: 파일의 데이터 저장
- file: 열린 파일에 대한 정보 저장
- superblock: 파일 시스템 전체 정보 저장
- dentry: 디렉토리 엔트리, 파일과 디렉토리 간의 관계 저장
→ 각 오브젝트는 함수 테이블에 대한 포인터를 가지고 있으며, 이 테이블은 해당 오브젝트에서 구현할 함수의 주소를 포함한다. 즉, 각 함수들은 객체에 따라 다르게 정의될 수 있다.
🔹Network File system (NFS)
- NFS는 서버-클라이언트 모델을 기반으로 한 파일 공유 프로토콜 중 하나
- 로컬처럼 원격 파일 시스템에 접근 가능
- 클라이언트에 권한이 있는지 인증을 꼭 해야한다.
- 클라이언트가 신분을 속이는 spoofing 등 공격 가능
- 암호화 등으로 보안 강화
작업 과정
- 클라이언트 인증 (유저 아이디 확인)
- 클라이언트가 원격 파일 시스템을 마운트하고 서버에게 파일 요청
- 네트워크를 통해 요청이 전달되고, 서버는 요청 권한 확인 후 파일 핸들러를 반환
- 클라이언트는 파일 핸들을 사용해 읽기쓰기 작업 수행
원격 컴퓨팅에 필요한 정보에 대한 접근을 제공하는 서비스들은 아래와 같다.
- DNS(domain name system): 호스트 이름을 네트워크 주소로 변환
- NIS(network information service): 사용자 정보
- CIFS(common internet file system): 마이크로소프트의 파일 시스템, 사용자 인증과 결합하여 네트워크 로그인
- Active directory
Sun의 NFS
- LAN이나 WAN 네트워크에서 원격 파일에 접근
- UDP, TCP 등의 데이터 전송 프로토콜 사용
Heterogeneous environment 독립적
서버에 있는 파일을 요청하는 경우, 요청하는 클라이언트의 파일 시스템에 상관 없이 같은 NFS를 사용한다면 접근할 수 있다.
- 원격 디렉토리를 로컬 파일시스템 디렉토리에 마운트 → 로컬 파일 시스템처럼 보임
- NFS의 독립성은 RPC(remote procedure call)을 통해 제공되며, 서로 다른 시스템 간의 데이터 전송을 표준화 하기 위해 XDR(external data represenatation) 프로토콜을 사용한다. → 3장에 있는 내용
아래 그림에서 U는 로컬, S는 원격 디렉토리이다. S1을 U에 마운팅하면 (a), 그 상태에서 S2가 한번 더 마운팅 하면 (b)

NFS mount protocol
클라이언트와 서버 간의 초기 논리적 연결을 설정하는 과정
- 서버는 export list를 통해 마운트할 수 있는 서비스들을 제공한다.
- 이걸 통해 local에 마운팅하여 다양한 서비스를 사용할 수 있음
- 마운팅 요청이 성공적으로 처리되면 서버는 파일 핸들(키 역할)을 반환, 핸들을 통해 클라이언트가 서버 파일에 접근
NFS protocol
원격 파일 작업을 위한 PRC를 제공, 여러 파일 관련 서비스 지원
- 파일 검색, 디렉토리 엔트리 읽기, 링크 및 디렉토리 제어, 파일 속성 접근, 파일 읽기 쓰기 등의 서비스를 제공 → 이걸 로컬에서 쓸 수 있도록 해줌
- NFS 서버는 stateless: 각 요청은 독립적이다. 서버가 클라이언트의 정보를 갖고있지 않아 기억하지 않는다.
- 그리고 NFS protocol은 여러 클라이언트가 동시에 작업을 할 수 있는concurrency-control을 제공하지 않는다. (오버헤드 우려)
NFS Architecture
세가지 주요 계층으로 이루어져 있다.
- UNIX file system interface: 사용자 친화적
- Virtual File system(VFS) layer: 클라이언트가 동일한 system-call interface를 사용할 수 있도록 VFS가 다양한 파일시스템을 통합시켜줌, 그리고 로컬/원격 파일을 구분하기 때문에 원격 파일 요청에 대해 NFS 프로토콜 절차 호출
- NFS service layer: 서버와의 통신을 통해 원격 파일 작업 수행

NFS path-name traslation
- lookup call: 로컬에서 원격 정보(vnodes)를 찾기 위해 리소스 이름으로 찾는 것
- lookup 속도를 향상시키기 위해 클라이언트 측에 이름 조회 캐시를 사용하기도 함
NFS remote operations
성능을 위해 버퍼링 및 캐싱 기술 사용
- File-blocks cache: 파일이 열릴 때 원격 서버의 캐시된 속성을 가져옴, 만약 서버에서 업데이트 되었다면 새로 가져옴
- File-attribute cache: 서버로부터 새로운 파일 속성이 도착할 때마다 업데이트, 클라이언트가 최신 파일 속성을 유지할 수 있음