포스트

임베디드 스터디 - 프로세스 vs 스레드, 컨텍스트 스위칭, 멀티스레딩 모델

임베디드 스터디 - 프로세스 vs 스레드, 컨텍스트 스위칭, 멀티스레딩 모델

프로세스 vs 스레드

  • 프로세스 : 실행 중인 프로그램 — OS로부터 독립적인 메모리 자원을 할당받은 단위
  • 스레드 : 프로세스 안에서 실제 실행을 담당하는 단위 — 같은 프로세스의 메모리를 공유함
1
2
3
4
5
프로세스 (크롬)
├── 메모리 공간 (코드·데이터·힙) ← 스레드들이 공유
├── 스레드 1 : 탭 렌더링    (스택은 각자 독립)
├── 스레드 2 : 네트워크 요청
└── 스레드 3 : UI 업데이트

PCB (Process Control Block)

  • OS가 프로세스를 관리하기 위해 각 프로세스의 정보를 저장하는 자료구조
1
2
3
4
5
6
7
8
PCB
├── 프로세스 ID (PID)
├── 프로세스 상태 (Ready/Running/Waiting 등)
├── PC (Program Counter) ← 마지막으로 수행하던 명령어 위치
├── CPU 레지스터 값           ← 중단 시점의 연산 상태
├── 메모리 관리 정보           ← 가상 주소 공간 매핑
├── 스케줄링 정보              ← 우선순위 등
└── I/O 상태 정보

컨텍스트 스위칭 (Context Switching)

  • CPU가 프로세스 A에서 B로 전환할 때의 과정
1
2
3
① A의 PCB에 현재 상태 저장
② B의 PCB에서 이전 상태 복원
③ B 실행 재개
  • 컨텍스트 스위칭 자체는 오버헤드 — 이 시간 동안 CPU는 실제 유용한 작업을 못 함
  • 스위칭이 너무 자주 일어나면 오버헤드 비용 증가로 전체 성능 저하

프로세스 vs 스레드 전환 비용

구분전환 시 교체 범위비용
프로세스가상 주소 공간·캐시 전체 교체많이 듦
스레드스택·레지스터만 교체적게 듦

멀티스레딩 모델

  • 유저 레벨 스레드와 커널 레벨 스레드를 어떻게 매핑하느냐에 따라 3가지 모델로 구분
    • 유저 레벨 스레드 : 애플리케이션이 관리하는 논리적 단위
    • 커널 레벨 스레드 : OS가 직접 관리, CPU에 실제로 할당되는 단위

N:1 모델

1
2
3
유저 스레드 1 ─┐
유저 스레드 2 ─┤→ 커널 스레드 1 → CPU
유저 스레드 3 ─┘
  • 장점 : 구현 단순
  • 단점 : 유저 스레드 하나가 블로킹 시스템 콜 호출 → 스레드 전체가 멈춤
  • 단점 : 커널 스레드가 하나이므로 멀티코어 CPU 활용 불가

1:1 모델

1
2
3
유저 스레드 1 → 커널 스레드 1 → CPU 코어 1
유저 스레드 2 → 커널 스레드 2 → CPU 코어 2
유저 스레드 3 → 커널 스레드 3 → CPU 코어 3
  • 장점 : 블로킹 시 다른 스레드 영향 없음, 멀티코어 CPU 활용 가능
  • 단점 : 유저 스레드 수만큼 커널 스레드 생성 → 스레드가 많아지면 생성 비용 증가
  • 예시 : Linux pthread, Java 기본 스레드

M:N 모델

1
2
3
4
유저 스레드 1 ─┐
유저 스레드 2 ─┤→ 커널 스레드 1 → CPU 코어 1
유저 스레드 3 ─┤→ 커널 스레드 2 → CPU 코어 2
유저 스레드 4 ─┘
  • M개의 유저 스레드를 N개(M>N)의 커널 스레드에 동적으로 매핑
  • 장점 : 1:1보다 커널 스레드 수 적음, 멀티코어 활용 가능
  • 단점 : 구현 복잡도 높음

비교 요약

모델매핑블로킹 문제멀티코어구현 복잡도
N:1多유저 → 1커널스레드 전체 멈춤낮음
1:11유저 → 1커널영향 없음중간
M:N多유저 → 少커널영향 없음높음
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.