캐시 플러시
IT 위키
- Cache Flush
- 캐시에 들어 있는 데이터를 하위 계층(주기억장치)에 반영하고 캐시를 비우는 동작
캐시는 주기억장치의 일부를 복사해 두고 쓰기 때문에, 어느 순간 캐시의 내용과 주기억장치의 내용이 달라진다. 이 불일치를 해소해야 하는 시점이 있다.
- 프로세스 문맥 교환(Context Switch)
- DMA 전송 전후 — 주변장치가 주기억장치를 직접 읽고 쓰므로
- 여러 프로세서가 같은 메모리를 볼 때(캐시 일관성)
- 전원 차단, 시스템 종료
- 가상 주소 매핑 변경
| 동작 | 내용 |
|---|---|
| Flush | 변경된(Dirty) 블록을 하위 계층에 쓰고 캐시를 비운다 |
| Clean / Write-back | 하위 계층에 쓰기만 하고 캐시는 그대로 둔다 |
| Invalidate | 쓰지 않고 캐시 내용을 무효화만 한다. 변경분은 버려진다 |
| 정책 | 동작 | 플러시 부담 |
|---|---|---|
| Write-Through | 캐시와 주기억장치에 동시에 쓴다 | 항상 일치하므로 플러시 부담이 없다. 대신 쓰기가 느리다 |
| Write-Back | 캐시에만 쓰고 블록이 교체될 때 기록한다 | 빠르지만 불일치 구간이 생겨 플러시가 필요하다 |
플러시 직후에는 캐시가 비어 있으므로 강제 미스(Compulsory Miss)가 몰린다. 잦은 플러시는 성능을 크게 떨어뜨리므로, 필요한 주소 범위만 골라 플러시하는 방식을 쓴다.
