지역성은 프로그램이 데이터를 참조할 때, 공간적 및 시간적 특성에 따라 가까운 데이터를 참조하는 경향을 의미한다. 이는 컴퓨터 시스템의 성능 향상에 큰 역할을 하는 원리로, 이를 더욱 구체적으로 살펴보면 다음과 같다.
지역성의 원리는 다양한 컴퓨터 시스템에서 활용된다. 예를 들어, CPU의 캐시 메모리는 지역성 원리를 기반으로 동작한다. 캐시 메모리는 작고 빠른 메모리로, 최근에 접근한 데이터나 곧 접근할 가능성이 높은 데이터를 저장한다. 이런 방식으로 CPU가 메인 메모리에 접근하는 횟수를 줄이고, 프로그램 실행 속도를 향상시킨다.
공간 지역성을 활용하여 메모리를 관리할 때, 블록 단위로 데이터를 저장하는 방법이 자주 사용된다. 블록 단위로 데이터를 저장하면, 한 번의 메모리 접근으로 여러 개의 데이터를 가져올 수 있어 메모리 접근 효율이 향상된다. 이는 디스크 I/O 작업이나 DBMS에서 블록 단위로 데이터를 관리하는 방식에도 적용된다
페이징은 물리 메모리를 고정된 크기의 블록, 즉 '페이지'로 분할하는 메모리 관리 방법이다. 페이징 시스템은 공간 지역성을 활용하여 현재 접근 중인 페이지 주변의 페이지도 함께 메모리에 로드한다. 이렇게 함으로써, 인접한 메모리 위치에 대한 접근 시 메모리 접근 시간을 줄일 수 있다.
루프 퓨전(Loop Fusion): 두 개 이상의 루프가 동일한 데이터 집합을 반복하는 경우, 루프를 합쳐서 메모리 접근 횟수를 줄일 수 있습니다.
루프 블로킹(Loop Blocking): 큰 데이터를 처리할 때, 데이터를 작은 블록으로 분할하여 처리함으로써 캐시 활용도를 높입니다.
데이터 정렬(Data Alignment): 메모리에 데이터를 정렬함으로써 캐시 라인에 데이터를 효율적으로 채울 수 있습니다.
공간 지역성과 시간 지역성 모두 중요합니다. 시스템의 특성과 실행되는 프로그램에 따라 중요도가 달라질 수 있습니다. 예를 들어, 순차적으로 큰 데이터를 처리하는 경우에는 공간 지역성이 중요하고, 반복적으로 작은 데이터를 처리하는 경우에는 시간 지역성이 중요할 수 있습니다.
지역성이 좋지 않은 코드는 메모리 접근 시간이 길어져 성능 저하를 초래할 수 있습니다. 또한, 캐시 미스가 빈번하게 발생하여 프로세서가 대기 상태에 빠지는 경우가 생길 수 있습니다.
캐시 메모리는 지역성의 원리를 활용하여 설계되었습니다. 캐시 메모리는 최근에 사용된 데이터나 곧 사용될 가능성이 높은 데이터를 저장함으로써 메모리 접근 시간을 줄이는 역할을 합니다.
데이터를 순차적으로 접근하는 패턴은 공간 지역성을 높이는 데 효과적입니다. 예를 들어, 배열을 순회할 때 인덱스 순서대로 접근하거나, 연결 리스트보다는 블록 기반의 데이터 구조를 사용하는 것이 좋습니다.
페이징은 물리 메모리를 동일한 크기의 블록으로 나누는 반면, 세그먼테이션은 다른 크기의 블록으로 나눕니다.
페이징은 내부 단편화 문제를 가질 수 있지만, 세그먼테이션은 외부 단편화 문제를 가집니다.
페이징은 페이지 테이블을 사용하여 논리 주소를 물리 주소로 변환하고, 세그먼테이션은 세그먼트 테이블을 사용합니다.