본문 바로가기
CS/컴퓨터 구조

[Chapter 5.3 컴퓨터 구조 및 설계] 캐시 참조 실패와 성공의 처리

by 베어 그릴스 2022. 7. 28.
320x100
본 정리는 CS422-컴퓨터 구조 및 설계 : 하드웨어/소프트웨어 인터페이스. David A. Patterson, 존 헤네시 책을 바탕으로 하고 있음을 미리 알립니다.

 

캐시의 참조는 Read가 성공한 경우 실패한 경우, Write가 성공한 경우 실패한 경우 두 가지가 있다.

1. Read hits


캐시에 데이터가 있어서 바로 읽어올 수 있는 경우를 말한다.

해당 경우가 대부분이어야 컴퓨터의 성능이 비약적으로 증가한다.

 

 

2. Read misses


캐시에 원하는 데이터가 없어서 메인 메모리로부터 캐시에 원하는 데이터를 가져와야하는 경우이다.

 

메인 메모리로부터 데이터를 가져오는 절차는 다음과 같다.

  • 현재 진행하던 명령어를 stall 한다.
  • 원래의 PC 값을 메모리로 보낸다.
  • 메인 메모리에 읽기 동작을 지시하고 메모리가 접근을 끝낼 때까지 기다린다.
  • 메모리에서 인출한 데이터를 데이터 부분에 쓰고, 태그 필드에 주소의 상위 비트를 쓰고 유효 비트를 1로 만듦으로써 캐시 엔트리에 쓰기를 수행한다.
  • 명령어 수행을 첫 단계부터 다시 시작하여 캐시에서 명령어를 가져온다. 이제는 필요한 명령어를 캐시에서 찾을 수 있다.

캐시 엔트리에 메모리 주소의 데이터가 어떻게 업데이트되는지는 다음 글을 참고하길 바란다.

 

[Chapter 5.2 컴퓨터 구조 및 설계] 직접 사상 캐시의 구조와 원리

본 정리는 CS422-컴퓨터 구조 및 설계 : 하드웨어/소프트웨어 인터페이스. David A. Patterson, 존 헤네시 책을 바탕으로 하고 있음을 미리 알립니다. 캐시의 구조 메모리 계층 구조에서는 상위 계층에

developbear.tistory.com

 

 

3. write hits


캐시에 기본적으로 데이터가 먼저 쓰이는데, 캐시에 데이터가 쓰였을 때 하위 계층의 데이터들은 이 사실을 모르기 때문에 데이터를 서로 일치시켜야 하는 과정이 필요하다.

 

이 때문에 처리가 두 가지로 나뉜다.

  1. 캐시와 메모리의 데이터가 일관되어야만 한다.
    1. 항상 데이터를 메모리와 캐시에 같이 쓴다. 이를 즉시 쓰기(write-through)라고 한다. / 그러나 이렇게 처리하면 모든 쓰기가 메인 메모리를 거쳐야 하기 때문에 캐시를 이용하는 것의 장점이 사라져서 좋은 성능을 내기가 어려워진다.
  2. 캐시와 메모리의 데이터가 일관되지 않음을 허용한다.
    1. 새로운 값은 우선 캐시 내의 블록에만 쓰고, 나중에 캐시에서 데이터가 쫓겨날 때 쓰기에 의해 바뀐 블록이면 메모리에 그제서야 써진다. 이를 나중 쓰기(write-back) 방식이라고 한다. 이를 위해서 메모리에 써야 되는 캐시 블록에 dirty bit이 추가로 필요해진다. 나중 쓰기 방식을 위해 데이터를 캐시와 쓰기 버퍼(write buffer)를 사용할 수도 있다. 버퍼를 이용하여 프로세서는 메모리에 쓰지 않고 버퍼에만 값을 쓰고 진행하고 진행하는 동안 버퍼가 메인 메모리에 값을 쓰게 된다.

 

4. write misses


Read miss의 과정을 똑같이 거쳐서 cache로 원하는 데이터를 가져온 후 write hits의 과정을 거쳐 진행한다.

 

이때 쓰는 방법도 다음 두 가지로 나뉜다.

  1. write allocate (쓰기 할당) : 일단 전체 블록을 메모리에서 읽어 온 후 블록 중에서 쓰기 실패를 발생시킨 워드만 덮어 씌우는 방법:
  2. No-write allocate(쓰기 비할당) :메모리에서 데이터를 가져오는 과정과 캐시에 쓰는 과정을 생략하고, 쓰기 버퍼를 이용해 메모리에 있는 블록의 해당 영역만 갱신하는 방법. 이 방식을 쓰는 이유는 운영체제가 메모리의 한 페이지를 모두 지워 버리는 것과 같이 프로그램이 때때로 데이터의 모든 블록을 쓰기 때문이다. 이 때는 쓰기 실패했을 때 데이터를 가져오는 경우가 불필요해져서 해당 방식을 사용한다.

 

728x90