23.07.17 최초 작성
23.11.30 VFS 내용 추가
외부 저장장치에 어떤 관련있는 정보들을 모아놓은 것.
OS는 시스템에서 Open된 파일들을 Open-File Table을 통해 관리한다. 이 테이블에 파일이 열린 횟수, 파일의 위치, 접근 권한을 저장한다.
각 프로세스는 고유의 File Descriptor라는 테이블을 가지고 있고 이 테이블에 프로세스가 Open한 파일들의 정보를 담아둔다. 스레드의 경우 이 테이블을 공유하며 fork()시 이 정보가 그대로 복사된다.
각 프로세스들은 각 열린 파일들에 대해 File Pointer를 가지고 있으며 마지막으로 파일에서 R/W 한 위치를 가리킨다. read(), write()시 자동적으로 파일 포인터를 바꾸며 lseek() 시 이 위치를 조정한다.
관련 파일들과 디렉토리들의 집합. 사용자에게는 파일을 체계적으로 구성할 수 있게 해주며 시스템에게는 물리적인 디스크의 파일 위치로 부터 각각의 파일의 집합을 나타낼 수 있는 정형화된 이름 인터페이스를 제공한다.
디렉토리는 파일을 File Attribute(metadata)에 매핑하는 역할을 한다. File Attribute는 파일 ID, 형식, 디스크의 위치, 크기 등을 담고 있다.
각 디렉토리는
파일은 디렉토리와 연결되어 해당 디렉토리가 호출될 경우 파일을 열 수 있다. 이 연결을 "Link" 라고 하며 파일은 여려개의 디렉토리와 링크될 수 있다.
메모리 이외에 모든 저장장치를 의미하며 고정된 크기의 블록의 모음으로 볼 수 있다.
저장장치에 데이터, 파일, 메타데이터를 블록에 배치하는 방식을 결정해야 하는데 파일 시스템을 통해 이를 구현한다.
비휘발성의 마그네틱 저장장치이다. 여러개의 플래터가 스핀들에 의해 고정되어 있으며 암에 달린 헤드가 플래터의 데이터를 읽는다.
플레터는 여러개의 트랙이 존재하며 트랙은 일정 크기의 섹터가 여러개 존재한다.
전기적인 장치를 이용한 저장장치. HDD와 달리 기계적인 요소가 없으며 수명이 제한적이다.
위의 FET는 플래시 메모리의 기본 단위(Cell)로 Work Line에 전기의 흐름을 제어해 0과 1을 나타낼 수 있다. 데이터를 Write할 때 마다 Oxide Layer가 마모되며 이로인해 저장장치의 수명이 제한된다.
Cell 의 모음을 Page 라 하며 읽기, 쓰기의 기본 단위이다. Page 의 모음을 Block 이라고 하며 지우는 작업의 기본 단위이다.
OS의 파일 시스템은 섹터 기반으로 인식하기 때문에 SSD의 페이지와 블록을 단위로 인식하는 체계와 맞지 않는다. 이를 해결하고 SSD를 섹터 기반으로 인식할 수 있도록 하는 소프트웨어 레이어를 FTL 이라고 한다.
적용하기 쉽고 작동하는데 메모리 자원을 적게 필요로 한다.
- 총 Directory Entry의 크기 : 32Byte
- File Name : 파일 이름의 텍스트 정보
- Start-of-File Cluster : 파일 데이터의 첫번째 데이터 위치 정보. 그 다음부터 N+1번째 위치 정보는 N번째 위치에 존재함
- File Size : 파일 데이터의 크기 정보
Linux/Unix의 파일 시스템 표준이며 FAT보다 유연하고 강력한 기능을 제공한다.
여러 파일 시스템을 일관된 인터페이스를 통해 접근할 수 있도록 하는 기능. 유저 애플리케이션에서 open
, write
, read
와 같은 시스템 콜을 호출하면 파일 시스템으로 연결해주는 소프트웨어 계층.
Superblock
: 전체 파일 시스템을 뜻함Dentry
: 디렉토리에 대응됨Inode
: 파일 시스템 안의 객체(파일 & 디렉토리)에 대응됨사용하지 않는 여유 RAM을 파일 데이터를 캐시하는데 사용하는 방법. 만약 RAM의 여유 공간이 부족해지면 해당 데이터들은 Clean File Page를 저장한 공간을 해제하고 사용한다.
좋은 글 감사합니다!