저장장치에 파일 형태로 데이터를 저장하는 운영체제 내부의 코드로, 디스크의 파티션마다 다른 파일 시스템을 사용한다. 파일에 이름을 부여하고. 디스크의 파일위치를 기록해둔다.
응용프로그램이 운영체제에 파일을 요청하면 파일시스템을 통해 파일을 찾아 반환한다.
리눅스는 최대 4개의 파티션까지 사용할 수 있고, 보통 ext4 파일시스템을 사용하는데 Root 파일 시스템 단 1개에서 시작되어야 함. 다른 파일 시스템은 Root 파일시스템에 mount 시키는 방식으로 추가한다.
리눅스 파일 시스템의 구조는 위 그림과 같다.
각 파일시스템마다 하나의 System File Table과 Inode Table이 존재, 프로세스 생성 시마다 File Descriptor Table을 만듬.
각 파일 디스크립터의 0,1,2번 엔트리는 이미 사용
한 프로세스가 동일한 파일 2번 부를 때 : 같은 fd에 다른 엔트리에서 system file table 한개씩 참조, 같은 inode 가리킴.
두개의 프로세스가 같은 파일 실행 : 다른 fd에서 system file table 한개씩 참조, 같은 inode가리킴.
Virtual File System(VFS)
리눅스 커널에는 단일의 시스템 호출을 통해 어떠한 매체에 있는 파일 시스템에 접근할 수 있도록 공통 파일 모델(read, write, open, link 등 공통적인 인터페이스)를 가상시스템으로 구현해둠.
디스크는 디스크 블록의 집합이다.
디스크블록 : 여러 섹터의 모음, 일반적으로 1~8KB(2의 제곱수 단위)이다.
디스크 할당 방법
연속 할당(Sequential Allocation)
불연속 할당(non-Sequential Allocation)
HDD 등에서 사용
리눅스는 모든 것을 바이트 스트림 형태의 파일로 정의하였다. 따라서 동일한 인터페이스로 장치, 네트워크 등에 접근이 가능하다.
1. 일반 파일(Regular File) : 기호 -
데이터를 담고있는 파일
디렉토리 파일(Directory File) : 기호 d
경로 파일(뒤에서 자세히 설명)
링크 파일(link File) : 기호 l(심볼릭링크만)
바로가기 파일과 같은 형태, 하드 링크와 심볼릭 링크가 있다.
파이프 파일(FIFO File) : 기호 p
두 프로세스 간 데이터 전달을 중개함(통신에 사용). 파일시스템에 이름을 부여하고 생성한 파이프파일을 네임드 파이프라 함.
블록 디바이스 파일(Block Device File) : 기호 b
하드디스크처럼 블록 단위의 데이터를 입출력하는 장치파일. 속도가 빠르다.
문자 디바이스 파일(Character Device File) : 기호 c
마우스나 키보드처럼 문자 단위로 입출력하는 장치파일. 속도가 느리다.
소켓 파일(Socket): 기호 s
컴퓨터 사이에 데이터통신을 위한 인터페이스 파일로 파일 생성 후 로컬과 원격의 주소 설정