본문 바로가기

별걸다하는 IT/운영체제 OS

[운영체제]캐시 메모리 사상 방식1 - 직접사상 Direct Mapping

[운영체제 목차]


캐시 메모리 사상 방식

캐시 메모리는 저번 포스팅에서 다뤘으니 다 아신다는 가정하에 글을 시작할게요 


캐시는 주기억 장치에서 자주 쓰는 것만 저장해둬서 속도를 빠르게 하는 역할이잖아요?

그러므로 캐시는 주기억 장치보다 크기가 작을 수 밖에 없어요.


캐시 기억장치와 주기억장치 사이에서 정보를 옮기는 것을 사상이라고 하고 

직접 사상 Direct Mapping

연관 사상 Associate Mapping

집합 연간사상 Set Associate Mapping

3가지 방법이 있습니다. 직접 사상부터 찬찬히 살펴보도록 하겠습니다,


직접 사상 - Direct Mapping

쉽게 말하면 메인메모리와 캐시를 똑같은 크기로 나누고 순서대로 매핑하는 것을 말합니다. 블록은 업로드 될 수 있는 지정된 라인을 가지고 있어요. 좀 더 자세한 이해를 위해 풀어써볼까요?


먼저 Mapping을 이해하기 위해, 워드, 블럭, 라인에 관한 설명을 하고 넘어갈게요


메모리를 블럭으로 나누고 캐시는 라인으로 나누는데 나눈다는 컨셉일 뿐이지 실제로 나누는 것은 아닙니다.


이때 블럭 크기는 캐시 라인 크기랑 같아요.

워드는 하나의 번지에서 저장되는 데이터의 단위를 말합니다. 

예를 들어 한 블럭이 4워드면 캐시 한 라인도 4워드가 되는 거죠!

말 그대로 블록은 그림과 같이 세로로 한 블록! 라인은 마치 워드처럼 가로로 하나의 라인!이라 생각하면 됩니다.

라인은 캐시기억장치 각 슬롯에 저장되는 데이터 길이예요. 


자 만약 캐시의 크기가 16워드이고 메모리의 크기가 64워드라고 가정해봅시다.

블럭하나가 4워드면 메모리의 블럭 개수는 64/4해서 16이 되겠죠? 즉 16개 블럭을 가집니다.

마찬가지로 캐시는 16/4해서 4개의 줄을 가질거예요. 하나의 라인이 4워드를 가지니 하나의 블록 크기만큼만 들어갈 수 있겠네요 


컴퓨터는 이진수이기 때문에 64를 표현하려면 2^6 =64 즉 6bit가 필요해요. 즉 첫 번째 워드 주소는 000000, 두 번째 워드 주소는 000001 ... 마지막 64번째 워드 주소는 111111이 될 겁니다. 2진수의 특성에 의해서 두자리만 보면 00 01 10 11 00 01 10 11 즉 2^2=4 단위마다 반복 특징을 띄므로 마지막 2비트는 각 블록의 워드 순번이 되는 것을 알 수 있어요.

111111하면 앞의 4비트 1111, 1+2+4+8 =15행의 뒤의 2비트 11 즉 4번째 워드가 되는거죠 (각 블록 행은 4개의 워드를 가짐!)

이게 블록 하나에 4개의 워드라 가정했기 때문에 2비트로 워드의 순번을 알 수 있는거예요. 2의 2승이 4이기 때문

그래서 6bit 기준으로 마지막 2비트를 block offset이라고 하고 앞의 4bit를 Block number라고 합니다.


그래서 Direct Mapping이 뭐냐고요?

순서대로 블럭 하나 캐시 하나 매치한 것이 Direct Mapping입니다. 

즉 캐시 0라인에는 블럭 0을 캐시 1라인에는 블럭 1을 .... 캐시 3라인에는 블럭 3을, 캐시 4라인에는 블럭 0을.. 이렇게 1대1로 직접 매칭하기 때문에 Direct Mapping이예요. 여기서 0,1,2,3은 블록 순번이예요. 0블럭에는 0,1,2,3 순번의 4개의 워드가 들어가 있고 1블럭에는 4,5,6,7 워드가 들어가 있겠죠? 캐시도 1라인이 4워드 즉 블록크기와 워드의 크기가 일치하기 때문이 이와 같이 블럭과 캐시를 1대 1 매핑할 수 있습니다.


앞에서 설명했다시피 마지막 2bit가 한 블록 안에서 워드의 순번 즉 block내의 offset을 의미합니다.

그런데 블럭 또한 그림을 보면 빨 파 초 보 빨 파 초 보 4개의 반복으로 캐시에 들어갈 라인이 정해집니다. 그래서 block number 4bit 중 뒤의 2bit는 라인 번호를 나타내줘요. 그림에서 보면 빨간색인지 파란색인지 초록색인지 보라색인지 알려주는거죠 

맨 앞 남은 2bit는 tag라고 해서 태그 번호를 나타냅니다. 같은 라인을 공유하는 블록들은 서로 다른 태그를 가집니다. 즉 맨 처음 0 빨강 블록이 0태그이면 4빨강은 1태그여야하는거죠 ㅎㅎ  



예를 들어볼게요

25워드가 어디에 저장되고 어느 위치에 있는지 판별해볼까요? 

25는 011001이므로 맨 뒤 index가 01입니다 즉 2번째에 위치한 워드

그 다음 라인 비트는10, 그러므로 초록색 라인! 교체가 일어나면 2라인에 들어가게 됩니다. 

태그는 01이니까 2번째 태그 ! 즉 라인의 수 만큼 블록이 돌고 두 번째로 반복되는 불록이므로 6 블록인 것을 알 수 있네요.





근데 이 방법은 단점이 있어요. 캐시에서 0번 블록이 0라인에서 수행되다가

사용자가 4번 블록을 사용함으로써 4번 블록이 올라가려해요. 그러면 오랫동안 사용 안한 블럭이 캐시 3라인에 저장되어 있음에도 불구하고 규.칙.에. 의해서 사용률이 높은 0번 블록을 내려야하잖아요. 

즉 단점은 높은 캐시 미스율입니다. 같은 말로 캐시 적정률의 저하!


장점은 사상 과정이 간단하고 작은 용량의 RAM을 캐시 기억장치로 사용하기에 비용히 저렴하다는 장점이 있습니다.

하지만 느낌이 오듯이 요즘 사용되는 방법은 아니겠죠?ㅎㅎ

다음 포스팅에 이어서 연관 사상과 집합 연관사상에 대해 알아볼게요~!