운영체제 · 스레드

프로세스 주소 공간과 스레드 공유 영역

프로세스 하나 안의 여러 스레드가 코드, 데이터, 힙을 공유하면서도 각자 스택과 실행 문맥을 갖는 구조를 메모리 영역별로 나눈다.

01

프로세스 생성

운영체제가 주소 공간과 자원 테이블을 만들고 PCB에 기록한다.

PCB
02

스레드 추가

새 스레드는 고유 스택과 레지스터 문맥을 가진 TCB로 관리된다.

TCB
03

공유 데이터 접근

같은 힙 객체를 여러 스레드가 읽고 쓰므로 순서 경쟁이 생길 수 있다.

race condition
04

문맥 전환

스케줄러는 스레드별 레지스터와 스택 위치를 저장하고 복원한다.

context switch
Code
모든 스레드가 공유 같은 함수 명령어를 실행하지만 현재 실행 위치는 스레드마다 다르다.
읽기 중심
Heap
동적 객체 공유 malloc으로 만든 데이터는 잠금 없이 수정하면 결과가 흔들린다.
동기화 필요
Stack
스레드별 독립 지역 변수와 호출 프레임은 각 스레드의 스택에 쌓인다.
개별 보관

설계 판단

프로세스 격리가 필요하고 장애 전파를 줄여야 할 때 유리하다.
스레드 같은 데이터를 빠르게 공유하고 생성 비용을 줄이고 싶을 때 유리하다.
락 범위 공유 데이터의 불변식이 깨지지 않는 최소 구간에 둔다.