File System Interface
파일
- 정의: 파일은 관련된 정보들의 집합. 세컨더리 스토리지에 저장하는 단위이다. 파일에는 아무것도 작성하지 않아도 EOF라는 특수문자가 들어있고 파일에 텍스트를 넣고 저장하면 마지막 위치로 EOF를 시프팅해서 옮 긴다. 오픈할때는 EOF의 바로 앞이 파일 포인터가 된다. 파일 포인터를 특정 위치로 이동시키는것이 seek이 다.
- 파일 시스템: 파일 시스템은 데이터를 long term으로 저장하기 위해서 존재하는 운영체제의 서브시스템. 윈도우는 파일시스템으로 NTFS를 사용하고 리눅스는 ext를 사용한다. USB는 FAT을 사용한다. FAT과 NTFS의 가장 큰 차이는 안정성으로 NTFS가 안정성이 더 좋다. 파일 시스템콜로 create, open, close, read, write, chmod, chown 등이 있다. 하지만 c등의 언어 내부에서 사용되고 인터페이스를 제공하므로 직접 사용하는 경우는 거의 없다. 파일시스템은 permission, 파일 저장, 디렉토리로 logical 구조를 만들고 권한설정 및 protection등의 작업을 한다.
File Type
- 파일 시스템의 분류: device, directory, symbolic link 등
- OS의 특정파트 혹은 런타임 라이브러리: executable, dll, object code, text 등. 커널이 몰라도 특정 시스템 프로그램이 인식해야한다.
- Application program이 구분: jpg, mpg, avi,mp3 등.
- 윈도우는 확장자로 인코딩을 한다. 정확한 확장자가 필수이다. 하지만 리눅스는 확장자 개념이 없고 컴파일러와 소스코드의 약속이다.
Directory
- 여러 형태의 파일들의 리스트 정보를 저장할 수 있는 특수한 파일. hierarchical한 구조를 가지고 경로를 가진다. 어떤 파일들이 어느 위치에 저장되어있는지를 보여줄 수 있다. 경로의 개념이 생기고 효과적인 임의접근이 가능하다. 현재위치를 기준으로 하면 상대경로, 루트부터 시작하면 절대경로이다. 디렉토리는 filename과 attribute의 리스트이다. attribute는 리스팅하고 있는 파일의 크기, protection정보, 생성일, 수정일, 디스크에서의 위치 등을 포함한다. 리스팅되어있는 파일들은 랜덤 엑세스되기 때문에 정렬되어있지 않고 임의의 순서대로 들어간다.
File System Mounting
- 새로 디스크를 연결할때 유닉스 계열에서는 비어있는 디렉토리에 끼운다. 루트 밑에 설치된다. ./usr/dev에 마운팅 된 디바이스들을 접근할 수 있다. 윈도우는 물리적인 디스크들이 다른 레터링을 가지고 독립적으로 존재함. C드라이브, D드라이브 등 디바이스마다 루트가 따로 존재한다.
Remote File System
- 다른 컴퓨터의 파일 시스템을 원격으로 접근하는 방식. 유닉스는 NFS, 윈도우는 CIFS를 사용.
Protection
- 윈도우에서는 개인 PC로 많이 사용하기때문에 중요하지 않지만 유닉스 시스템은 다수의 유저들이 접근해서 사용하기 때문에 보안과 권한이 중요하다. ACL Access Control List방식과 Capability방식이 존재한다. ACL은 파일당 권한설정이고 Capability는 사용자당 파일 권한 설정하는 방식이다. 파일수가 많기 때문에 리눅스에서는 ACL을 사용한다. Owner Access, Group Access, Public Access로 구분되며 각각이 RWX(Read, Write, Execute)권한이 8진수로 지정되어있고 chmod를 통해서 권한을 변경할 수 있다. ls -l명령어를 통해서 권한을 확인할 수 있다. 유저아이디, 그룹 용량 변경시간 파일이름을 확인할 수 있다. d는 directory임을 가리킨다.


Memory mapped File