traverse the file system
하드디스크 파티션
-> 각각이 논리적 디스크가 됨
하드디스크 여러개 합침
-> 논리적 디스크 1개가 됨
하드디스크 용도
사용자 프로그램이 시스템 콜 (open도)
-> CPU 제어권 운영체제로
-> 운영체제가 root 디렉토리의 메타데이터를 메모리로
-> root의 metadata에서 root의 실제 위치를 찾아서 감
-> root 디렉토리의 내용을 보고 a라는 파일의 metadata를 메모리로
-> a의 위치정보로 실제 위치로 감
-> a 디렉토리에서 b의 metadata 찾아서 메모리로
-> open() 끝
-> read() 반환
read() 결과를 바로 사용자에게 전달하지 않고
자신의 메모리에 올려두고 카피해서 사용자에게 줌
프로그램마다 오프셋같은 정보를 따로 가지고 있음
Access control Matrix
근데, 이래도 오버헤드 너무 큼
Grouping
일반적으로 Grouping 씀
각각의 논리적 디스크에 각각의 파일 시스템 둘 수 있음 = root file system
다른 디스크의 파일 시스템 접근할 때는 ?
-> mounting
단점
장점
파일의 데이터를 디스크에 연속적으로 배치하지 않고 빈 블록에 바로 배치
하나의 sector가 bad sector가 되면 그 다음위치 다 못 찾아감
블럭의 용량 크기는 무조건 512byte의 배수
-> 공간 효율성 떨어짐
변형해서 단점 완화
-> FAT
어떤 파일 시스템이던 boot block이 첫번째 블럭
-> 부팅을 위해서
indexed 할당 기반
실제 파일 시스템에서 디렉토리가 모든 meta data를 가지고 있진 않음
윈도우시스템이나 모바일 시스템에서 사용하는 경우가 있음
윈도우에서 이 파일 시스템의 발전된 버전 사용
모든 meta data를 디렉토리가 갖고 있음
linked 기반
-> 순차 접근이라서 bad file뜨면 뒤에꺼 사용못하는 문제가 있음
-> 다음 블럭의 위치 정보를 FAT에 따로 저장해서 해결
FAT
비어있는 블럭 관리하는 법
Linked
Grouping
Counting
디렉토리 어떻게 구현하는지
디렉토리 밑의 파일들의 meta data를 관리하는 특별한 파일
버퍼 캐쉬
파일의 관점 - 버퍼케시
버츄얼메모리 관점 - 페이지 캐시
최근에는 페이지캐쉬, 버퍼케시 한번에 묶어서 관리하는 운영체제가 많음
버퍼캐시 따로 안두고 페이지 캐쉬로 통합
-> unified buffer cache
unified buffer cache
memory mapped i/o