※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.
쓰레드 주소공간
쓰레드 주소공간은, 쓰레드가 생성되고 실행되는 동안 접근 가능한 메모리 영역을 말하며, 프로세스의 주소 공간 내에 형성됩니다.
- 일반 함수가 수직적인 관계라고 하면 ( 스택 )
- 쓰레드는 side-by-side 형태
쓰레드 각각 가지고 있는 사적 공간은 다음과 같습니다.
- 쓰레드 코드
- 쓰레드 로컬 스토리지 ( TLS, Thread Local Storage )
- 쓰레드 스택
쓰레드 사이 공유 공간은 다음과 같습니다.
- 프로세스의 코드
- 프로세스의 데이터 공간 ( 로컬 스토리지 제외 )
- 프로세스의 힙 영역
쓰레드 라이프 사이클
쓰레드의 라이프 사이클은 TCB 로 관리한다는 점에서 프로세스 라이프 사이클과 거의 비슷합니다.
쓰레드 상태 변화
- 준비 상태 ( Ready ) : 쓰레드가 스케줄되기를 기다리는 상태
- 실행 상태 ( Running ) : 쓰레드가 CPU 에 의해 실행중인 상태
- 대기 상태 ( Blocked ) : 쓰레드가 입출력을 요청하거나 sleep() 과 같은 시스템 호출로 인해 중단된 상태
- 종료 상태 ( Terminated ) : 쓰레드가 종료된 상태

Thread Context
쓰레드의 실행중인 상태 정보들은 TCB 에 저장됩니다.
TCB ( Thread Control Block )
- 쓰레드가 생성될 때 커널에 의해 만들어짐
- 쓰레드가 소멸되면 함께 사라짐
나머지 메모리들은 어차피 공유해서 사용하니, 레지스터들만 저장해두었다가 필요할 때 CPU 에 복귀하면 이전에 실행하던 상태로 돌아갈 수 있습니다.
( PCB 와 비슷 )
Thread Context Switching
- 현재 실행중인 쓰레드를 중단시키고
- 다른 쓰레드에게 CPU 할당
- 현재 CPU 컨텍스트를 TCB 에 저장
- 다른 TCB 에 저장된 컨텍스트를 CPU 에 적재

Overhead in context switching
Context Switching 은 비싼 연산 중 하나입니다.
동일한 프로세스 중 다른 쓰레드로 스위칭되는 경우는 오버헤드가 적게 발생하기 때문에 저렴합니다.
- 컨텍스트 저장 및 복귀
- TCB 리스트 조작
- 캐시 Flush 와 채우기 시간
다른 프로세스의 쓰레드로 스위칭하는 경우엔 CPU 가 실행하는 주소 공간이 바뀌기 때문에 추가적인 오버헤드가 발생하여, 비쌉니다.
- 추가적인 메모리 오버헤드 발생
- 시스탬 내에 현재 실행 중인 프로세스의 매핑 테이블을 새로운 프로세스의 매핑 테이블로 교체
- 추가적인 캐시 오버헤드 발생
- 프로세스가 바뀌기 때문에, CPU 캐시에 담긴 코드와 데이터 무력화
- 새 프로세스의 쓰레드가 실행을 시작하면 CPU 캐시 미스 발생, 캐시가 채워지는데 상당한 시간 소요