OS

[쉽게 배우는 운영체제] 3-2. 프로세스와 스레드: 스레드

noahkim_ 2024. 12. 12. 00:16

조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다

 

1. 스레드

  • 프로세스 내에서 독립적인 실행 흐름을 가지는 최소 실행 단위 (Light Weight Process)
  • ✅ 같은 프로세스 내에서 자원을 공유함 (단, stack, 레지스터, pc는 독립적으로 가짐)
  • ➡️ 데이터를 공유하므로 메모리를 효율적으로 사용할 수 있음

 

2. 멀티 태스킹

  • 운영체제가 여러 작업을 동시에 실행하는 것처럼 보이게 하는 기법 (시분할하여 각 작업에 번갈아 할당함)
  • ➡️ 시스템 자원 활용 극대화 (CPU idle time 활용)
  • ➡️ 응답성 향상
  • ✅ 각 프로세스가 독립적인 주소 공간을 가짐
  • ➡️ 오류 전파 위험이 낮음

 

3. 멀티 스레딩

  • 하나의 프로세스 안에서 여러 개의 스레드를 생성하여 동시에 실행하는 기법 (스레드 단위로 스케줄링)
  • ✅ 자원 공유 (프로세스 내에서 여러 스레드가 자원을 공유함)
  • ➡️ 메모리 효율성
  • ➡️ 스레드 생성 및 전환 비용이 적음
  • ⚠️ 동기화 문제 (레이스 컨디션, 데드락 발생 가능)
  • ⚠️ 오류 전파 (세그멘테이션 폴트, 무한 루프)

 

멀티 스레딩 모델

구분 커널 스레드 사용자 스레드
지원 방식 커널이 직접 멀티스레드를 지원 사용자 공간의 라이브러리가 스레드를 관리하도록 구현
동작 방식 각 스레드가 독립적으로 실행되며, 한 스레드가 블록되더라도 다른 스레드는 계속 실행 가능
한 스레드가 블록되면 동일 프로세스 내의 모든 사용자 스레드가 블록됨
스케줄링 커널이 직접 스케줄링과 동기화를 담당
스케줄링과 동기화를 사용자 수준에서 직접 구현
장점 안정적 (블로킹 I/O에 대해 전파 안됨)
스레드 생성 및 관리가 더 빠르고 효율적임
(커널 호출이 필요 없음)
단점 커널 호출에 의한 오버헤드가 발생할 수 있음 불안정함 (블로킹 I/O 발생시 전체가 블록됨)
예시 - Linux의 POSIX threads (pthreads)
- Java의 기본 스레드
Java의 green threads 

 

 

출처