앞의 내용은 필기로 따로 정리했고 시간 날때 추가할 예정
[Chapter5. 메모리 계층 구조]
지역성의 원칙
- 시간적 지역성: 한번 참조된 항목은 곧바로 다시 참조되는 경향
- 공간적 지역성: 근처의 다른 항목들이 곧바로 참조될 가능성이 높음
메모리 계층 구조를 만든 가장 큰 이유는 성능 향상이다.
블록/라인: 정보 전송의 최소 단위
SRAM: 주로 캐시에 사용
DRAM: 주로 메인 메모리에 사용
플래시 메모리: EEPROM의 한 종류
디스크 메모리: 자기 디스크(HDD)
주소 인터리빙: DRAM에서 하나의 주소를 여러 뱅크에 보내서 모든 뱅크가 동시에 읽고 쓰게 하는 순환 접근 방식
직접 사상(direct mapped): 메모리의 한 위치가 캐시 내에 정확히 한 곳에만 사상되는 것
캐시에 태그를 추가함으로써 요구하는 워드가 캐시 내에 존재하는지 알 수 있다.
캐시 블록이 크면 공간적 지역성을 잘 활용하기 때문에 실패율이 낮아지지만 너무 크면 캐시의 상당수를 차지하기 때문에 실패율이 오히려 떨어질수도 있다.
캐시 적중 실패시 파이프라인의 지연을 발생시킨다.
메인 메모리와 캐시를 일치시키는 방법은 즉시 쓰기(write-through)와 나중 쓰기(write-back)가 있다.
전자는 간단하지만 성능이 좋지 않지만 쓰기 버퍼를 통해 해결할 수 있다. 보통 2개 이상의 버퍼 엔트리를 가진다.
후자는 성능은 좋지만 즉시 쓰기에 비해 구현이 더 복잡하다.
캐시의 성능을 향상시키는 두 가지 방법
- 2개의 다른 메모리 블럭이 캐시의 같은 장소를 두고 경쟁하는 확률을 줄여서 실패율을 낮추는 것
- 메모리 계층구조에 새로운 계층을 추가해서 실패 손실을 줄이는 것(=다단계 캐싱)
블록을 캐시에 배치하는 방법
- 직접 사상: 각 블록은 캐시의 딱 한곳에만 들어갈 수 있다
- 완전 연관: 캐시의 어느곳에도 다 들어갈 수 있지만 탐색시간이 오래걸린다
- 집합 연관: 직접 사상과 완전 연관을 합쳐둔 것
연관 정도를 늘리면 실패율은 줄어들지만 적중 시간이 증가한다.
적중 실패시 직접 사상에서는 해당 캐시 자리의 블록을 바로 교체하면 되지만 연관 방식의 캐시에서는 주로 LRU 방식을 통해 교체한다.
*LRU(least recently used): 가장 오랫동안 사용되지 않은 블록을 교체하는 방법
다단계 캐시를 이용한 실패 손실 줄이기
프로세서와 DRAM의 접근시간 차이를 줄이기 위해 캐시를 한 계층 더 지원한다.(2차 캐시)
1차 캐시에서 실패가 발생하면 2차 캐시에 접근하고 2차까지 실패시 더 큰 실패 손실이 발생한다.
그렇기 때문에 1차 캐시의 설계는 적중시간 최소화에 초점을 두고 2차 캐시의 설계는 실패율 최소화에 중점을 둔다.
2차 캐시는 실패율 최소화에 중점을 두었기 때문에 더 높은 연관 정도가 많이 사용된다.
가상 머신: 여러 개의 운영체제가 하드웨어 자원을 공유할 수 있다.
가상 메모리: 메인 메모리를 2차 저장 장치의 캐시로 사용하는 기술.
가상 메모리와 캐시에 적용된 개념이 같더라도 역사적 뿌리가 다르므로 서로 용어가 다르다
페이지 부재가 발생하면 OS가 제어를 넘겨받아서 인터럽트를 처리한다.
가상 메모리에서는 성능의 문제로 즉시 쓰기가 매우 비실용적이기 때문에 나중 쓰기를 사용한다.
변환 참조용 버퍼(translation-lookaside buf-fer): 페이지 테이블에 접근하는것을 피하기 위해 최근에 사용된 주소 사상을 보관하고 있는 캐시.
TLB 실패나 페이지 부재 예외는 메모리 접근 클럭 사이클이 종료되기 전에 탐지되어야 한다.
--
요약 및 정리
가상 메모리는 메인 메모리와 2차 메모리 사이의 캐시 역할을 담당하는 메모리 계층이다.
프로그램이 메인 메모리의 한계 이상으로 주소 공간을 확장시킬 수 있게 한다.
동시에 활성화된 다수의 프로세스들이 서호 보호된 상태에서 메인 메모리를 공유할 수있게 해준다.
2차 메모리는 쓰는데 시간이 많이 걸리기 때문에 나중 쓰기 기법을 사용한다.
프로세스들의 상호간 보호를 보장하기 위해서는 운영체제만이 주소 변환을 바꿀수 있어야 한다.
프로세서가 주소 변환을 할 때마다 페이지 테이블에 접근시 비용이 너무 커진다. 그 대신 TLB가 페이지 테이블의 캐시 역할을 한다.
캐시, TLB, 가상 메모리는 두 가지 지역성의 원칙에 기반을 둔다.
- 블록을 넣을 수 있는 곳: 한 곳(직접 사상), 몇 곳(집합 연관), 아무데나(완전 연관)
- 블록을 찾는 방법: 인덱싱(직접 사상 캐시), 제한적인 검색(집합 연관 캐시), 완전 검색(완전 연관 캐시), 별도의 검색 테이블(페이지 테이블)
- 캐시 실패 발생시 교체블록: 무작위 또는 LRU
- 쓰기 방법: 계층별로 즉시 쓰기나 나중 쓰기를 사용