본문 바로가기

컴퓨터 구조론( MIPS )

메모리 계층 구조 - cache 메모리 1

728x90
반응형

안녕하세요! WH입니다.

오늘은 메모리 계층 구조 중에 

cache 메모리에 대해 알아볼 겁니다.

 

메모리 계층 구조

 CPU가 원하는 데이터를 저장하고 있는 장소인데요. 예시를 뭘로 들어볼까요. 그래요. 시험 기간의 대학생을 예로 듭시다. 대학생 시절로 돌아가고 싶으니까요. 뭐 여튼, 자 내가 시험 공부를 하려고 해요. 이번 시험에 컴퓨터 구조론에 캐시 메모리에 대해 시험에 나온다고 가정해봅시다. 나는 시험 공부를 해야합니다. 그래서 자료를 찾아봐요.

 

1. 내 머리 속에 캐시 메모리에 대한 내용이 있는지 체크합니다 ( Register ) 

  - 없네요? 평소에 공부좀 하지

 

2. 그래서 동기한테 물어봤어요. ( Cahce )

 - 없데요. 끼리끼리 어울려다닌다더만, 그래도 친구라고 과방에 가보겠답니다

 

3. 이번에는 과방에 가봤어요 ( Main memory or RAM )

 - 동기가 과방에 가봤는데 이번에도 못찾았습니다. 그니까 이번에는 과에서 찾아주겠데요

 

4. 그래서 학교 도서관을 찾아갑니다. ( Hard dist )

 - 과 차원에서 학교 도서관에 갔더니 다 빌려가서 없다네요. 친절도 해라 학교 차원에서 구해주겠답니다.

 

5. 마지막으로 국립 도서관을 찾아갔습니다. ( Magetic Tape )

 - 드디어 찾았네요

 

책은 국립 도서관을 거쳐, 학교 도서관으로 오고, 과방으로, 그리고 동기를 통해 나에게 오게 되겠지요. 드디어 시험공부를 할 수있게 되었습니다.

위의 예시는 속도와 저장 공간에 대한 내용이 모두 포함 되어 있는데요, 나( cpu )와 가까울 수록 내( cpu )가 공부( 데이터 연산 )를 빨리 할 수 있고, 나랑 멀어질 수록 책( 데이터 엑시스 )을 받기에 오랜 시간이 걸리겠네요  이해가 가나요? 이제는 메모리 측면에서 설명드리겠습니다. 위로 갈수록 속도가 빨라요. 무슨 속도요? 접근 및 처리 속도요! 근데 빠르면 비싸요. 아래로 가면 느려요. 싼대신 많은 양을 저장 할 수 있어요. 우선 여기까지가 개관입니다. 이 계층은 이 정도만 알고 가자구요.

 

Cache 메모리

  우리는 프로세서에서 데이터 패스에 대해 배웠습니다. 데이터패스의 메모리들이 cache로 대체 될 수 있다고 생각하시면 되겠습니다.  우선 Cache에 대해 아주 단순한 캐시에 대해 살펴보겠습니다.

  요청하기 전 캐시는 X1 - Xn-1 이 존재하고, 프로세서가 워드 Xn은 요구했다고 가정해 봅시다. 이 요구는 실패를 발생시키고 워드 Xn을 메모리로부터 캐시로 가져오게 합니다.

  그럼 의문이 생기겠죠? 그리고 그 의문이 바로 우리가 해결해야할 문제입니다.

 

의문

1. 데이터가 캐시 내에 있는지 어떻게 알 수 있는가?

2. 있다면 어떻게 찾을 수 있는가?

 

  각 워드가 캐시 내의 딱 한 종소에만 있을 수 있다면 워드가 캐시 내에 있는지 없는지를 바로 알 수 있겠죠? 메모리의 각 워드에 캐시 내의 위치를 할당하는 가장 간단한 방법은 메모리 주소에 기반을 두고 할당하는 겁니다.  어떻게요?

 

( 블록 주소 ) modulo ( 캐시 내에 존재하는 전체 캐시 블록 수 )

 

만약 캐시에 존재하는 블록 수가 2의 지수승 이라면, 밑2인 log( 캐시 내 존재하는 블록 수) 를 취하면 됩니다.

아 말이 어려운데요? 그림과 함께 예를 들어 보여드리겠습니다.

 

Cache의 블록수는 8개로 ( 밑이 2인 log8 = 3 ) 임으로 첫번째 부터 000 001, 010, 011, 100, 101, 110, 111 이렇게 블록 이름을 가지게 됩니다. 그리고 메모리에서는 저 이름이 일치하는 애들을 가지고 와서 같은 곳에다가 넣으면 된답니다.

 

