캐시 플러시 관련 궁굼한게 있어서 질문 드립니다!!
컨텍스트 스위칭에서 캐시 플러시가 발생한다고 되어 있는데,
이는 프로세스 간의 컨텍스트 스위칭이 아니라 스레드간 컨텍스트 스위칭에서도 발생하는지 궁굼합니다.
왜냐하면 스레드는 주소 공간을 공유하기 때문에 데이터 영역은 플러시해야겠지만, 명령어 영역은 플러시 하지 않아도 되는거 아닌가 생각이 듭니다.
또한 캐시를 플러시 한다는 뜻이 캐시의 데이터를 메모리에 반영하는, 즉 write-back 동작인지도 궁굼합니다.
제가 검색을 통해 찾아봤을 때는 캐시 flush는 캐시를 invalidate 하여 캐시를 메인 메모리에 반영하지 않고 초기화만 하는 것으로만 나왔습니다.
그런데 캐시 플러시가 메인 메모리에 반영하지 않는다면 데이터가 없어져 버리니, 제가 알아본 개념이 잘못된 것이 아닌가 합니다.
제가 자바로 실행했을 때 역시 컨텍스트 스위칭이 발생하면서 캐시 데이터가 메인 메모리로 반영이 되고, 그 값을 가져옴으로써 스레드가 종료될 수 있었습니다.
Answer 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에 써진다는 겁니다.
이 그림을 보시면 더 이해가 잘 되실거 같습니다.

.
답변이 되었나요?
OAuth방식 강의 문의
0
6
0
싱글턴패턴
0
2
1
패키지 구분에 대해 궁금한게 있습니다
0
7
1
순위가 동률일 때의 처리에 대해 질문드립니다.
0
10
2
섹션4 AWS NAT Instance생성하는 과정에서 오류가 지속해서 발생합니다.
0
11
1
코드 관련 질문
0
21
2
스프링부트 서버 에러나요
0
17
1
코드를 첨부해야하는 이유가 있나요?
0
20
2
섹션7 수업자료 업로드 부탁드립니다.
0
22
2
Service Create/Update Record 운용과 Delete Record 미운용의 차이 질문
0
18
1
간단한 오타 제보입니다.
0
19
1
큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.
0
34
2
실제 FK제약조건을 설정하지 않는이유
0
35
2
조회속도 개선에서 더 개선하는 방법이 궁금합니다.
0
28
2
Dictionary Key를 int에서 string으로 변경한 이유에 대한 문의
0
19
1
라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항
0
36
2
user-service jwt
0
32
2
JPA Repository 질문이 있습니다!
1
33
2
페이지네이션 처리를 쿼리에서 하는 방식 질문
1
36
1
어떻게 상호배제가 이루어지는지 잘 이해가 안갑니다
1
443
2
임계영역에 2개 이상의 스레드가 올 수 있는지요?
0
401
2
1_Process와 Thread protobuf 부분 질문
0
299
1
혹시 학습한 내용을 블로그에 정리해도 될까요?
1
461
1
코틀린으로 해당 C# 예제를 비슷하게 만들어봤는데, 제가 잘못 작성한 걸까요?
1
717
4

