일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 백준 2261번
- 백준 2493번
- 백준 17608번
- 동적 프로그래밍(Dynamic Programming)
- 큐(Queue)
- 스택(Stack)
- 위상 정렬(Topology Sort)
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 이분 그래프(Bipartite Graph)
- BFS
- BFS(Breadth First Search)
- 위상 정렬(Topological Sort)
- 백준 2504번
- 백준 1948번
- DFS & BFS
- 백준 18352번
- 그래프(Graph)
- 트리(Tree)
- 백준 1707번
- 백준 21606번
- DFS
- 그리디 알고리즘(Greedy Algorithm)
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- 백준 10000번
- 분할 정복(Divide and Conquer)
- 백준 2812번
- DFS(Depth First Search)
- 백준 9012번
- 알고리즘 개념
- 이분 탐색(Binary Search)
- Today
- Total
Always Be Wise
Project_4 : File System - Buffer Cache 본문
파일 블록의 캐시를 유지하기 위해 파일 시스템을 수정해야 한다.
블록 읽기 또는 쓰기 요청이 발생했을 때 해당 블록이 캐시에 있는지 확인하고,
캐시에 있다면 디스크로 이동하지 않고 캐시 된 블록을 사용하고, 캐시에 없다면 디스크에서 캐시로 블록을 가져온다.
이때, 필요한 경우 캐시에 있던 이전 블록을 방출할 수 있다. 캐시 크기는 64 섹터 이하로 제한된다.
적어도 클록 알고리즘만큼 좋은 캐시 교체 알고리즘을 구현해야 한다.
디스크 접근 횟수로 측정했을 때, 액세스 된 정보, 더티 정보 및 기타 정보의 조합이 최상의 성능을 제공하는지 확인해야 한다.
제공된 inode 코드는 디스크의 섹터별 인터페이스를 시스템 콜 인터페이스의 바이트 별 인터페이스로 변환하기 위해
malloc( ) 함수로 할당된 "bounce buffer"를 사용한다.
수정된 데이터를 디스크에 즉시 기록하는 대신, 캐시에 더티 블록을 보관해야 한다.
그런데 더티 블록들은 캐시에서 방출될 때, 디스크에 기록되어야 한다.
크래시가 발생할 경우, write-behind는 파일 시스템을 취약하게 만든다. 따라서 정기적으로 더티 블록들을 디스크에 기록해야 한다.
또한, filesys_done( ) 함수 호출 시 디스크에 기록되어야 하며, Pintos를 중지하면 캐시가 사라진다.
첫 번째 프로젝트의 timer_sleep( )이 동작하는 경우, write_behind는 훌륭한 응용 프로그램이다.
그렇지 않다면 busy-waiting이 발생하지 않도록 해야 한다.
read-ahead 역시 구현해야 한다. 파일의 한 블록을 읽을 때, 해당 파일의 다음 블락을 자동적으로 캐시로 가져와야 한다.
read-ahead는 비동기적으로 수행될 때 유용하다. 프로세스가 파일에 디스크 블록 1을 요청하면, 디스크 블록 1이 읽힐 때까지
블락되고 읽기가 완료되면 즉시 프로세스로 제어가 반환된다. 디스크 블록 2에 대한 read-ahead 요청은 비동기적으로 처리되어야 한다.
이렇게 하려면 IO 전용 스레드를 생성해야 하며, 디스크가 IO가 필요할 때 스레드는 전용 디스크 IO로 요청을 전달한다.
Hint for implementation
이 기능은 Linux처럼 가상 메모리 하위 시스템을 통해 구현할 수 있다.
새로운 VM 유형, pagecache를 도입하고, swap_in, swap_out, destroy 인터페이스를 통하여 버퍼 캐시를 관리할 수 있다.
이 설계를 선택하면 SECTOR_SIZE 세분화 대신, PAGE_SIZE 세분화로 캐시를 관리할 수 있다.
파일 백업 페이지 동기화 문제의 경우, mmaped 영역을 해당 페이지의 캐시로 사용할 수 있다.
캐시는 설계 초기에 통합하는 것이 좋다.
'카이스트 정글 - 프로젝트 > Pintos' 카테고리의 다른 글
Project_4 :File System - Weekly I Learnd (0) | 2022.02.03 |
---|---|
Project_4 : File System - Synchronization (0) | 2022.01.30 |
Project_4 : File System - Subdirectories and Soft Links (0) | 2022.01.29 |
Project_4 : File System - Indexed and Extensible Files (0) | 2022.01.29 |
Project_4 : File System - Introduction (0) | 2022.01.29 |