본문 바로가기
TIL (Today I Learned)/컴퓨터 시스템(CS)

[CS] 스레드 관리

by 둥굴프 2022. 12. 15.
이 포스팅은 한국기술교육대학교 김덕수 교수님의 운영체제 강의를 참고하여 작성되었습니다.

 

 

프로세스는 자원을 할당받고, 제어를 한다.

제어 부분을 스레드라고 한다.

출처 : 김덕수교수님 강의 자료

스레드(Thread)

 

Light Weight Process (LWP)

스레드는 자원은 공유하고 제어를 각각 가지고 있다.

프로세서(e.g., CPU) 활용의 기본 단위

구성요소

- Thread ID

- Register set (PC, SP 등)

- Stack (i.e. local data)

제어 요소 외 코드, 데이터 및 자원들은 프로세스 내 다른 스레드들과 공유

전통적 프로세스 = 단일 스레드 프로세스

 

스레드의 장점

사용자 응답성 (Responsiceness)

- 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능

 

자원 공유 (Resource sharing)

- 자원을 공유해서 효율성 증가 (커널의 개입을 피할 수 있음)

예 ) 동일 address space에서 스레드 여러 개

 

경제성 (Economy)

- 프로세스의 생성, context switch에 비해 효율적

 

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

- 병렬처리를 통해 성능 향상

(멀티 코어 프로세서)

 

스레드(Thread) 구현

 

사용자 수준 스레드 (User thread)

출처 : 김덕수교수님 강의 자료

 

사용자 영역의 스레드 라이브러리로 구현됨

- 스레드의 생성, 스케줄링 등

- POSIX thread, Win32 threads, Java thread API 등

 

커널은 스레드의 존재를 모름

- 커널의 관리(개입)를 받지 않음

생성 및 관리의 부하가 적음, 유연한 관리 가능

이식성(portability)이 높음

- 커널은 프로세스 단위로 자원 할당

하나의 스레드가 block 상태가 되면, 모든 스레드가 대기

(single-thread kernel의 경우)

 

커널 수준 스레드 (Kernel thread)

출처 : 김덕수교수님 강의 자료

 

OS(Kernel)가 직접 관리

 

커널 영역에서 스레드의 생성, 관리 수행

- Context switching 등 부하(Overhead)가 큼

 

커널이 각 스레드를 개별적으로 관리

- 프로세스 내 스레드들이 병행 수행 가능

하나의 스레드가 block 상태가 되어도, 다른 스레드는 계속 작업 수행 가능

 

혼합형 (n:m) 스레드

출처 : 김덕수교수님 강의 자료

 

n개 사용자 수준 스레드 - m개의 커널 스레드 ( n> m )

- 사용자가 원하는 수만큼 스레드 사용

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

병행 처리 가능

 

효율적이면서도 유연함

 

 

Summary

 

스레드는 자원은 공유하지만, 각각의 자신만의 제어 요소들을 가지고 있다.

이게 왜 좋냐? 자원을 공유하기 때문에 작업을 효율적으로 할 수 있다.

여러 개의 CPU 코어 자원을 동시에 사용할 수 있다(병렬 처리가 가능하다).

 

 

 

긴 글 읽어주셔서 감사드립니다.

22.12.14

댓글