MSI, MESI, MOESI 프로토콜의 차이점 정리
MSI, MESI, MOESI는 멀티코어의 각 캐시가 가진 라인에 상태를 붙여, 같은 주소의 데이터가 어긋나지 않도록 하는 프로토콜입니다. MSI는 Modified, Shared, Invalid의 3가지 상태만 있는 기본형입니다. MESI는 Exclusive(자신만 가지고 있고 메모리와 같은 내용)를 추가해, 다른 코어가 가지고 있지 않은 데이터에 쓸 때 버스 통신을 생략할 수 있습니다. MOESI는 여기에 Owned 상태를 더해, 수정한 데이터를 메모리에 라이트백하지 않은 채 다른 캐시와 공유할 수 있습니다.
| 비교 항목 | MSI | MESI | MOESI |
|---|---|---|---|
| 상태 수 | 3개(M, S, I) | 4개(M, E, S, I) | 5개(M, O, E, S, I) |
| Modified(M) | 자신만 가지고 있고, 내용이 메모리와 다름 | 동일 | 동일 |
| Shared(S) | 다른 캐시도 가지고 있을 가능성이 있음. 내용은 메모리와 같음 | 동일 | 다른 캐시도 가지고 있을 가능성이 있음. 내용이 메모리와 다를 수도 있음(O 상태 라인이 있을 때) |
| Exclusive(E) | 없음 | 자신만 가지고 있고, 내용이 메모리와 같음 | 있음(MESI와 동일) |
| Owned(O) | 없음 | 없음 | 내용은 메모리와 다르지만 다른 캐시도 S로 공유 중. 메모리 라이트백 책임을 가짐 |
| 다른 코어가 가지고 있지 않은 데이터를 읽을 때 | S 상태로 들어옴 | E 상태로 들어옴 | E 상태로 들어옴 |
| 그 데이터에 쓸 때 | S에서 M으로 바꾸기 위해 다른 복사본을 무효화하는 요청을 버스 등에 냄 | E에서 M으로 통신 없이 바뀔 수 있음 | E에서 M으로 통신 없이 바뀔 수 있음 |
| M 라인을 다른 코어가 읽을 때 | 메모리에 라이트백하고, 양쪽 모두 S 상태가 됨 | 메모리에 라이트백하고, 양쪽 모두 S 상태가 됨(데이터는 캐시에서 직접 전달하기도 함) | 라이트백하지 않고 데이터를 전달하며, 자신은 O 상태, 상대는 S 상태가 됨 |
| 메모리 라이트백 | 수정된 라인을 다른 코어가 읽을 때마다 발생 | 수정된 라인을 다른 코어가 읽을 때마다 발생 | O 상태 라인이 축출될 때까지 미룰 수 있음 |
| 상태 비트 수와 복잡도 | 2비트. 가장 간단함 | 2비트. 중간 | 3비트. 가장 복잡함 |
수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.