Post

03 OS - 스레드

03 OS - 스레드

1. 스레드

  • 스레드(Trhead)는 프로세스에서 작업을 실행하는 단위
  • 스레드 한개가 들어가면 단일 스레드(SingleThread), 다수의 스레드가 들어가면 다중 스레드(Multi Thread)
  • 다중 스레드(MUlti Thread)는 다수의 실행을 병렬로 진행할 수 있음.

2. 경량 프로세스 / 중량 프로세스

1. 경량 프로세스 (Lightweight Process)

  • 일반적인 의미의 스레드(Thread)
  • 프로세스의 주소 공간, 코드 영역, 데이터, 힙 등을 다른 스레드와 공유
  • 단지 Program Counter, 스택, 레지스터 집합만 독립적으로 가짐
  • 문맥 전환 비용이 매우 낮음
  • 2. 중량 프로세스 (Heavyweight Process)

  • 일반적인 의미의 프로세스(Process
  • 완전히 독립적인 주소 공간과 시스템 자원을 가지며, 다른 프로세스와는 자원을 공유하지 않음
  • 문맥 전환 비용이 높음

3. check 🔍

  • 운영체제는 항상 중량 프로세스 단위로 메모리에 올림
  • 이후 프로세스 내부에서 경량 프로세스(LWP, 즉 스레드)를 추가적으로 생성할 수 있음
  • 이 스레드들은 코드/데이터/힙을 공유하고, 각자의 스택만 별도로 갖고 있음

3. 스레드 제어 블록

  • Thread Control Block
  • 프로세스가 프로세서 제어블록(PCB)에 정보를 저장하듯이 스레드도 스레드 제어블록(TCB)에 정보를 저장한다.
  • 운영체제가 프로세스 안의 스레드를 관리할 때 사용하는 데이터 구조
  • 스레드 제어 블록 내용
정보 항목설명
스레드 ID (TID)스레드를 식별하는 고유 번호
스레드 상태Running, Ready, Waiting 등 현재 상태
프로그램 카운터(PC)다음에 실행할 명령어 주소
CPU 레지스터 상태각종 레지스터 값 (예: 스택 포인터, 일반 레지스터)
스택 포인터스레드의 스택 위치
우선순위스케줄링 시 우선순위 정보
스레드의 스택 메모리 정보스택 크기 및 위치
스레드가 속한 프로세스 정보소속 프로세스 ID(PID) 등
스케줄링 정보스케줄러에 필요한 기타 정보 (예: 시간 할당량)
동기화 관련 정보뮤텍스, 세마포어 등 동기화 객체 상태

4. 스레드 구현

1. 사용자 수준 스레드

  • 구현
    • 사용자의 영역의 스레드 라이브러리로 구현
    • 커널은 스레드가 아닌 프로세스 한 단위로 인식하고 프로세서를 할당
  • 장점
    • 커널에 독립적으로 스케줄링을 할 수 있어 모든 운영체제 적용 가능함.
    • 스케줄링이나 동기화를 하기위해 커널을 호출하지 않아 커널로 전환하는 오버헤드가 적음
    • 스레드 라이브러리에서 스케줄링을 하므로 유연한 스케줄링이 가능함.
  • 단점
    • 스레드가 아닌 프로세스 단위로 프로세서를 할당하여 다중처리 환경을 구성해도 스레드 단위 다중처리가 불가함.
    • 커널이 한 프로세스에 속한 여러 스레드에 프로세서를 동시에 할당 할 수 없음
    • 스레드 간 보호에 커널의 보호 방법을 사용 불가함.

2. 커널 수준 스레드

  • 구현
    • 커널에서 직접 스레드를 생성하고 관리함.
    • 커널이 스레드를 독립적인 실행 단위로 인식하여, 각 스레드에 직접적으로 프로세서를 할당함.
  • 장점
    • 스레드 단위로 커널이 직접 스케줄링하여, 진정한 병렬 처리(multi-core) 가능.
    • 하나의 스레드가 블로킹되더라도 커널이 다른 스레드를 실행 가능.
    • 커널의 보호 기법(예: 우선순위, 선점 등)을 활용 가능하여 안정성 확보.
  • 단점
    • 사용자에서 커널로 전환되는 오버헤드(Context Switching Overhead)가 발생.
    • 모든 스레드 연산 시 커널의 개입이 필요하므로 처리 비용이 큼.
    • 스레드 관리를 위해 커널이 복잡한 구조와 자원 사용을 요구함.

3. 혼합형 스레드

  • 구현
    • 사용자 수준 스레드와 커널 수준 스레드의 장점을 결합한 구조.
    • 사용자 수준에서 여러 스레드를 생성하고, 이들을 소수의 커널 스레드에 매핑하여 실행 (예: N: M 모델).
  • 장점
    • 사용자 수준의 빠른 스케줄링과 커널 수준의 병렬 실행을 동시에 구현 가능.
    • 일부 사용자 스레드가 블로킹되더라도, 다른 커널 스레드를 통해 실행 지속 가능.
    • 운영체제의 효율성과 유연성 모두 확보 가능.
  • 단점
    • 사용자 스레드와 커널 스레드 간의 매핑, 관리 복잡도가 증가함.
    • 사용자 수준 스케줄러와 커널 수준 스케줄러 간 충돌 가능성 존재.
    • 잘못된 매핑이나 자원 분배 시 성능 저하나 동기화 이슈가 발생할 수 있음.
  • 예시
    • 사용자 수준 스레드 A, B는 각각 다수의 경량 프로세스(LWP) 중 하나에 동적으로 매핑될 수 있으며,
    • 만약 A가 매핑된 LWP(A1)가 블로킹(blocking) 되었다면,
    • B는 다른 LWP(B1)에 재매핑되어 실행될 수 있으므로,
    • 결과적으로 자원 활용률이 향상되고 병목이 줄어드는 구조

5. 다중스레드 vs 다중프로세스

1. “다중 스레드(Multithreading)”와 “다중 프로세스(Multiprocessing)”는 병렬성과 동시성 처리를 위한 개념

1
2
- 다중 스레드는 하나의 프로세스 내부에서 여러 스레드가 메모리를 공유하며 동시에 실행됨
- 다중 프로세스는 여러 개의 독립된 프로세스가 메모리/자원 분리 상태로 각각 실행됨

2. 병렬성과 동시성

구분의미예시
병렬성 (Parallelism)물리적으로 동시에 실행2개의 CPU가 각각 다른 작업 수행
동시성 (Concurrency)논리적으로 동시에 실행 (순차적으로 쪼개어 실행)1개의 CPU가 빠르게 작업을 번갈아 수행

3. 비교

항목다중 프로세스 (Multiprocessing)다중 스레드 (Multithreading)
단위프로세스 (Process)스레드 (Thread)
메모리독립된 주소 공간 (heap, stack 분리)공유된 주소 공간 (heap 공유, stack 분리)
통신 방식IPC (파이프, 소켓, 메시지큐 등) 필요공유 변수, 동기화 객체 등 직접 접근 가능
컨텍스트 전환 비용크다 (커널 수준)작다 (경량)
안정성 (crash 격리)하나 죽어도 다른 프로세스 영향 없음하나 죽으면 전체 프로세스 위험 가능
디버깅/관리상대적으로 단순동기화 이슈, 디버깅 어려움
스케줄링 단위OS 스케줄러가 관리OS 스케줄러 + 사용자 쓰레드 가능
사용 예시Chrome 탭, DB 서버 프로세스, 백그라운드 데몬게임 루프, 웹 서버 쓰레드 풀, 병렬 계산

다중 스레드(multithreading)는 코드 영역, 데이터 영역(힙)을 공유하므로 메모리 사용량이 적고, 다중 프로세스(multiprocessing)는 각자 독립된 메모리 공간을 가지므로 메모리 사용량이 많음.

This post is licensed under CC BY 4.0 by the author.