Thread = basic unit of CPU utilization (CPU의 수행 단위)
Thread
Thread의 개념
-
동일한 일을 하는 프로세스가 여러 개 있다면, 이들을 별도의 프로세스로 만들면 프로세스별로 메모리 주소공간이 여러 개 만들어짐 → 메모리 낭비
- 같은 일을 하는 프로세스를 여러 개 띄워놓고 싶다면 주소공간은 하나만 띄워놓고 프로세스마다 다른 부분의 코드를 실행할 수 있도록 하면 됨 ⇒ 이것이 프로세스의 개념
-
즉, 프로세스 하나에 CPU 수행 단위만 여러 개 두고 있음
- 각 Thread마다 현재 register에 어떤 값을 넣고, PC가 어느 부분을 가리키고 있는지, stack 정보 등을 별도로 유지함
- 즉, Thread는 프로세스 하나에서 공유할 수 있는 것(메모리 주소공간, 프로세스 상태, 프로세스가 사용하는 각종 자원 등) 은 최대로 공유하고, CPU 사용과 관련된 정보(PC, registers, stack 등)는 별도로 가짐
-
Thread = lightweight process 라고도 부름
- 프로세스를 별도로 두는 것보다, 프로세스 안에 Thread를 별도로 두는 것이 훨씬 가볍기 때문
- 전통적인 프로세스는 heavyweight process 라고 부름
Thread의 구성
- Thread 간에 독립적으로 가지는 것
- Program counter
- register set
- stack space
Task
- Thread가 동료 Thread와 공유하는 부분
- code section
- data section
- OS resources
- 하나의 프로세스 안에는 하나의 task가 존재함 (공유하므로)
Thread의 장점
- Responsiveness (빠른 응답성)
- 하나의 프로세스 안에 Thread를 여러 개 두면, Thread 하나가 blocked 상태일 때 다른 Thread가 CPU를 잡고 running할 수 있어서 응답시간이 빨라짐
- ex) 웹브라우저에서 naver를 볼 때, Network를 통해 웹페이지를 읽어옴 (I/O 작업에 해당). 웹페이지를 읽어오는 동안에는 웹 브라우저가 blocked 상태가 됨. 이는 사용자 입장에서 답답함. 따라서 웹브라우저를 여러 개의 Thread를 사용해서 프로그램을 만들어놓게 되면, 하나의 Thread가 naver 웹서버에서 그림 등을 불러오는 동안에 이 프로세스를 blocked 시키지 않고(해당 thread만 block됨), 또다른 thread가 이미 읽어온 text를 화면에 display함으로써 사용자가 결과를 빨리 볼 수 있도록 함. 즉, 사용자에게 빠른 응답성(Responsiveness)을 제공할 수 있음
- 일종의 비동기식 입출력이라고 볼 수 있음. (I/O 결과를 보고 나머지 작업을 하는 것이 아니라, I/O를 던져놓고 할 수 있는 나머지 작업을 하니까)
- Resource Sharing (자원 공유)
- 같은 일을 하는 작업을 별도의 프로세스로 만들어두면, 메모리 등의 자원이 낭비됨. 즉, Thread를 사용하면 자원을 절약할 수 있음
- Utilization of MP Architecture
- (CPU가 여러 개 달린 컴퓨터에서는,) 스레드 사용 시 병렬성을 높일 수 있음
- Economy
- 프로세스를 하나 만드는 작업, context switch가 일어나는 작업 등에 비해 thread를 만들고, thread 간 switch를 하는 것이 overhead가 훨씬 작음
- thread 간의 switch는 간단함 (동일한 주소공간을 쓰고 있기 때문에 대부분의 문맥을 그대로 사용할 수 있기 때문)
- throughput
- 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율을 얻을 수 있음
Thread 구현 방법
- Kernel Threads
- OS kernel의 지원을 받고 있음
- Thread가 여러개 있다는 사실을 OS kernel이 알고 있음
- 따라서 하나의 Thread에서 다른 Thread로 CPU가 넘어가는 것도 kernel이 CPU scheduling을 하듯이 넘겨줌
- User Threads
- 라이브러리를 통해서 지원됨
- 프로세스 안에 Thread가 여러개 있다는 사실을 OS가 모름
- User program이 스스로 여러 개의 thread를 관리함
- kernel이 볼 때는 일반적인 프로세스로 보임
- 프로세스 본인이 CPU 수행단위를 내부에 여러개 두어서 관리함
- real-time Thread 등도 존재함
질문
참고 링크
KOCW 운영체제 - 이화여대 반효경 교수 (2014-1) 6, 7강