프로세스 vs 스레드: 컨텍스트 스위칭의 차이점과 성능 비교

2025. 5. 30. 09:09·Backend Development
반응형

운영체제에서 멀티태스킹을 구현하는 핵심 메커니즘인 컨텍스트 스위칭에 대해 알아보겠습니다. 특히 프로세스와 스레드의 컨텍스트 스위칭이 어떻게 다른지, 그리고 왜 스레드의 컨텍스트 스위칭이 더 빠른지 자세히 살펴보겠습니다.


컨텍스트 스위칭이란?

컨텍스트 스위칭은 CPU가 현재 실행 중인 작업을 다른 작업으로 전환하는 과정입니다. 이는 멀티태스킹 시스템에서 필수적인 메커니즘으로, 여러 작업이 동시에 실행되는 것처럼 보이게 합니다.

컨텍스트의 구성 요소

  • CPU 레지스터 상태
    • 프로그램 카운터 (PC)
    • 스택 포인터 (SP)
    • 범용 레지스터
  • 메모리 상태
  • 프로세스/스레드 상태 정보

컨텍스트 스위칭이 발생하는 시점

  1. 시간 할당량 소진

    • 각 프로세스/스레드에 할당된 CPU 시간이 소진될 때
    • 공정한 CPU 사용을 위해 필수적
  2. I/O 작업 대기

    • 프로세스/스레드가 I/O 작업을 기다려야 할 때
    • CPU 자원을 효율적으로 활용하기 위함
  3. 우선순위 변경

    • 더 높은 우선순위의 작업이 발생했을 때
    • 시스템의 응답성을 높이기 위함

프로세스 컨텍스트 스위칭

1. 기본 과정

1. 현재 프로세스 상태 저장
   ↓
2. 다음 프로세스 상태 로드
   ↓
3. 프로세스 전환
   ↓
4. 메모리 관련 처리

2. 메모리 관련 추가 작업

  • MMU(Memory Management Unit) 설정 변경
  • TLB(Translation Lookaside Buffer) 초기화
  • 가상 메모리 주소 체계 전환

3. 특징

  • 완전한 프로세스 전환
  • 메모리 공간이 독립적
  • 오버헤드가 큼

스레드 컨텍스트 스위칭

1. 기본 과정

1. 현재 스레드 상태 저장
   ↓
2. 다음 스레드 상태 로드
   ↓
3. 스레드 전환

2. 특징

  • 동일 프로세스 내 전환
  • 메모리 공간 공유
  • 최소한의 오버헤드

성능 차이의 원인

1. 메모리 관련 작업

구분 프로세스 스레드
MMU 설정 필요 불필요
TLB 초기화 필요 불필요
메모리 주소 변환 필요 불필요

2. 공유 자원

구분 프로세스 스레드
메모리 공간 독립적 공유
파일 디스크립터 독립적 공유
전역 변수 독립적 공유

3. 오버헤드 비교

프로세스 컨텍스트 스위칭
CPU 상태 저장/로드 + 메모리 관련 작업
    ↓
스레드 컨텍스트 스위칭
CPU 상태 저장/로드만 수행

실제 적용 시 고려사항

1. 프로세스 사용이 적합한 경우

  • 완전한 독립성이 필요한 경우
  • 보안이 중요한 경우
  • 안정성이 중요한 경우

2. 스레드 사용이 적합한 경우

  • 빠른 응답이 필요한 경우
  • 자원 공유가 필요한 경우
  • 오버헤드를 최소화해야 하는 경우

결론

  1. 스레드의 장점

    • 빠른 컨텍스트 스위칭
    • 자원 공유 용이
    • 오버헤드 최소화
  2. 프로세스의 장점

    • 완전한 독립성
    • 안정성
    • 보안성
  3. 선택 기준

    • 작업의 특성
    • 성능 요구사항
    • 자원 공유 필요성
    • 보안 요구사항

컨텍스트 스위칭의 차이를 이해하고 적절한 방식을 선택하는 것은 시스템의 성능과 안정성에 큰 영향을 미칩니다.


참고 자료

  • Operating System Concepts
  • Linux Kernel Development
    st/)
  • Understanding the Linux Virtual Memory Manager
반응형
저작자표시 비영리 변경금지 (새창열림)

'Backend Development' 카테고리의 다른 글

Redis의 싱글 스레드 아키텍처: 왜 빠른가?  (2) 2025.05.30
시스템 간 비동기 연동 방식 완벽 가이드  (0) 2025.05.30
데이터베이스의 신뢰성을 책임지는 ACID: 원자성, 일관성, 격리성, 지속성 완벽 가이드  (2) 2025.05.30
REST API 완벽 가이드: 개념부터 구현까지  (0) 2025.05.30
백엔드 개발자를 위한 효과적인 캐싱 전략 가이드  (4) 2025.05.30
'Backend Development' 카테고리의 다른 글
  • Redis의 싱글 스레드 아키텍처: 왜 빠른가?
  • 시스템 간 비동기 연동 방식 완벽 가이드
  • 데이터베이스의 신뢰성을 책임지는 ACID: 원자성, 일관성, 격리성, 지속성 완벽 가이드
  • REST API 완벽 가이드: 개념부터 구현까지
Kun Woo Kim
Kun Woo Kim
안녕하세요, 김건우입니다! 웹과 앱 개발에 열정적인 전문가로, React, TypeScript, Next.js, Node.js, Express, Flutter 등을 활용한 프로젝트를 다룹니다. 제 블로그에서는 개발 여정, 기술 분석, 실용적 코딩 팁을 공유합니다. 창의적인 솔루션을 실제로 적용하는 과정의 통찰도 나눌 예정이니, 궁금한 점이나 상담은 언제든 환영합니다.
  • Kun Woo Kim
    WhiteMouseDev
    김건우
  • 깃허브
    포트폴리오
    velog
  • 전체
    오늘
    어제
  • 공지사항

    • [인사말] 이제 티스토리에서도 만나요! WhiteMouse⋯
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 분류 전체보기 (99) N
      • Frontend Development (38)
      • Backend Development (21) N
      • Algorithm (33) N
        • 백준 (11) N
        • 프로그래머스 (17)
        • 알고리즘 (5)
      • Infra (1)
      • 자료구조 (3)
  • 링크

    • Github
    • Portfolio
    • Velog
  • 인기 글

  • 태그

    tailwindcss
    frontend development
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kun Woo Kim
프로세스 vs 스레드: 컨텍스트 스위칭의 차이점과 성능 비교
상단으로

티스토리툴바