해결된 질문
작성
·
562
1
컨텍스트 스위칭에서 캐시 플러시가 발생한다고 되어 있는데,
이는 프로세스 간의 컨텍스트 스위칭이 아니라 스레드간 컨텍스트 스위칭에서도 발생하는지 궁굼합니다.
왜냐하면 스레드는 주소 공간을 공유하기 때문에 데이터 영역은 플러시해야겠지만, 명령어 영역은 플러시 하지 않아도 되는거 아닌가 생각이 듭니다.
또한 캐시를 플러시 한다는 뜻이 캐시의 데이터를 메모리에 반영하는, 즉 write-back 동작인지도 궁굼합니다.
제가 검색을 통해 찾아봤을 때는 캐시 flush는 캐시를 invalidate 하여 캐시를 메인 메모리에 반영하지 않고 초기화만 하는 것으로만 나왔습니다.
그런데 캐시 플러시가 메인 메모리에 반영하지 않는다면 데이터가 없어져 버리니, 제가 알아본 개념이 잘못된 것이 아닌가 합니다.
제가 자바로 실행했을 때 역시 컨텍스트 스위칭이 발생하면서 캐시 데이터가 메인 메모리로 반영이 되고, 그 값을 가져옴으로써 스레드가 종료될 수 있었습니다.
답변 2
0
답변 감사합니다!
그렇게 된다면 캐시에 쓴 데이터가 메인 메모리에 반영되는 시점은 플러시 되는 시점이라기 보다는 어느 시점에 되기는 한다 정도로만 이해하면 될까요??
0
.
맞습니다. 일반적으로 스레드간의 컨텍스트 스위칭은 Cache Flush가 발생하지 않습니다. 말하고자 한 것은 Context Switching을 피하자라는 것이었는데 강의를 쉽게 만들기 위해 복잡한 부분은 제거 하였는데 이 부분을 감안하더라도 최악의 경우 Cache Flush가 발생한다라고 말했어야 했습니다.
.
자세하게 설명드리지 않다보니 혼란을 겪으신거 같습니다. Cache에 쓰기를 할 때 쓴 데이타는 CPU의 Write Buffer에 남게 됩니다. 별도의 Buffer가 있기 때문에 Cache를 Flush해도 데이타가 유실되지 않습니다. Write-Back이냐 Write-Through냐는 CPU 아키텍처에 따라 다릅니다. 요즘 CPU는 이 두가지 보다 훨씬 복잡합니다. 다만 Write-Back에 가깝다라고 말 할 수 있을 거 같습니다.
보장할 수 있는 건 어떤 경우에도 Write한 Data는 Main Memory에 써진다는 겁니다.
이 그림을 보시면 더 이해가 잘 되실거 같습니다.
.
답변이 되었나요?
네 맞습니다. 그리고 바로 메모리에 쓰도록 강제할순 있습니다. 강의에서는 Volatile.Write로 소개하고 있습니다