Computer Science/OS

Threads

박붕어 2023. 11. 25. 02:21

Threads( Light Weight Process )

⇒ CPU 이용의 가장 작은 단위.

  • Thread ID
  • Program Counter
  • Register
  • Stack Space

등으로 구성되어있다.

Peer Threads 와는

  • Code Section (명령어)
  • Data Section (명령어 실행에 필요한 정보)
  • OS Resources

등을 공유한다.

🛑 하나의 Process에 하나의 Thread만 존재할 때 Heavy Weight Process라고 한다.

Multithread에서는 한 Thread가 Blocked 되어도 다른 Thread가 Run할 수 있다.

처리량과 성능이 증가한다. ⬆️ ⬆️ ⬆️ ⬆️ ⬆️ ⬆️ ⬆️ ⬆️

Thread의 장점

  1. Responsiveness : 반응시간이 좋아진다.
  2. Resource SharingEconomy : 자원을 공유하여 경제적이다.
  3. CPU가 여러개인 구조 : Multi-Processor구조에서 효율적이다. 각각의 Processor에 Thread가 mapping된다.

User-level Thread, Kernel-level Thread

  • Kernel-level Thread : 운영체제가 관리하는 Threads.
  • User-level Thread : Kernel위에서 동작하는 Threads.
  • Hybrid : Kernel + User level → 요즘 나오는 Thread들은 Hybrid.

Kernel-level Threads 수가 User-level Threads 수에 비에 적다. Kernel < User

CPU는 Kernel-level Threads만 처리할 수 있다.

User-level Threads들은 System Call을 호출하지 않아 매우 빠르다.

 

→ Kernel은 Process단위로 CPU Scheduling을 하므로 Thread입장에서는 Unfair할 수 있다.

Multithreading Models

1. Many to One Models

  • User Thread는 많은데 Kernel Thread는 1개.( 다 : 일 )
  • User Thread간 경합이 발생한다.
  • Kernel Thread가 Block되면 문제가 발생한다.
  • Ex. Solaris Green Threads / CU Portable Threads

2. One to One Models

  • User Thread 한개에 Kernel Thread 한개 ( 일 : 일 )
  • User Thread의 갯수와 같은 Kernel Thread를 만들어낼 수 없다.
  • Ex. Windows NT/XP/2000, Linux

3. Many to Many Models

  • User Thread 여러개, Kernel Thread 여러개. ( 다 : 다 )
  • 충분한 수의 Kernel Thread 생성
  • 단점 : 중요한 Thread가 경합에서 밀려 Starvation이 일어날 수 있다.

4. Two-level Models

  • M : M + 1 : 1
  • 중요한 일은 1 : 1 모델에서 처리를 한다.

Threading Issue

fork()와 exec()

fork() : Parent Process가 Child Process를 생성한다.

⇒ 호출한 Thread만 복사할 것이냐 or 모든 thread를 복사할 것이냐?

  • fork() + exec() ⇒ 호출한 Thread만 복사한다.
  • fork() ⇒ 모든 Thread를 복사한다.

Thread Cancellation

정상적으로 종료되기 전에 Thread를 종료시키는 것.

  • Asynchronous Cancellation ⇒ 종료 시 즉시 종료. 🖐️
  • Deferred Cancellation ⇒ Check Point(Cancellation Point)를 만들고 그 Point마다 Cancel할지 말지를 결정한다. Cancellation Point에서만 종료가 가능하다.

Signal Handling

이벤트 발생 시 누구에게 알려줄지?!. Process Signals / Interrupts와 유사한 개념

Signal Handling의 순서 : Signal 생성 → Signal 전달 → Signal 처리

  • 누구한테 알려줄 것이냐? 여러 Option이 있다.
    1. 관련있는 모든 Threads
    2. 모든 Threads
    3. 특정 Threads(전담반)
    4. 특정 Thread 한 놈.

Thread Pools

특정 갯수의 Thread를 미리 생성하고, 일을 대기하는 것.

장점

  1. Thread의 생성, 파괴가 없어 처리속도가 증가한다.
  2. 프로그램의 Thread가 Pool의 Size에 제한된다.

Thread Specific Data

Thread가 일에 필요한 Data를 전달해주어야 한다.

Scheduler Activation

M:M or Two-level Model은 User Thread, Kernel Thread 간에 통신이 필요하다.

Upcall : Kernel과 User Thread 사이의 통신

Upcall을 통해서 적절한 Kernel Thread의 갯수를 정한다.

  • CPU-Bound Task = Thread의 갯수 ⬆️
  • IO-Bound Task = Thread의 갯수 ⬇️

Light Weight Process(LWP) : Kernel과 User - level 간 Virtual Processor, Kernel Thread와 User Thread를 Mapping해주는 역할을 한다.

여러가지 Thread종류

Pthreads

Thread Creation, Synchronization에 대한 POSIX Standard API.

UNIX의 기반이 되는 Thread.

Windows XP Threads

  • One to One Model 사용
  • 각각의 Thread에 Thread ID, Register Set이 있고, User Thread와 Kernel Thread의 Stack을 분리, Private Data Storage Area을 사용한다.
  • 저 각각은 Thread의 Context(구성요소)로 알려져있다.

Linux Threads

  • task라는 단위 사용
  • clone()으로 Thread 생성
  • clone()을 통해 만들어진 애들은 같은 주소공간을 공유

Java Threads

  • JVM으로 관리되는 Threads
  • Thread 클래스를 상속받아 사용한다.

'Computer Science > OS' 카테고리의 다른 글

CPU Scheduling (1)  (0) 2023.11.27
4강. 연습문제  (1) 2023.11.27
3강 연습문제  (2) 2023.11.25
Processes(2)  (2) 2023.11.24
Processes(1)  (0) 2023.11.24