Apple is Apple
article thumbnail
Published 2024. 8. 6. 15:42
[OS] 5 - Thread CS/OS

Thread 정리

CPU의 기본 사용 단위이다.

쓰레드 ID, 프로그램 카운터, 레지스터 셋, 스택을 포함하고 있다.

모든 프로세스에는 한 개 이상의 쓰레드를 갖고 있으며, 같은 프로세스 동안에는 서로 다른 쓰레드들이 자원을 공유한다.

 

사용되는 이유 

 - 현대의 프로그램은 멀티쓰레드 기반

 - 프로세스 생성은 무거운 작업이지만 쓰레드 생성은 가벼운 작업

 - 코드 작성이 간단해 효율성이 좋음

 - 커널은 보통 멀티쓰레드를 사용 중

 

멀티쓰레드를 사용하는 프로세스의 구조

 

멀티 쓰레드의 장점

  • 반응성
    • 사용자 인터페이스에 중요한 프로세스의 일부가 차단된 경우 지속적인 실행을 허용할 수 있음
  • 자원 공유
    • 스레드는 프로세스 리소스를 공유하며, 공유 메모리나 메시지 전달보다 쉬움
  • 경제성
    • 프로세스 생성보다 적은 가격이 들어가고, 쓰레드 스위칭 하는데 생기는 오버헤드가 컨텍스트 스위칭하는데 생기는 오버헤드보다 적음

Parallelism & Concurrency

parallelism

물리적으로 동시에 프로세스를 시작하는 것을 뜻한다.

 

Concurrency

여러개의 프로세스가 동시에 실행되는 것을 뜻한다 (싱글코어에서는 초단시간에 스위칭을 해 동시에 실행되는 것 처럼 보이게 한다.)

 

 

 

Parallelism의 종류

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

 

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

Thread Library

Thread Library는 쓰레드를 생성하고 관리하는데 필요한 API를 개발자에게 제공한다.

구현 상 두 가지 타입의 방법이 있다.

  1.  User Space 에서의 전적인 구현
  2. 운영체제에 의해 서포트되는 Kernel-level Library

 

사진 출처: Provided by Operating Systems Concepts, 10th Edition (Abraham Silberschatz, Peter Baer Galvin, Greg Gagne)

'CS > OS' 카테고리의 다른 글

[OS] 7 - CPU scheduling (2)  (0) 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
profile

Apple is Apple

@mjjjjjj