상세 컨텐츠

본문 제목

캐시메모리는 무엇이고 어떻게 활용이 될까??

CS지식 학습

by Tabris4547 2023. 10. 23. 14:52

본문

728x90

"캐시에 저장된 값을 불러옵니다"

컴퓨터를 하다보면 캐시와 관련된 메세지를 종종 만나게 됩니다.

캐시는 일종의 임시저장소로써

컴퓨터의 속도를 더욱 빠르게 만들어주는 역할을 합니다.

이 캐시는 왜 쓰게 되었을까요??

 

메모리계층구조&캐시메모리가 필요한 이유

여러분들이 컴퓨터를 살 때

메모리 용량이 많으면 좋다고 합니다.

그런데, 어떤 메모리용량이 많아야할까요??

위의 그림은 메모리 계층구조에 대한 그림입니다.

위로 갈수록 빠르고 비싼 메모리입니다.

우리가 통상적으로 영화같은 대용량 파일은 하드에 저장하고

실행시에 RAM에 일정량의 데이터를 복사해 임시저장하고,

필요시에 CPU에 전달에 연산을 처리합니다.

 

그런데, 여기서 문제가 생깁니다.

하드디스크는 속도가 느립니다.

그럼 하드에 저장된 프로그램을 계속 넣었다 빼면 엄청 시간이 오래 걸리는건가?

그렇다고 메인메모리,CPU레지스터쪽을 늘리는데에는 비용에 문제가 생기고...

이렇게 나오게 된 것이 바로 캐시입니다.

캐시는 자주 사용되는 데이터를 임시저장합니다.

만약 여러분이 A라는 영화를 자주 실행했다면

A를 캐시에 저장해서

나중에 실행할 때 하드를 접근하지 않고 빠르게 캐시에서 꺼내쓸 수 있도록 도와줍니다.

이렇게 자주쓰이는 메모리를 반복해서 쓰는 걸

"참조 지역성"(locality of reference)라고 부릅니다.

 

캐시메모리 기본구조

가장 기본적인 캐시구조를 보겠습니다.

"direct-mapped cache"라고 부르는 구조로

캐시메모리의 가상주소에

실제 메모리 주소를 직접 연결하는 구조입니다.

캐시에는 하드디스크의 저장된 데이터를

'임시저장'합니다.

그 임시저장한 캐시의 주소를 '가상주소'라고 부르고

실제 메모리의 주소와 직접 매핑합니다.

하지만 여기서 문제가 있습니다.

"만약 캐시의 가상주소가 실제주소랑 다르다면??"

"캐시에 저장된 정보랑 실제정보랑 다르면??"

이를 위해서 

Valid bit와 Tag가 있습니다.

Valid bit는 현재 캐시에 데이터가 있는지를 체크하여

만약 없다면 cache에 새로운 정보를 저장하고 1로 표시합니다.

tag는 블록의 주소를 저장하여

찾을려는 메모리가 캐시의 정보가 일치하는지 확인합니다.

 

캐시 hit&캐시 miss

명령어가 캐시를 볼 때

캐시랑 일치하면 캐시 hit

그렇지 않으면 캐시 miss라고 부릅니다.

위의 경우는 해당 캐시 인덱스에 접근하고

vaild bit가 1로 데이터가 있다고 표시되어있지만

Tag bit가 캐시와 달라 miss라고 표시한 경우입니다.

https://www.youtube.com/watch?v=RqKeEIbcnS8

해당 영상을 참고하여 어떤 식으로

hit와 miss가 이뤄지는지 볼까요?

아직 캐시에 아무것도 저장되지 않은 상태입니다.

첫번째 명령어대로 캐시블럭 set인 11번째로 가면

캐시에 아무것도 저장이 안 되있는 걸 볼 수 있습니다.

캐시와 일치하는 것이 없으니

캐시 miss입니다.

이후, 해당 11번지 주소에

tag를 저장하고 Vaild bit를 1로 표시합니다.

두번째 명령어의 set으로 가면

아직 캐시 블록에 저장되어있는게 없었으므로 miss입니다.

그 후, 해당 캐시에 해당 값을 저장합니다.

그 다음 명령어대로

해당 캐시로 접근합니다.

캐시에 값이 저장되어있고

tag도 일치합니다.

따라서 캐시 hit입니다.

그 다음 명령어도 캐시블록에 값이 존재합니다.

하지만 명령어의 tag와 캐시에 저장된 태그가 다릅니다.

서로의 tag가 다르기 때문에 캐시 miss입니다.

miss가 된 후에는

해당 캐시 블록 tag값에 새로운 tag값을 갱신해줍니다.

 

캐시 구조의 발전

Direct mapped 방식으로 

실제 물리주소와 1:1 매핑을 할 경우,

캐시의 용량이 제한적이고

매핑할 수 있는 물리주소가 한계가 있었습니다..

그래서 나온 연결방법으로

fully associative 와 set associative가 있습니다.

 

Fully associative

fully associative방식에서는

캐시의 어떤 블록이든간에

데이터를 집어넣을 수 있습니다.

즉, 블록번호에 관계없이

캐시를 저장합니다.

그 덕분에 1:1로 맵핑했을 때와 달리

캐시 정보가 많이 저장될 수 있어

cache miss가 상대적으로 적어집니다.

하지만 캐시의 데이터를 살필 때

모든 캐시 데이터를 전부 다 살펴야해서

탐색속도가 높아지는 단점이 있습니다.

 

Set associatvie

set associative는 direct와 fully의 장점을 절충한 방식입니다.

캐시의 구역을 set으로 당어리로 나눠서

자료를 저장하는 방식입니다.

Set Tag로 캐시를 탐색하는 방식으로

먼저 주어진 set번호를 찾아가

해당 tag값이 있는지 여부를 살펴보고

cache hit인지 miss인지를 판단합니다.

이 방식은 set을 덩어리로 나눴기 때문에

fully보다 탐색시간이 줄어들었으며

캐시를 덩어리로 저장하기 때문에

블록 하나하나 저장하는 direct보다

캐시 미스가 줄어드는 장점이 있습니다.

 

활용가능성->가상화

캐시의 원리는 가상화로 어이집니다.

그림처럼 가상머신을 사용하는 경우를 살펴보겠습니다.

프로그램을 개발하다보면

여러 대의 컴퓨터로 시뮬레이션을 돌려야하거나

다른 환경에서 프로그램이 작동되는지 확인해야합니다.

컴퓨터를 여러대 구매하는 방법이 가장 간단하지만

현실적으로 비용부담이 너무 크다는 단점이 따릅니다.

이런 점을 해결하기 위해

가상화라는 개념이 등장했습니다.

이 가상화는 컴퓨터 하드디스크에서

여유공간을 CPU처럼 사용하여

논리적으로 여러 대의 컴퓨터를 사용하도록 만드는 기술입니다.

이때에 캐시에서 물리-가상주소를 연결한것처럼

가상화를 수행할 때 실제주소와 가상 CPU주소를 연결하여

가상머신을 만들 수 있습니다.

 

참고자료

https://www.baeldung.com/cs/cache-direct-mapping

숭실대학교 박민호 교수님 강의자료

Computer Organization and Design RISC-V edition

728x90

관련글 더보기

댓글 영역