스레드 - 실
자원은 공유하지만 각각의 제어를 가지고 있는 것

프로세스는 자원을 할당받고 제어하는 것이다.
제어부분만 따로 구분한 것이 thread라고 한다.
하나의 프로세스안에 thread가 여러개 있을 수 있다.

지역데이터는 stack에 전역 데이터는 힙에 저장된다.

같은 프로세스의 스레드들은 동일한 주소 공간 공유

Thread

Light Weight Process(LWP)

프로세서활용의 기본 단위

구성요소 - Thread ID, Register set(PC,SP), Stack(자기만의 작업 영역)

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

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

스레드의 장점
사용자 응답성 - 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리
자원 공유(효율성 증가) - 커널의 개입을 피할 수 있음 (context-switching 피함)
경제성, 멀티 프로세서 활용 (병렬처리를 통해 성능 향상)

스레드 사용의 예
게임할때 마우스, 마이크, 화면등은 I/O인데 작업을 할때마다 context-switching이 일어난다.
스레드를 3개 만들고 공유 데이터를 통해 게임을 가능하게 해준다.

스레드의 구현

사용자 수준 스레드

스레드를 라이브러리로 구현
POSIX threads, Win32 threads, Java thread API등
커널은 스레드의 존재를 모름
커널의 관리를 받지 않음 - 유연한 관리 가능, 이식성이 높음
커널은 프로세스 단위로 자원 할당 - 하나의 스레드가 block 상태가 되면, 모든 스레드가 대기

커널 수준 스레드

OS(Kernel)가 직접 관리
커널 영역에서 스레드의 생성,관리 수행 - Context switching등 부하(Overhead)가 큼
커널이 각 스레드를 개별적으로 관리 - 프로세스 내 스레드들이 병행 수행 가능

Multi-Threading Model
(n:1)사용자 (1:1)커널
--> (n:m)스레드
n개 사용자 수준 스레드 - m개의 커널 스레드 (n>=m)
사용자는 원하는 수만 큼 스레드 사용
커널 스레드는 자신에게 할당된 하나의 사용자 스레드가 block상태가 되어도 다른 스레드 수행 가능
효율적이면 유연함


+ Recent posts