OS

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

noahkim_ 2024. 12. 12. 00:16

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

 

1. 스레드

  • 프로세스 내에서 실행되는 작업 단위
  • 같은 프로세스 내에서 메모리와 자원을 공유 (Light Weight Process)
    • 서로 간에 직접적으로 데이터를 주고받을 수 있음
    • 데이터를 공유하므로 메모리를 효율적으로 사용할 수 있음

 

2. 멀티 태스킹 vs 멀티 스레딩

항목 멀티 태스킹 멀티 스레딩
정의 CPU 할당 시간을 시분할하여 여러 작업을 동시에 처리하는 기법 (시분할 시스템).
단일 프로세스 내에서 여러 개의 스레드를 생성하여 병렬 처리하는 방식. (스레드 단위로 스케줄링이 이루어짐)
목표 여러 작업을 동시에 처리하는 것처럼 보이게 함.
단일 프로세스 내에서 여러 스레드를 사용하여 병렬 처리.
구현 방식 운영체제가 여러 프로세스를 관리하며 각 프로세스에 시간 슬라이스를 할당하여 처리.
프로세스 내에서 여러 스레드를 관리하며, 각 스레드가 독립적으로 실행됨.
자원 관리 각 프로세스가 독립적으로 자원을 할당받아 사용.
스레드는 동일한 프로세스 내에서 자원을 공유.
병렬 처리 여러 프로세스를 동시에 실행하는 것처럼 보이지만 실제로는 CPU가 시분할하여 빠르게 전환함.
여러 스레드가 동시에 실행되어 실제 병렬 처리.
장점    
- 효율성 시스템 자원 활용을 극대화.
(단, 프로세스간 자원 공유가 어려움)
여러 스레드를 이용해 성능 향상.
- 응답성 여러 작업을 동시에 처리할 수 있음. 
(단, 상대적으로 느림)
실행 중인 스레드가 대기 중이면 다른 스레드로 즉시 응답 가능.
단점    
- 자원 격리 각 프로세스는 독립적인 자원을 사용하므로 다른 프로세스에서 문제가 발생해도 영향을 미치지 않음.
자원을 공유하므로 한 스레드에서 문제가 발생하면 다른 스레드도 영향을 받을 수 있음.
- 동기화 문제 동기화 문제 없이 각 프로세스가 독립적으로 실행됨.
공유 자원에 대한 접근을 동기화하지 않으면 레이스 컨디션 발생, 프로그램 전체에 영향.
- 오류 전파 한 프로세스의 오류가 다른 프로세스에 영향을 미치지 않음.
한 스레드에서 치명적인 오류가 발생하면 전체 프로세스가 종료될 수 있음.
(세그멘테이션 폴트, 무한 루프 등)
- 데드락 각 프로세스가 독립적으로 실행되므로 데드락의 위험이 낮음.
여러 스레드가 자원을 기다리며 대기 상태에 빠져 데드락에 걸릴 수 있음.
동기화 방식 각 프로세스 간 자원 공유가 없어 별도의 동기화가 필요 없음. 공유 자원에 대한 동기화가 필요.

 

멀티 스레딩 모델

구분 커널 스레드 사용자 스레드
지원 방식 운영체제 커널이 직접 멀티스레드를 지원
사용자 공간에서 구현
(운영체제 커널이 멀티스레드를 지원하지 않을 경우 사용)
동작 방식 각 스레드가 독립적으로 실행되며, 한 스레드가 블록되더라도 다른 스레드는 계속 실행 가능
한 스레드가 블록되면 동일 프로세스 내의 모든 사용자 스레드가 블록됨
스케줄링 커널이 스케줄링과 동기화를 담당
스케줄링과 동기화를 사용자 수준에서 직접 구현
장점 안정적
(스레드가 블록되어도 다른 스레드가 영향을 받지 않음)
스레드 생성 및 관리가 더 빠르고 효율적임
(커널 호출이 필요 없음)
단점 커널 호출에 의한 오버헤드가 발생할 수 있음
효율이 떨어질 수 있음
(한 스레드가 블록되면 다른 스레드도 블록되므로)
예시 Linux 커널에서 각 프로세스가 커널 스레드로 실행되는 경우
Java에서 green threads
(사용자 공간에서 스케줄링하는 스레드)