본문 바로가기
2023-1/운영체제

Thread

by 철없는민물장어 2023. 4. 18.
728x90
반응형

Process vs Thread

 

Process

: 실행중인 프로그램.

자원할당의 단위

메모리 주소 보호 단위

 

Thread

: 프로세스 내의 가벼운 실행 단위

Light-Weight Process: LWP로도 부름(Solaris의 LWP는 따로 있음..)

 

스케줄링과 디스패칭의 단위

 


Multithreaded Processes


Benefits

스레드 사용의 이점

  • Responsiveness
  • Resource sharing
  • Economy
  • Scalability

응답성

:인터랙티브 앱에서는 응답성이 중요하다. 스레드는 프로세스보다 응답이 빠르다.

 

자원 공유

: 스레드들은 메모리를 공유한다.

 

경제적이다

:프로세스 생성보다 스레드 생성이 가볍다.

 

확장성이 좋다

:

 


Three levels of Thread
  • Kernel thread
  • User thread
  • Light Weight thread(LWP)

 

Kernel Thread

:커널이 만들고 커널이 쓰는 스레드

OS가 커널 스레드를 지원하고 사용자app이 유저스레드를 사용하는 경우, 커널은 각 유저스레드를 처리할 수 있다.

유저 스레드와 커널 스레드를 매핑하여 작업을 처리한다.

 

생성,사용시 비용이 저렴하다(가볍다)

문맥교환이 프로세스에 비해 빠르다.

비동기 I/O시 사용하기 좋다. 

 

User Thread

: 사용자 레벨에서 만들어 사용함. 프로그래밍 언어 레벨에서 모든것을 책임.

OS단에 커널스레드가 없어도 유저스레드를 만들어 사용가능.

프로그래밍에서 병렬성을 나타내는 내추럴한 방법.

동기화 문제(producer and consumer model) 에 사용

특히나 가볍고 빠름...

 

LWP

: split scheduling 해결을 위해 사용

 

Threads library는 유저 스레드를 스케줄링,

Kernel은 커널스레드/프로세스를 스케줄링하는데

서로가 서로의 행동을 모름..

또한 명시적인 커널 지원이 없는 경우, 유저 스레드는 동시성(가짜 병렬, illusion of parallelism)을 보일 순 있지만, 찐 병렬(parallelism)은 증가시킬 수 없다.

 

유저스레드-커널스레드 매핑에서 One-to-Many는 없다.


fork()

 

fork() 시스템 콜로 스레드를 생성할 수 있다.

 

프로세스 안에 여러  스레드가 있는데, fork()시 모든 스레드를 다 복사할지, 특정 스레드만 생성할 지..?

유닉스에서는 clone() or pthread_create()를 사용할 수 있다.

새롭게 만들어진 스레드는 동일한 PID를 갖고, 같은 전역변수를 갖지만 다른 TID를 갖는다.

 

모든 스레드를 포함한 새로운 프로세스를 생성할 때는 fork를 사용.

 

Thread Cancellation

스레드를 취소.

(예를 들어, 100GB 데이터를 10개의 스레드가 10GB씩 나누어 특정 값을 찾는다면, 한 번 찾은 이후에는 모든 스레드가 일 할 필요가 없음)

 

두 가지 접근이 가능하다.

-비동기 취소(Asynchronous cancellation: 즉시취소): 마스터 스레드가 보고있다가 타겟 스레드를 즉시 취소시킴

-Deferred cancellation: 주기적으로 취소돼야하는지 체크

 


Signal Handling

 

HW에서 OS로 알리는 것이 interrupt였다면, OS가 SW에 전달하는것이 signal

 

signal은 다음 상황들에서 발생

  • Exceptional conditions are generated(e.g. divide by zero)
  • Interrupt key by user(e.g. ctrl + c)
  • kill 명령어 사용시

시그널 핸들러는...

시그널을

해당 스레드에게 전달

모든 스레드에 전달

특정 그룹에 전달

시그널 처리 전담 스레드에 전달 등 옵션이 있음.

 


Thread pools

여러 스레드를 미리 생성해놓고, 동시에 처리할 작업이 있을 때 사용할 수 있도록 관리함.

1.만들어 놓은 것을 재사용함으로써 스레드 생성,소멸 오버헤드를 줄일 수 있다.

2. 동시에 실행되는 스레드 수를 제한하여 시스템 리소스를 효과적으로 관리할 수 있다. 이를 통해 과도한 리소스 사용을 방지하여 전체 시스템 안정성을 유지한다.(DDOS 공격시에도..효과적)

 

 


Thread Specific Data

스레드 특정 데이터는 각 스레드가 독립적으로 가지는 데이터.

다른 스레드와 공유되지 않는다.

 

전역변수의 안전한 사용이 가능하다.

: 전역 변수는 여러 스레드가 동시에 접근할 수 있기 때문에 동기화 문제가 발생할 수 있다. 

각 스레드에게 독립적인 전역 변수를 제공함으로써 이러한 문제를 해결할 수 있다.

 


scheduler activations

최상의 성능을 위해 유저 스레드에 커널 스레드를 몇 개 할당할지 정하는 것이 필요..

 

solaris에서는 Scheduler activation으로 LWP를 사용...

728x90
반응형

'2023-1 > 운영체제' 카테고리의 다른 글

Paging  (0) 2023.05.15
Memory Management and Virtual Memory  (0) 2023.05.06
CPU scheduler  (0) 2023.04.05
Process and Scheduling 2  (0) 2023.03.31
Process and Scheduling  (0) 2023.03.16

댓글