주기억장치에는 크게 RAM과 ROM 두 가지가 있고, '메모리'라는 용어는 주로 RAM을 지칭한다.
RAM의 용량이 많을 수록 기억하고있는 프로그램이 많으므로 성능이 좋다고 말할 수 있다.
RAM의 용량이 클 수록 많은 프로그램들을 동시에 실행하는 데에 유리하다.
DRAM, SRAM, SDRAM, DDRSDRAM이 대표적이다.
대역폭
: 데이터를 주고 받는 길의 너비
주소에는 물리 주소와 논리 주소가 있다.
물리 주소: 메모리 하드웨어가 사용하는 주소
논리 주소: CPU와 실행 중인 프로그램이 사용하는 주소
물리 주소의 데이터를 메모리 관리 장치(MMU)를 통해 변화하여 논리 주소에 저장하고 CPU는 논리 주소의 데이터를 이용하여 연산한다.
MMU에서 베이스 레지스터값을 이용하여 저장한다.
예를 들어 A프로그램 100번지에 0을 저장하라는 명령을 수행할 경우
A프로그램의 베이스 레지스터가 10000이라고 가정할 경우
논리 주소 = 100, 베이스 레지스터 = 10000 이므로 물리 주소는 10100이 된다
따라서 물리 주소 10100에 0을 저장한다.
베이스 레지스터: 프로그램의 가장 작은 물리 주소
논리 주소: 프로글매의 시작점으로부터 떨어진 거리
만약 논리 주소가 메모리 범위 밖의 데이터에 대한 명령을 할 경우는 어떻게 될까?
-> 베이스 레지스터와 값이 더해졌을 경우 엉뚱한 물리 주소의 값이 변경된다.
-> 따라서 한계 레지스터
를 이용한다.
즉, 한계 레지스터 값을 지정한다
베이스 레지스터 값 < 프로그램 < 베이스 레지스터 값 + 한계 레지스터 값
이 범위를 벗어나는 논리 주소가 명령될 경우 인터럽트를 발생시켜 실행을 중단한다.
CPU가 연산을 아무리 빨리 한다고 해도 메모리에 접근하는 시간이 느리면 CPU의 빠른 연산 속도는 사용할 수 없다. 이를 극복하기 위한 저장 장치가 캐시 메모리이다.
빠르고 용량이 큰 저장 장치는 없다.
저장 장치의 특징
저장 장치 계층 구조
라고 한다.위에서 말했듯 캐시 메모리는 CPU의 연산 속도와 메모리 접근 시간을 최대한 맞추기 위해 만들어졌다.
따라서 CPU와 메모리 사이에 위치하고 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치이다.
굳이 비유를 하자면 메모리는 '물건은 많지만 집과는 멀리 떨어져 있어 오래 걸리는 대형 마트'이고, 캐시 메모리는 '물건이 많지는 않지만 가까이 있는 편의점'이라고 보면 된다.
일반적으로 L1, L2, L3가 있고 L1, L2는 코어 내부에, L3는 외부에 위치해 있다.
1-2-3 순으로 빠름 - 느림 순이자 소 - 대 순이다.
L1, L2는 각 코어마다 고유한 캐시 메모리로 할당되고, L3는 여러 코어가 공유하는 형태
L1캐시는 조금이라도 접근 속도을 빠르게 만들기 위해 L1I과 L1D로 나누는 분리형 캐시
가 있다.
L1I는 명령어, L1D는 데이터를 저장한다.
캐시 메모리에는 무엇을 저장할까 ?
CPU가 사용할 법한 대상을 예측하여 저장한다.
예측한 데이터가 실제로 들어맞아 캐시 메모리 내 데이터가 CPU에서 활용될 경우
캐시 히트
라고 한다. 반대로 틀려서 메모리에서 직접 가져와야 하는 경우를캐시 미스
라고 한다. 캐시 미스가 일어날 경우 캐시 메모리의 이점을 활용하지 않기에 자주 발생할 경우 성능이 떨어진다.
캐시 히트가 일어나는 비율을 캐시 적중률 이라고한다.
캐시 적중률 = 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)
참조 지역성의 원리를 이용하여 캐시 메모리는 메모리로부터 가져올 데이터를 결정한다.
1. CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.
2. CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다.
예를 들어
1.번의 경우 -> 변수 생성 시 그 변수를 다시 사용한다. -> 시간 지역성
2. CPU가 Xcode를 실행할 적에는 Xcode 프로그램이 모여 있는 공간 근처를 집중적으로 접근할 것이다. -> 공간 지역성