최근에 사용 가능한 메모리가 두 종류 이상인 상황에서 메모리 사용을 최적화하는 일반적인 문제에 관심을 갖게되었으며, 주어진 메모리 세그먼트의 용량과 액세스 속도 사이에 상충 관계가 있습니다.
익숙한 예는 프로세서 캐시, RAM 및 하드 드라이브 (가상 메모리를 통해) 에서 읽 거나 쓸 때를 결정하는 프로그램 입니다.
특히로드해야하는 데이터 양 (프로그램 자체 포함)이 사용 가능한 가장 빠른 스토리지 용량을 크게 초과하는 특별한 경우에 관심이 있습니다 (즉, "모든 것을로드"하는 사소한 솔루션은 적용 할 수 없습니다).
나는 일반적인 캐시 알고리즘을 설명 하는 Wikipedia 페이지 를 발견했다 . 불행히도, 이것들은 약간 저수준입니다.
- LRU 또는 MRU와 같은 많은 것은 여러 번 액세스되는 서브 루틴이있는 경우에만 의미가 있습니다. 많은 수의 서브 루틴이있는 프로그램이 있는데, 그 중 일부는 주어진 실행에서 액세스되지 않으며 일부는 한두 번 액세스되면이 전략은 작동하지 않습니다. 일반적으로 사용되는 것과 그렇지 않은 것.
- CLOCK과 같은 다른 사람들은 실제로 문제의 근원을 공격하는 것이 아니라 구현의 특성을 다루는 것 같습니다.
- 테스트 실행 중 프로그램을 먼저 프로파일 링 한 다음 운영 체제가 그에 따라 최적화 할 수있는 프로파일을 제공하는 전략이 있다는 것을 알고 있습니다. 그러나 프로파일을 작성하는 동안 진정한 "예제 사용법"을 제공하는 문제를 여전히 해결해야합니다.
하드웨어와 소프트웨어의 모든 기술을 추상화하고 순전히 이론적 인 맥락에서 말할 때 알고리즘 구조를 분석하고 효과적인 캐시 전략을 수행하는 것이 가능합니까? 알고리즘이 수행하는 작업에 대한 높은 수준의 이해를 기반으로합니까?
"액세스 그래프"모델에 관심이있을 수 있습니다 .
—
닐 영