섀도 메모리
Shadow memory![]() |
컴퓨팅에서 섀도 메모리는 프로그램이 실행되는 동안 사용된 컴퓨터 메모리에 정보를 추적하고 저장하는 데 사용되는 기술입니다.섀도 메모리는 메인 메모리의 개별 비트 또는 하나 이상의 바이트에 매핑되는 섀도 바이트로 구성됩니다.이러한 섀도 바이트는 일반적으로 원래 프로그램에서는 보이지 않으며 원래 데이터에 대한 정보를 기록하는 데 사용됩니다.
기술.
이 기술은 체크 대상 프로그램에 할당된 메모리 부분에 대한 정보를 저장할 수 있는 메모리 오류 체커에 의해 사용됩니다.이 섀도 메모리는 분할 장애 등으로 인해 프로그램이 크래시하지 않을 수도 있지만 메모리의 잘못된 액세스를 감지하고 보고하는 데 사용됩니다.에러 체커는, 정의되어 있는 비트와 정의되어 있지 않은 비트와 같은 추가 정보를 메모리에 격납할 수도 있습니다.Valgrind 스위트의 일부인 Memcheck는 이 기능을 사용하여 정의되지 않은 메모리 값에 대한 동작 또는 인쇄로 인해 발생하는 정의되지 않은 동작을 검출합니다.
단, 섀도 메모리의 사용은 메모리 에러 체커에 한정되지 않습니다.이러한 섀도 바이트에 보존되어 있는 정보는 고정되어 있지 않기 때문입니다.예를 들어 데이터 레이스 디텍터인 ThreadSanitizer에서 사용됩니다.
섀도 메모리는 다양한 방법으로 구현 및 사용할 수 있으며 성능 특성이 다릅니다.인스턴스 체크는 비트 정밀도로 값을 추적하는 반면 Clang 컴파일러의 일부인 AddressSanitizer는 비교적 매우 빠릅니다.모든 Valgrind 툴과 마찬가지로 Memcheck는 바이너리 변환과 instrumentation을 사용하여 프로그램 메모리 사용에 대응하는 섀도 메모리를 조작하는 코드를 실행합니다.한편 AddressSanitizer는 컴파일 시에 생성되며 컴파일 중에 프로그램에 에러 체크 코드를 인라인으로 삽입합니다.섀도 메모리 구현에서는 섀도 메모리용으로 대량의 가상 메모리를 사용하여 매우 다른 성능 특성을 제공합니다.
레퍼런스
일반
- Nethercote, N.; Seward, J. (2007). "How to shadow every byte of memory used by a program". How to shadow every byte of memory used by a program. In Proceedings of the 3rd international Conference on Virtual Execution Environments (San Diego, California, USA). VEE '07. ACM New York (published June 13–15, 2007). pp. 65–74. CiteSeerX 10.1.1.643.7117. doi:10.1145/1254810.1254820. ISBN 9781595936301. S2CID 10263496.
- http://research.google.com/pubs/pub37752.html