캐시란 무엇일까 (캐시 1)

Haiseong Jeong·2022년 10월 2일
3
post-thumbnail

딜레마

싸고 좋은건 없다. 컴퓨터 기억장치도 마찬가지다. 속도가 빠르면 비트당 가격은 높아진다. 빠르고 큰 용량을 가질 수는 없다. 비싸니까...

딜레마로부터 벗어나기

기억장치 딜레마로부터 벗어날 수 있는 방법은 어떤 한 가지 기억장치나 제조 기술에 의존하는 것이 아니라 기억장치 계층(memory hierarchy)을 이용하는 것이다.

메모리와 레지스터

주 기억장치인 메모리는 용량이 크지만 느리다.(사실 메모리도 빠른데..) CPU의 레지스터는 빠르지만 용량이 작다. 이 중간다리를 해줄 무언가가 필요하다.

캐시

캐시는 레지스터보다는 용량이 크고 메모리 보다는 빠르다. Level이 작을수록 빠르고 작다. OS나 CPU는 자동으로 자주 쓰이는 데이터와 자주 쓰일 것 같은 데이터를 메모리에서 캐시로 읽어온다. CPU가 연산을 수행할 때 필요한 데이터를 L1 캐시(Level 1 캐시), L2 캐시, L3, 캐시, 메모리 순서로 찾는다. 캐시는 메모리보다 CPU에 가깝기 때문에 더 빠르게 데이터를 전달할 수 있다.

캐시의 설계요소

여러가지 요소가 있지만 이번 포스팅에서는 가상 주소를 저장하냐 물리 주소를 저장하냐에 따른 캐시의 분류만 다루겠다.

프로그램이 실행될 때

우리의 노트북에서 코드를 작성할때 변수를 만들어 저장을 했다고 하자. 이 변수는 메모리 어딘가에 저장될것이다. 이 소스를 컴파일해서 친구 집에서 실행해보았다고 할때 내 노트북의 변수의 메모리 주소와 친구 집에서의 메모리 주소가 같을까?? 절대 아닐것이다. 메모리의 상황에 따라서 변수가 저장되는 위치는 다를것이다. 그렇다면 CPU는 항상 다른 주소를 어떻게 처리하는 것일까?

프로그램은 자신을 기준으로 가상의 주소(virtual address)를 만든다. 프로그램이 실행되면 실제로 사용되는 주소(pysical address)에 값이 저장된다. 프로그램은 가상주소로 연산을 하고 실제 메모리에는 변환된 주소로 저장된다.

MMU

memory management unit의 약자다. 메모리 관리의 핵심적인 역할을 하는데 바로 위에서 말한 virtual address와 pysical address를 변환(Address Translation)해준다.

캐시와 MMU

MMU가 CPU와 메모리 사이에서 주소변환을 해주어야 하므로 둘 사이에 있어야 할텐데 이 사이에는 캐시가 있다. 그렇다면 둘중에 누가 더 메모리에 가까울까?

정답은 둘다 가능하다. 누가 더 가까우냐에 따라서 Logical Cache와 Pysical Cache로 나누어진다.

Logical Cache

캐시에 가상주소가 저장된다. 캐시가 MMU보다 Processor에 가깝다.


Pisycal Cache

캐시에 실제 주소가 저장된다. 캐시가 MMU보다 메모리에 가깝다.

누가 더 좋을까?

프로세서가 필요한 값을 찾을때 캐시를 먼저 탐색한다. 그 말은 Pisycal Cache를 사용하게 된다면 모든 경우에 대해서 MMU를 거쳐서 주소변환을 해줘야 한다는 것이다. 이와 다르게 Logical Cache는 캐시에 값이 존재하면 주소변환 없이 바로 사용할 수 있기 때문에 성능적으로는 Logical Cache가 좋다고 말할 수 있겠다.

문제가 있다..

Logical Cache가 훨신 좋아보인다. 하지만 Logical Cache를 사용할 때 문제가 하나 있다. 프로세스가 여러개인 멀티프로세스 환경일 때다. 가상 주소는 유일한 값이 아니다. pid가 101번인 프로세스가 100번 가상주소에 값을 저장했는데 Context Switching이 일어나 pid 102번 프로세스가 100번 가상주소의 값을 필요로 한다 하면 102번 프로세스는 자신의 값이 아닌 값을 읽게 되버리는 것이다.

마무리하며

이 문제를 해결하는 방법은 다루지 않겠다. 컴퓨터 구조 과목의 범위를 넘어가는 것 같다. 다음 포스팅에서는 mapping 방식과 캐시의 다른 설계요소를 공부해보겠다.

profile
나는 개발자다. 5000만큼 코딩한다.

1개의 댓글

잘 읽었습니다.

답글 달기