프로세서 (CPU : Central Processing Unit)
프로세서는 연산과 모든 컴퓨터 장치의 제어를 담당한다.
프로세서 내부에는 메모리인 register를 가지고 있는데
이 register는 컴퓨터 내에 있는 메모리 중에서 "가장 빠르고",
"프로세스가 사용할 데이터를 저장"한다
register는 다양하게 분류되는데
로 나뉜다.
사용자 가시 레지스터는
사용자 불가시 레지스터는 보통 전용 레지스터로
우리가 작성한 코드를 기반으로 프로세서가 동작하는데 필요한 레지스터들이 대부분이다.
컴퓨터에서 사용하는 "데이터 저장장치"를 모두 메모리라고 부른다
CPU내부에는 레지스터 뿐 아니라 코어에서 떨어져있는 캐시라는 메모리도 가지고 있다.
메인 메모리는 프로세서가 실행할 프로그램, 데이터를 저장하는데
보조기억장치에서 바로 프로세서로 보내지 않는 이유는
CPU의 성능이 비약적으로 발전하면서
보조기억장치와의 속도차이가 너무 심해졌기 때문이다.
따라서 CPU보단 느리지만 적당히 차이가 나는 메인메모리를 사용하게 되었다.
CPU내부에 캐시가 있다고 했는데
캐시도 위와 같은 이유로 CPU와 메인메모리간의 속도차이를 줄이기 위해 사용한다.
일반적으로 캐시는 CPU가 알아서 관리하는데
먼저 CPU는 캐시에게 원하는 데이터블록이 있는지 물어보고
없다면 캐시가 메인메모리로 가서 데이터블록을 가져와서 CPU에게 전달한다.
데이터가 캐시에 있는 것을 cache hit
없는 것을 cache miss라고 부른다
보통 캐시의 크기가 작기 때문에 원하는 데이터가 캐시에 없을 경우가 매우 많다고 생각할 수 있지만
지역성(locality)이라는 특성때문에 cache hit가 날 확률이 높다.
지역성은 크게 공간적(spatial)/시간적(temporal) 지역성이 있는데
공간적 지역성은 한번 참조하면
보통 참조한 주소와 인접한 주소를 참조한다는 특성이다.
시간적 지역성은
for문 등 한번 참조한 주소를 곧 다시 참조한다는 특성이다.
이러한 특성을 알아야 하는 이유를 예를 들어보자면
모든 배열 값을 더해서 x에 저장하는 2차원 배열의 for문 코드를 예를 들 수 있다.
위의 A, B케이스 처럼 2차원배열의 for문 순서에 따라 cache hit의 효율이 다른데
캐시는 공간적 지역성을 위해 메모리블록에 인접한 블록들도 한꺼번에 캐시에 저장하는데
이를 cache line이라고 한다.
따라서 B처럼 코드를 짤 경우 cache miss가 많이 일어날 것이다.
시스템버스는 하드웨어 간 통신하는 통로이다.
간단하게 동작하는 것을 보면
위와 같이 동작한다.