취미가 좋다

운영체제 4 : Thread management 본문

Computer Science/운영체제

운영체제 4 : Thread management

benlee73 2021. 1. 5. 22:56

이전 글에서 설명한 context swith를 줄이기 위해서 필요한 것이 thread이다.

 

 

프로세스와 thread

프로세스가 하는 일은 자원을 할당받고, 그 자원을 제어하여 목적을 달성하는 것이다.

프로세스를 자원과 제어로 나누어 볼 때, 제어만을 분리하여 본 것을 thread라고 할 수 있다.

 

하나의 프로세스 안에 여러 개의 thread (제어) 가 있을 수 있다.

프로세스는 여러 자원을 할당받을 수 있고, 그 자원들을 제어하는 thread가 여러 개인 것이다.

 

 


 

Process = resource + 제어

 

resource

코드
데이터

 

- 코드 : PC가 가리키는 그 곳

- 전역 데이터 : 작업을 하기 위한 데이터

- 힙 : 프로세스가 사용하는 메모리 공간이 있다.

 

제어

- 제어 정보 : PC(프로그램 카운터), 상태 정보, stack pointer 등이 있다.

- 지역 데이터 : 해당 지역에서만 유효한 데이터. 제어하기 위해 필요하다.

- 스택 Stack

 


 

하나의 프로세스 안에 여러 개의 thread가 공유하는 자원을 각자 제어한다.

 

프로세스에 할당된 메모리 공간 (resource) 이 있고, 같은 프로세스의 threads는 동일한 주소 공간을 공유한다.

threads는 그 주소 공간을 가리키는 PC를 각자 가지고 있다.

다만, thread마다 작업 영역인 Stack을 가진다.

 

Thread 의 개념

- Light Weight Process (LWP) : 무게가 가벼운 프로세스

- 원래는 프로세스가 자원과 제어를 모두 가지고 있었지만, thread는 여러 개의 제어가 하나의 자원을 공유하는 형태인 점이 다르다.

- 프로세서 (CPU) 를 활용하는 기본 단위로, 여러 thread가 동시에 CPU를 사용할 수 있다.

- 구성 요소

  • Thread ID
  • Register set - PC, SP 등
  • Stack - local data, 자신 만의 작업 영역

- 전통적인 프로세스는 단일 thread 프로세스인 것이다.

 

Single thread vs Multi thread

 

 

Thread의 장점

- 자원 공유 (Resource sharing)

기존에는 프로세스들이 자원을 번갈아가면서 사용하기 때문에 context switch만큼의 손해가 있었다.

 

하지만 thread들은 자원을 공유하기 때문에 context switch를 줄일 수 있고, 커널의 개입을 피할 수 있기 때문에 자원을 효율적으로 사용할 수 있다.

 

- 멀티 프로세서 (multi processor) 활용

평렬처리를 통해 여러 개의 CPU 코어를 동시에 사용할 수 있기 때문에 성능이 향상된다.

 

- 사용자 응답성 (Responsiveness)

일부 thread의 처리가 지연되더라도, 다른 thread는 작업을 계속 처리할 수 있다.

 

 


 

Thread 의 구현

커널 수준 / 사용자 수준

사용자 수준 Thread (User Thread)

thread를 라이브러리 형태로 구현한다.

- 이런 라이브러리가 thread의 생성과 스케줄링을 담당한다.

- 대표적으로 POSIX thread, Win32 threads, Java thread API 등이 있다.

 

커널은 thread의 존재를 모름

- thread를 생성하고 관리하는데 커널의 관리(개입)를 받지 않아서, 유연하게 관리가 가능하다.

- 이식성이 높다. 라이브러리만 있는 시스템이라면 우리가 만든 multi-thread 프로그램을 사용할 수 있다.

- 커널 수준 thread는 하나이지만, 사용자 수준 thread는 여러 개로, 다대일(n:1) 매핑이 이루어진다.

- thread를 관리하는 thread 제어 블록(TCB)도 사용자 영역에 생성된다.

 

- 커널은 프로세스 단위로 자원을 할당한다.

- 하나의 thread가 I/O가 필요하여 block 상태가 되면, 모든 thread가 대기해야 한다.

 

 

쉽게 말해, 커널이 멀티 쓰레드를 지원하지 않아서 사용자가 구현한 것이다.

  • 장점 : 빠르고 유연하게 관리할 수 있다
  • 단점 : 하나의 쓰레드가 block이면 같은 프로세스 내 다른 쓰레드도 대기한다. 프로세스 단위로 자원을 할당하여 프로세스 내에 쓰레드가 많으면 상대적으로 적은 자원을 할당받는다.

 

커널 수준 Thread (Kernel Threads)

: 사용자 수준에서 만든 thread 개수에 맞추어 커널 수준 thread를 생성하여 일대일(1:1) 매핑을 이룬다.

- thread 제어 블록 (TCB)가 커널 영역으로 내려온다.

- 커널이 직접 생성, 관리를 하기 때문에 overhead가 크다.

- 프로세스간의 context switching만큼은 아니지만 부하가 걸린다.

- 하나의 thread가 block 상태가 되어도, 다른 thread는 계속 작업 수행이 가능하다.

 

 


 

다대일 모델과 일대일 모델 모두 단점이 있기 때문에 다대다 (n:m) 모델을 만들었다.

 

 

혼합형 (n:m) Thread

n개 사용자 수준 thread - m개의 커널 thread (n > m)

- 사용자는 원하는 수 만큼 thread를 사용할 수 있다.

- 커널 thread는 자신에게 할당된 하나의 사용자 thread가 block 상태가 되어도, 다른 thread는 수행 가능하다.

- 효율적이면서 유연하다.

 

 


본 글은 HPC Lab. KOREAHECH YOUTUBE 채널의 김덕수 교수님 강의를 보고 작성되었습니다.

 

[Course] Operating System (CPA310) - 운영체제 강의

o Operating System (운영체제), CPA310, KOREATECH o Instructor: Duksu Kim (김덕수) o Course homepage: https://sites.google.com/view/hpclab/courses/operating-system 운...

www.youtube.com

 

Comments