
File
File attribute(혹은 File의 metadata)
File system
Directory
Partition(=Logical Dist)


open("/a/b/c")
디스크로부터 파일 c의 메타데이터를 메모리로 가지고 옴
이를 위하여 directory path를 search
Directory path의 search에 너무 많은 시간 소요
Open file table
현재 open된 파일들의 메타데이터 보관소(in memory)
디스크의 메타데이터보다 몇 가지 정보가 추가
File descriptor(file handle, file control block)
root 디렉토리의 메타데이터를 먼저 메모리에 올림(루트를 먼저 open)
root의 metadata에는 파일의 위치가 있음
그래서 root의 metadata를 열면 실제 그 파일의 위치가 어디 있는지 알 수 있음
root의 content는 root가 디렉토리 파일이기 때문에 그 내용이 디렉토일 밑에 있는 파일들의 정보들을 가지고 있음
a의 메타데이터를 메모리에 올림
open은 그 파일의 메타데이터를 메모리에 올리는 작업
open은 system call임
각 프로세스마다 그 프로세스가 오픈한 파일들에 대한 메타데이터 포인트를 가지고 있는 일종의 배열같은게 있음(file descriptor)
한 번 file을 오픈하면 이미 그 메타데이터가 메모리에 올라가 있음
프로세스는 파일디스크립터숫자(인덱스)만 가지고 read/write 요청을 할 수 있음
read 요청을 하면 open한 다음 파일디스크립터를 적음(read(fd))
디스크에서 파일을 읽어서 바로 사용자 프로세스에 바로 전달하는 것이 아닌 운영체제가 자신의 메모리 공간 일부에 먼저 읽어 놓는다. 그 후에 사용자 프로세스에 그 내용을 copy해서 전달한다.
만약 해당 프로그램이나 다른 프로그램이 read system call을 하면 디스크까지 가는게 아니라 이미 운영체제가 한번 읽어놓은 데이터를 전달 (버퍼 캐싱)
요청한 내용이 버퍼 캐시가 있든 없든 간에 무조건 CPU가 운영체제한테 넘어감. (시스템콜이니까)
따라서 LRU / LFU 같은 알고리즘을 사용할 수 있음
메타데이터가 디스크에 있을 때에는 위에 적어 놓은 정보들만이 메타데이터가 되는데 메모리에 올라왔을 때는 추가로 한가지 메타데이터가 더 필요하다. 현재 이 프로세스가 이 파일 어디에 접근하고 있는지 하는 offset 정보를 가지고 있어야 한다.
서로 다른 프로그램이 같은 파일에 접근할 때 둘의 offset은 다를 수 있음(그 파일에 대한 메타데이터는 하나)
따라서 프로세스들과 무관하게 system wide하게 하나만 가지고 있어도 되는 메타데이터를 모아놓은 테이블과 따로 offset을 저장하는 테이블을 별도로 두는 것이 일반적이다.

메모리에 대한 프로텍션은 read/write 권한에 대한 얘기만 했었음
File은 여러 사용자와 프로그램이 같이 사용할 수 있기 때문에 접근권한이 누구한테 있느냐와 어떤 권한이 있느냐에 대해 설정해주어야함
ACL은 파일권한을 엮어서 linked list로 관리
Capability는 사용자를 엮어서 linked list로 관리
이 방법은 오버헤드가 크다
따라서 일반적으로 Grouping이라는 방법을 쓴다.


하나의 물리적 디스크를 파티션응ㄹ 통해서 여러개의 논리적 디스크를 만들 수 있음 각 논리적 디스크마다 파일 시스템을 설치할 수 있음
만약 각 다른 파티션에서 다른 파티션의 파일 시스템에 접근하고 싶다면?
마운틴이라는 연산이 있음
시스템이 제공하는 파일 정보의 접근 방식
오픈 연산은 파일의 메타데이터를 메모리로 올려 놓는 것
파일의 메타 데이터
메모리는 주소를 통해 접근
파일은 이름을 통해 접근하는 단위
디스크는 논리적 디스크와 물리적 디스크가 있음
운영체제가 보는 디스크는 논리적 디스크(파티션)
파티션에 파일 시스템을 설치할 수 있음
논리적 디스크를 버추얼 메모리 스왑에어리어 용도로 사용할 수 있음