1. Thread 정리
CPU의 기본 사용 단위이다.
쓰레드 ID, 프로그램 카운터, 레지스터 셋, 스택을 포함하고 있다.
모든 프로세스에는 한 개 이상의 쓰레드를 갖고 있으며, 같은 프로세스 동안에는 서로 다른 쓰레드들이 자원을 공유한다.
사용되는 이유
- 현대의 프로그램은 멀티쓰레드 기반
- 프로세스 생성은 무거운 작업이지만 쓰레드 생성은 가벼운 작업
- 코드 작성이 간단해 효율성이 좋음
- 커널은 보통 멀티쓰레드를 사용 중

멀티 쓰레드의 장점
- 반응성
- 사용자 인터페이스에 중요한 프로세스의 일부가 차단된 경우 지속적인 실행을 허용할 수 있음
- 자원 공유
- 스레드는 프로세스 리소스를 공유하며, 공유 메모리나 메시지 전달보다 쉬움
- 경제성
- 프로세스 생성보다 적은 가격이 들어가고, 쓰레드 스위칭 하는데 생기는 오버헤드가 컨텍스트 스위칭하는데 생기는 오버헤드보다 적음
2. Parallelism & Concurrency
parallelism
물리적으로 동시에 프로세스를 시작하는 것을 뜻한다.
Concurrency
여러개의 프로세스가 동시에 실행되는 것을 뜻한다 (싱글코어에서는 초단시간에 스위칭을 해 동시에 실행되는 것 처럼 보이게 한다.)

Parallelism의 종류
- Data Parallelism
- 동일한 데이터의 하위 집합을 여러 코어에 분산시키고, 각 코어에 대해 동일한 작업을 수행한다.
- -> 별도의 데이터를 별도의 core가 처리한다.
- Task Parallelism
- 코어에 걸쳐 스레드를 분산하고, 각 스레드는 고유한 작업을 수행한다.
- Task가 존재하고, 동일한 Task가 동시에 실행된다.

3. Multi Threading Models
미리 알아 두기 (User Thread vs Kernel Thread)
User Thread
- 사용자 레벨의 쓰레드 라이브러리에 의해 관리되는 Thread
- User Space에서 동작 된다
- POSIX, Win32, Java Thread 등이 있다.
Kernel Thread
- 운영체제에 의해 직접 관리되는 Thread
- Window, Solaris, Linux 등이 있다.
Threading Models
1. Many-to-One model

- 다수의 User Thread와 1개의 Kernel Thread가 매핑되어 있는 모델이다.
- 한 개의 User Thread가 요청되면 나머지 User Thread들은 block된다.
- 한 번에 하나만 커널에 있을 수 있기 때문에 여러 스레드가 멀티코어 시스템에서 병렬로 실행되지 않을 수 있다.
- ex) Solaris Green Threads, GNU Portable Threads
2. One-to-One Model

- 1개의 User Thread에 1개의 Kernel Thread가 매핑된 모델이다.
- User Thread가 만들어 질때, Kernel Thread도 만들어진다.
- Many-to-One 모델보다 동시성이 좋다.
- 프로세스당 쓰레드의 수가 많아지기 때문에 오버헤드로 인한 문제가 발생할 수도 있다.
- ex) Windows, Linux, Solaris 9
3. Many-to-Many Model

- M:N 매핑으로 여러 쓰레드가 서로 매핑 될 수 있는 모델이다.
- 운영 체제가 충분한 수의 커널 스레드를 생성할 수 있도록 한다.
- M > N 이면 blocking이 발생 할 수도 있다. (User Thread가 더 많으면)
- ex) Solaris Prior ver9, Window (w. ThreadFiber package)
4. Two-Level Model

- Many-to-Many 모델과 비슷하나 확정적으로 사용자 스레드를 커널 스레드에 바인딩할 수 있다. (Many-to-Many Model은 blocking 문제가 발생할 수 있는데 확정적으로 실행할 수 있는 레벨을 만들어 중요 프로세스의 blocking을 막을 수 있다.)
- ex) IRIX, HP-UX, Tru64 Unix
4. Thread Library
Thread Library는 쓰레드를 생성하고 관리하는데 필요한 API를 개발자에게 제공한다.
구현 상 두 가지 타입의 방법이 있다.
- User Space 에서의 전적인 구현
- 운영체제에 의해 서포트되는 Kernel-level Library
사진 출처: Provided by Operating Systems Concepts, 10th Edition (Abraham Silberschatz, Peter Baer Galvin, Greg Gagne)
'CS > OS' 카테고리의 다른 글
[OS] 7 - CPU scheduling (2) (1) | 2024.08.27 |
---|---|
[OS] 6 - CPU Scheduling (1) (0) | 2024.08.23 |
[OS] 4 - 프로세스 간 통신 (0) | 2024.07.20 |
[OS] 3 - 프로세스 (0) | 2024.06.21 |
[OS]2 - 핵심 컴포넌트 (0) | 2024.06.17 |