[완료] ContextSwitch 와 TLB flush ..???

MyoZen의 이미지

OS 공부하다가 의문점이 있어서 구글링을 해보다가 질문글 올립니다.

Context switch 가 일어날 때, CPU 의 TLB 내용은 모두 없어지나요??

그러니까, 모든 entry 가 invalid 되는건가요??

아니면 새로 cpu 를 점유할 프로세스가 사용 할 entry 는 제외하고 invalid 되는건가요??

감사합니다.

pastime의 이미지

OS를 구현한 방식에

OS를 구현한 방식에 따라 달라질 수도 있겠지만
일반적인 경우라면 context switch 시에
TLB의 모든 항목을 invalidate (혹은 flush)시키는 것이 맞을 것 같습니다.

다만 전환되는 두 프로세스가 모두 공유하는 (일부) 주소 공간이 있다면
이 영역은 제외시키는 것이 성능에 도움이 될 것입니다.
(이를 위해선 paging unit에서 global 플래그와 같은 기능을 제공해야 합니다.)

리눅스 커널의 경우는 (제가 아는 한) 다음과 같은 경우들을 고려합니다.
1. 한 process 내의 다른 thread로 switching되는 경우
동일한 주소 공간을 공유하므로 TLB를 invalidate하지 않습니다.

2. user process에서 kernel thread로 switching되는 경우
모든 user process는 kernel 주소 공간을 포함하고
kernel thread는 user 주소 공간에 접근하지 않기 때문에
TLB를 invalidate하지 않습니다. (lazy TLB 모드로 진입)

3. 다른 process로 switching되는 경우
kernel 주소 공간을 제외한 모든 영역을 invalidate합니다.

MyoZen의 이미지

OS 마다 다르지만

OS 마다 다르지만 일반적인 경우엔 모든 TLB 항목을 invalidate 시키는군요..
답변 감사합니다.

- by MyoZen -

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.