참고 : [Course] Operating System (CPA310) - 운영체제 강의
[ 운영 체제 5강. 스레드 관리 ]
1. Process & Thread
-
자원(Resource)은 프로세스에 할당된다!
-
프로세스는 자원(Resource)을 제어한다!
- 자원 & 제어를 “Thread”라고 하고,
- 하나의 프로세스에는 여러 개의 Thread가 있을 수 있다.
- 프로세스안에 여러 개의 thread가 존재할 수 있고,
- 각 thread는 자기만의 제어를 할 수 있음
- 이 thread들이 사용하는 resource는 서로 공유함
(1) 프로세스에 할당된 메모리 공간
같은 프로세스들 ( 내의 여러 스레드들은 ) 동일한 주소 공간을 공유한다!
그 안에, 자신만의 할당된 stack을 가진다.
(2) 요약
- Thread = “LIGHT” weight process (LWP)
- 이유? 프로세스는 자원+제어를 가지고 있어야 하는데, 쓰레드는 “자원은 공유”하고, “제어”만 각자 가지고 있기 떄문에, 일반 프로세스보다는 가볍기 때문!
- 프로세서 활용의 “기본 단위”
- 구성 요소
- 1) Thread ID
- 2) Register Set ( ex. PC (Program Count), SP (Stack Pointer) )
- 3) Stack ( 자신만의 Stack 영역)
- 다른 스레드들과 함께 자원 공유!
- 전통적 process = “단일 thread” process!
(3) Single vs Multi thread
(4) Thread의 장점
-
1) 사용자 응답성
- 특정 스레드 지연되어도, 다른 스레드는 작업 계속 OK
-
2) 자원 공유를 통한 효율성 UP
-
process 1 & 2 둘다 자원 A 사용 중인 상황. process 1이 A를 사용하는 동안은, process 2는 대기 중
( 번갈아 가면서 사용 중 ( =context switching 발생 중 )
-
이게 “process” 대신 “thread”라면, 둘이 자원을 공유하므로, context switching이 발생하지 않아서 보다 효율적으로 사용 가능!
-
-
3) 경제성 (Economy)
- 프로세스를 새로 생성하거나, context switch를 하는 것에 비해 효율적이다
-
4) Multi-processor 활용
- 병렬 처리 OK ( 여러 CPU core 동시 사용 가능 )
스레드 사용의 예시
컴퓨터 게임 중..
- 1) 화면 출력
- 2) 사용자의 입력
- 3) 스피커/마이크
스레드 3개를 이용하자!
(5) Thread의 구현
- 사용자 수준 thread
- 커널 수준 thread
사용자 수준 thread
- Thread를 라이브러리 레벨로 구현함
- 커널은 thread의 존재를 모른다
- 커널의 관리 X ( 더 효율적 & 유연하다 )
- 이식성이 높음 ( ex. JVM만 있으면 돌아감 )
- 커널은 “프로세스” 단위로 자원을 할당함
- 하나의 thread가 block시, 모든 thread가 대기해야함
- 커널의 관리 X ( 더 효율적 & 유연하다 )
커널 수준 thread
-
Thread를 커널이 직접 관리함! ( 따라서 overhead가 클 수 밖에 없음 . Context Switching 등 )
-
프로세스 내 “thread들이 병행 수행 가능”
2. Multi-Thraeding Model
(1) 다대일(n:1) 모델
- 사용자 수준 thread
(2) 일대일(1:1) 모델
- 커널 수준 thread
(3) 다대다(n:m) 모델 ( 혼합형 스레드 모델 )
-
(1), (2) 모두 사용하자
- n>m
- 혼합형 스레드라고도 부름
n개 사용자 수준 스레드 & m개의 커널 스레드 구조
-
사용자는 원하는 수 만큼의 스레드 사용
-
커널 스레드는, 자신에게 할당된 1개의 사용자 스레드가 block이어도, 다른 스레드는 OK
( 병행 처리 OK )
-
효율적 & 유연함