위 캡처를 보면 스레드가 2 종류다. 커널 영역의 스레드와 유저 영역의 플랫폼 스레드. 두 스레드는 1:1 매핑이 된다. 플랫폼 스레드 내부 코드는 결국 커널 스레드가 동작시켜 주는 것. 윈도우의 경우 통상 1:1 매핑이된다.
각 스레드마다 스택 영역이 별도로 존재한다. 이 스택 메모리는 해당 스레드에 종속된다.
스위칭에 드는 비용
현재 상태 백업 및 이전 상태 복원이 스위칭
- 어떤 연산 흐름의 ‘현재 상태’라는 것은 CPU core 레지스터 값의 스냅샷
- 다른 흐름으로 전환(컨텍스트 스위칭)한다는 것은 CPU core의 레지스터 값을 본래의 것으로 복원하는 것
- OS의 TCB(Thread Control Block)에 담기는 정보 이용해 복원
JVM 구성요소 - PC 레지스터
런타임 데이터 영역의 Stack area, PC register, Native method stack 이렇게 3개는 스레드마다 생성되고 가진다. PC 레지스터는 바이트코드 수준에서 다음 실행해야되는 위치가 저장된다.
이것들은 TLS(Thread Local Storage)같은 개념이라 이해도 무방하다. 동기화 문제를 방지하기위한 것.