즉 Cache 001

 

: Memory 00001 01001 10001 11001

이렇게 4 녀석이 들어갈 수 있게 되는 것이지요. 여기까지 쉬운데요? 그럼 한가지 문제가 더 있습니다. 캐시는 하나인데 4 녀석이나 들어갈 수 있네요?  그럼 프로세서가 요구한 놈이 누구인지 어떻게 알죠? 이 때 사용하는 것이 tag입니다.

 

tag

: Memory 00001 01001 10001 11001

 

 분홍색 글씨가 바로 tag 입니다. 즉 상위 2 비트가 태그입니다. 하위 3비트는 메모리에서 블록의 인덱스로 쓰였으므로 생략합니다.  tag란 특정 계층에서 해당 블록이 요청한 워드와 일치하는 지를 알려 주는 주소 정보를 담고 있는 필드랍니다. 그래요 이제는 어디있는지 알았다고 합시다.

 

  아직도 한거지 문제가 있어요. 캐시 블록이 유효한 정보를 가지고 있는지 알아야 하지 않겠어요? 그니까 만약에 프로세서가 처음 작업을 시작해서 비어 있어요. 그럼 태그는 의미가 없잖아요. 뭐 위에서 든 예시처럼 그 경우가 아니더라도 비어 있는 경우는 태그를 무시해야겠죠. 엔트리가 타당한 주소를 포함하는지 표시하기 위해 유효비트를 캐시에 첨가한답니다. 유효비트가 1으로 설정되어 있지 않다면, 유효한 블록이 없는 것이랍니다. 

 

지금부터 특급 예시 들어갑니다.

1 번과 같이 캐시 초기에는 유효 비트 ( V ) 가 꺼진 상태(N)로 모두 비어 있습니다. 프로세서는 주소들을 요정하는데 요청이 실패( miss ) 했는지, 적중 ( hit ) 했는지에 따라 작동하게 되는데요. 만약 실패 했다면, 해당 부분들을 바꾸고 가져오게 메모리에서 가져오게 된답니다.

 

그림을 가지고 예시를 들어드리겠습니다. 우선 캐시는 1024 ( 4 kiB )워드로 구성되어 있습니다. 주소 체제는 32 bit 체제를 씁니다. 캐시는 1024 개의 워드를 가지고 있고, 하나의 블록 크기는 1워드 이므로, 10비트가 캐시를 인덱스하는 데 쓰입니다. 또한 맨 오른쪽 offset은 모든 주소가 4바이트 로 정렬되어 4의 배수이기 때문에 2비트를 사용하여 워드 내부에서 바이트를 구분해 주어야 합니다.( 캐시 1024, 4 Kib = 4096 byte , 따라서 4096 / 1024 =4 , 4 = 2bit ) 나머지 20 비트는 tag의 역할을 하게 되겠지요. 어 잠깐만요, 왜 4Kib 에요?

 

  우선 무조건 들어가는 비트 수 먼저 생각해 봅시다. 가정을 먼저 하겠습니다.

 

1. 32비트의 주소 

2. 직접 사상 캐치

3. 2^n 블록을 가지고 있는 캐시

4. 캐시 블럭의 크기 2^m개 워드이고 m 개의 워드가 들어감

 

  시작합니다.

1. 32 비트의 주소 -> offset 2 비트 필요

3. 2^n 블록을 가지고 있는 캐시 -> 블록 인덱스에 n개 비트 필요

4. 캐시 블럭의 크기 2^m개 워드이고 m 개의 워드가 들어감-> 워드 구분에 m개의 비트가 필요

 

 

태그 필드의 크기

 32 - ( n + m + 2 )

 

사상 캐시의 전체 비트 수

2^n( 캐시수 ) * ( 2^m *32 ( 블록 크기 ) + ( 32 -n -m -2 ) ( 태그 크기 ) + 1 ( 유효 비트 크기 ) )

 

그런데 일반적으로 캐시 크기는 유효 비트와 태그 필드의 크기는 제외 하고 데이터 크기만 따진답니다. 위의 그림에서는 한 워드가 한 블록의 크기를 m = 0 가 됩니다. 즉 위의 공식에서 태그의 크기와 유효 비트의 크기를 지우고 2^10 * 32 ( bit ) = 2^10* 4 ( byte ) = 4 KiB 가 되는 것이지요.

728x90
반응형