CS/운영체제
[운영체제] 3. 스레드 관리
hyomee2
2025. 2. 23. 20:16
스레드 개요
프로세스는 자원을 할당받고, 자원을 제어해서 원하는 목적(작업)을 달성한다.
이때, 프로세스 내에서 실행되는 최소 실행 단위를 '스레드' 라고 한다.
하나의 프로세스는 여러 스레드를 가질 수 있으며,
스레드들은 같은 프로세스의 메모리 공간(자원)을 공유하며 독립적인 실행 흐름을 가진다.
아래와 같이 자원은 공유하는데, 이 자원을 제어하는 스레드는 여러 개 있을 수 있다.
(프로세스가 할당받은 자원은 공유)
스레드의 개념
- Light Weight Process(LWP)
- 프로세스는 원래 자원과 제어를 각각 갖고 있어야 하는데, 스레드는 자원은 공유하고 제어만 갖고 있으니 일반 프로세스보단 가볍다.
- 프로세서(e.g., CPU) 활용의 기본 단위
- 스레드가 여러 개면 동시에 여러 CPU 사용 가능
- 구성요소
- Thread ID
- Register set (PC 등)
- Stack (i.e., local data)
- 제어 요소 외 코드, 데이터 및 자원들은 프로세스의 다른 스레드들과 공유
- 전통적 프로세스 = 단일 스레드 프로세스
스레드의 장점
- 사용자 응답성(responsiveness)
- 일부 스레드의 처리가 지연되어도 다른 스레드는 작업을 계속 처리할 수 있다.
- 자원 공유 (resource sharing)
- 자원을 공유해서 효율성 증가 (커널의 개입을 피할 수 있다. 스레드가 없으면 자원을 쓸 때 context switch 발생)
- 자원을 동시 사용 가능
- e.g., 동일 address space에서 스레드 여러 개
- 경제성 (economy)
- 프로세스의 생성, context switch에 비해 효율적
- 멀티 프로세서 활용
- 병렬처리를 통해 성능 향상 (여러 개의 CPU 코어 동시 사용)
스레드 사용의 예
스레드를 사용하지 않으면 계속 context switch 발생
스레드의 구현
1. 사용자 수준 스레드(User threads)
- 사용자 영역의 스레드 라이브러리로 구현된다.
- 스레드의 생성, 스케줄링 등
- POSIX threads, Win32 threads, Java thread API...
- n:1 모델
- 커널은 스레드의 존재를 모른다.
- 장점) 커널의 관리(개입)를 받지 않는다.
- 생성 및 관리의 부하가 적으며, 효율적이고 유연한 관리가 가능하다. (커널은 개입하지 않고 라이브러리 수준에서 개입하니까)
- 이식성이 높다.
- 단점) 커널은 프로세스 단위로 자원을 할당한다.
- (single-threaded kernel의 경우) 여러 스레드 중 하나의 스레드가 block 상태가 되면 모든 스레드가 대기
- 장점) 커널의 관리(개입)를 받지 않는다.
2. 커널 수준 스레드(Kernel threads)
- 사용자 수준 스레드에 1:1 매핑되게 커널 수준 스레드 생성 (두 스레드의 개수는 같다.)
-> 커널 안에 제어요소(스레드)들이 여러 개 생기고, 이 관리도 커널이 하게 된다. (오버헤드가 크다.)
- 1:1 모델
- 장점) 커널이 각 스레드를 개별적으로 관리한다.
- 프로세스 내 스레드들이 병행 수행 가능 (하나의 스레드가 block 상태가 돼도, 다른 스레드는 계속 작업 수행 가능)
- 단점) 커널 영역에서 스레드의 생성, 관리 수행
- context switch 등 부하(overhead)가 크다.
3. 혼합형 스레드
: 다대일(n:1) 모델(사용자 수준 스레드)와 일대일(1:1) 모델(커널 수준 스레드)를 합친 것으로, 다대다(n:m) 모델이다. (n > m)
- n개의 사용자 수준 스레드, m개의 커널 스레드 (n > m)
- 사용자는 원하는 수만큼 스레드를 사용
- 커널 스레드는 자신에게 할당된 하나의 사용자 스레드가 block 상태가 되어도 다른 스레드 수행 가능 (병행 처리 가능)
- 효율적이면서도 유연하다.
본 게시물은 아래 강의를 공부한 내용을 토대로 작성했습니다. :)
https://www.youtube.com/watch?v=_gNeoGQx-Tc&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=8