메모리에 데이터가 Write되는 정책인 Write-Back, Write-Through과 Cache Miss가 발생했을 때의 정책인 Allocate, no-Allocate에 대해 정리해볼게요.
본격적으로 알아보기 전에 Memory System이 어떻게 구성되어 있는지 살펴봅시다.
CPU가 Memory에서 데이터를 Read 해오거나 Memory에 데이터를 Write할 때, 당연히 Memory에 접근해야겠죠.
단순하게 생각하면 위와같이 CPU와 메인 Memory가 Direct하게 연결되는 구조를 생각할 수 있습니다.
하지만 DRAM과 같은 메인 Memory는 CPU에 비해 속도가 느리죠.
만약 위와 같이 연결한다면 CPU는 Memory를 기다리다가 빠른 속도로 동작하지 못할 거에요.
이런 속도의 문제를 해결하기 위해 존재하는 것이 잘 아시는 캐시 Memory이고 아래와 같은 모양새가 되겠네요.
캐시 Memory는 메인 Memory 내용의 일부를 올려놓은 복사본이라고 보시면 되는데
캐시 Memory는 속도는 빠르지만 용량이 메인 Memory에 비해 매우 작죠.
따라서 자주 접근하는 데이터나 빨리 처리해야하는 데이터들을 올려놓고 관리를 하게됩니다.
상황이 이렇다 보니 원하는 데이터가 Cache Memory에 있을수도 있고(Cache Hit) 없을 수도(Cache Miss) 있겠네요.
Cache Hit가 된다는 것은 본래의 목적대로 원하는 데이터에 빠른 Access를 한다는 것이기에 문제가 없지만
Cache Miss가 된다는 것은 해결을 해주어야 하는 문제입니다.
이렇게 Cache Miss가 발생했을 때 처리하는 정책인 Allocate, no-Allocate도 Write-Through/Write Back을 알아본 뒤 알아보도록 할게요.
- Write-Through
단어를 좀 보고 가볼까요? Write-Through를 보면 뭔가 Driving-Through가 생각나지 않나요:)
차를 타고 햄버거 가게를 관통해 주문하는 Driving-Through 같이
저는 여기서 Through의 의미를 '관통한다'는 뜻으로 이해했어요.
정의를 해보자면 Write-Through는 Write를 할 때, Cache Memory와 Main Memory 모두에 업데이트를 하는 방식입니다.
방금 위에서 보고왔던 Memory System을 볼게요.
위와 같이 CPU에서 어떤 Data를 Write를 할 때, Cache에도 Write를 하고 Memory에도 Update가 하는 '관통하는 듯한' 방식이죠.
근데 CPU가 Cache Memory에 Write를 하는 건 알겠는데 Main Memory에는 어떻게 Write를 해야할까요?
CPU가 직접 Main Memory에 접근하여 Write를 할까요? 그러면 Cache Memory를 따로 둔 이유가 없죠.
CPU가 Cache Memory에 Write를 함과 동시에 Main Memory에도 Data를 Update를 하기 위해서 Buffer가 존재합니다.
위와 같이 Buffer를 두면 CPU가 직접 Main Memory에 Write를 하지 않고 Cache Memory에만 Write하면 되기 때문에 CPU가 대기하는 시간을 줄일 수 있겠습니다.
- Write-Back
Write-Through와 반대로 Write-Back은 Cache Memory에만 Data를 Write하다
Cache Memory가 새로운 Data block으로 교체되는 때에 Main Memory에 업데이트 하는 방식입니다.
새로운 Data Block으로 교체된다는 의미는 Cache Memory는 Main Memory의 데이터 일부를 복사해놓은 곳이라고 했죠.
Main Memory의 A라는 데이터 일부가 복사되어 있는 Cache Memory를 사용하다가
Cache Memory에 Main Memory의 B라는 다른 데이터로 교체하는 것을 Data Block을 교체한다고 이야기합니다.
암튼 Write-Back에서는 Data Block이 교체되지 않는 한, Main Memory에 Data는 업데이트 되지 않고 Cache Memory만 계속 수정, Overwrite되게 됩니다.
- Allocate/no-Allocate
이제는 Cache-Miss가 발생했을 때의 정책인 Allocate/no-Allocate에 대해 정리해볼게요.
CPU가 어떤 Data를 Write하려고 Cache Memory에 접근했는데
Write하려는 Main Memory 주소에 대한 복사본이 Cache Memory에 존재하지 않을 때, Cache-Miss가 발생했다고 합니다.
Cache-Miss를 어떤 방식으로 처리할지 살펴봅시다.
· no-Allocate
no-Allocate는 Cache Miss시, Main memory의 블록만 수정해주는 방식입니다.
Cache Memory에 접근했을 때, 원하는 주소가 없었지만 근본적으로 Write되어야 하는 공간은 Main Memory이기 때문에 Main Memory에만 Write하고 빠지겠다는 의미가 됩니다.
· Allocate
Allocate는 Cache Miss시, Main memory의 블록을 Cache Memory에 할당해 Cache Memory에 Write하는 방식입니다.
Cache Memory에 접근했을 때, 원하는 주소가 없었으니까
Main Memory의 해당 블록을 Cache Memory로 로드하여 Cache를 갱신하고 Cache Memory에 Write를 하겠다는 겁니다.
이름 그대로 Cache를 새로 할당(Allocate)해주는 것이네요.
최근댓글