Thread Management
스레드
프로세스와 스레드
프로세스가 하는 일은 능동적인 개체로써 실행 중에 각종 자원을 요구, 할당, 반납
그리고 제어하며 작업을 완료하는 것이다. 즉, 자원을 제어하여 작업을 완료한다.
여기서 제어 부분만 따로 분리해 놓은 것을 쓰레드(Thread) 라고 부른다.
그리고 하나의 프로세스 내에서는 여러개의 쓰레드가 존재할 수 있다.
스레드 자세히 알아보기
제어하는 영역에서는 다양한 제어 정보들을(SP, PC 등등) 가지고 있다.
• SP : Stack Pointer
• PC : Program Counter
그리고 제어를 위해 사용하는 지역 데이터도 가지고 있다.
변수 a와 b는 해당 스코프 내에서만 유효한 데이터가 된다.
즉, 해당 스코프 내의 로직을 제어하는데 필요한 데이터들이다.
for () {
int a;
int b;
}
그리고 지역 데이터들은 스택영역에 저장이된다.
스레드의 주소 공간
같은 프로세스 내에서 동작하는 스레드들은 동일한 주소 공간을 공유한다.
스레드의 개념
• 제어 요소 외 코드, 데이터 및 자원들은 프로세스 내 다른 스레드들과 공유.
• Light Weight Process (LWP) : 자원은 공유하고 제어만 하기 때문에
• Processor(CPU) 활용의 기본 단위
• 전통적 프로세스 = 단일 스레드 프로세스
• 구성요소 = Thread ID(식별자) + Register Set(제어정보) + Stack(작업 영역)
스레드의 장점
⒈ 사용자 응답성 (Responsivenes)
• 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리가능
⒉ 자원 공유 (Resource Sharing)
• 자원을 공유해서 효율성 증가
Context Switching의 경우에는 커널의 개입이 불가피하기 때문에
Multi Thread를 사용함으로써 이 커널의 개입을 피할수 있다.
⒊ 경제성 (Economy)
• 프로세스의 생성 및 context switch에 비해 효율적
⒋ Multi Processor 활용
• 병렬처리 를 통해 성능 향상
스레드 사용의 예시
• 풀스택 개발자와 비 풀스택 개발자
• 집과 가족 구성원
스레드의 구현
사용자 수준 Thread
• 사용자 영역의 스레드 라이브러리로 구현 됨
▷ 특징
사용자가 프로세스를 만들면 커널영역에 커널 수준 스레드가 생긴다.
프로세스 내부적으로는 여러개의 스레드를 어떠한 라이브러리를 통해서 제어한다. 그러면 해당
라이브러리 안에 스레드 제어 블록(TCB) 이 생생된다. 이 TCB가 “라이브러리 스레드”를 제어한다.
이렇게 되면 커널 수준의 스레드는 한 개이고, 사용자 수준의 스레드는 여러개가 된다.
이런 경우를 보고, 다대일(n:1)맵핑이라고 한다.
▷ 장점
이때 커널은 사용자 영역에 있는 스레드들의 존재를 모르게된다.
따라서 커널의 관리(개입)을 받지 않는다. 이에 따른 장점은 아래와 같다.
• 라이브러리 수준의 스레드를 통해서 관리 하므로, 생성 및 관리의 부하가 적다.
• 유연한 관리가 가능하다.
• 이식성이 높다. → 스레드 라이브러리만 있다면 어디든 우리가 만든 프로그램을 실행할 수 있다.
▷ 단점
커널은 프로세스 단위로 자원을 할당한다. 그런데 만약 하나의 스레드가 block상태가 되면,
모든 스레드가 대기상태로 변한다. 이는 single thread kernel의 경우애만 해당된다.
이해 불가…
위 그림으로 이해를 해보자면, 프로세스와 커널영역의 스레드는 1:1 매핑이다.
그런데 여기서 사용자 수준의 스레드 중 하나가 I/O 요청이 들어와서 Block상태가 되면
현재 커널 수준의 쓰레드는 I/O 요청을 처리하는 행위를 할 것이다.
이렇게 되면 프로세스 단위로 자원을 할당하는 커널은 프로세스가 내려갔기 때문에
남은 사용자 수준 쓰레드의 요청을 받아들일 수 없다.
커널 수준 스레드
• OS(Kernel)가 직접 관리
▷ 장점
커널이 각 스레드를 개별적으로 관리하기 때문에 앞서 사용자 수준에서 봤던 문제와는
반대로 하나의 스레드가 block 상태가 될 때, 다른 스레드는 계속 작업이 가능하다.
▷ 단점
커널 영역에서 스레드의 생성, 관리 수행하기 떄문에 OverHead 크다.
Multi-Threading Model
혼합형(n:m) 쓰레드
• n개의 사용자 수준 스레드와 m개의 커널 스래드로 구성되어있다.
• 항당 사용자 수준의 스레드 갯수가 커널 스레드보다 많거나 같다.
• 효율적이면서도 유연하다.