게시:

스레드(Thread)란?

스레드(Thread)란 프로세스(Process) 내부에 CPU 수행 단위가 여러 개 있는 것을 말한다. 풀어서 설명하면 하나의 프로세스 안에 있지만 다른 CPU 수행 단위를 가지며 그 외 메모리와 같은 컴퓨터 시스템의 자원은 공유하는 것을 말한다. 다중 스레드로 구성된 프로세스를 태스크(Task)라고도 한다.

“A Thread(or light weight process) is a basic of CPU utilization.”

PCB Comparison of single thread and multi thread.
일반 프로세스(싱글 스레드)와 멀티 스레드 프로세스의 PCB 비교. PC와 레지스터 정보가 다르다.

예를 들어 같은 작업을 하는 프로세스를 여러 개 띄우고 싶은 경우 같은 작업을 하는 프로세스를 여러 개 돌리면 프로세스가 생성되는 만큼 주소 공간(Address Space)이 생성되고 메모리(Memory) 사용량이 증가한다.

이와 같은 경우 프로세스는 단일로 생성하고 프로세스 안에서 여러 개의 스레드로 나누면 하나의 주소 공간 안에서 CPU 수행과 관련된 각기 다른 PC(Program Counter)와 레지스터(Registers) 정보를 갖게되어 효율적으로 컴퓨터 시스템을 사용할 수 있다.

함수를 호출하는 경우 쌓이는 스택(Stack)도 공유하는데 CPU 수행 단위가 여러 개이기 때문에 스택 공간 또한 분할(공유)하여 사용한다.

Address space comparison of single thread and multi thread.
일반 프로세스(싱글 스레드)와 멀티 스레드 프로세스의 주소 공간 비교

정리하면 하나의 프로세스 안에서 공유 가능한 것(Code section, Data section, OS Resource)은 최대한 공유하고 다만 CPU 수행과 관련된 정보(PC, Registers, Stack Space)만 별도 관리하는 것을 스레드라 한다.

스레드를 사용할 때 얻는 이점

스레드를 사용함으로써 얻을 수 있는 이점은 크게 4가지다.

1. Responsiveness (빠른 응답)

다중 스레드 구성의 태스크일 때 하나의 스레드가 입・출력(I/O) 등으로 Blocked 상태가 되더라도 다른 스레드는 CPU를 넘겨 받아서 Running 상태가 될 수 있기 때문에 빠른 처리가 가능하다.

가령, 다중 스레드로 구성된 인터넷 클라이언트 프로세스에서 어떤 스레드가 비교적 시간이 오래 걸리는 네트워크 작업을 하면 그동안 다른 스레드가 텍스트 디스플레이를 하는 등 다른 작업을 처리하여 전체적인 처리 시간을 단축시킬 수 있다.

또한 동일한 일을 수행하는 다중 스레드의 경우에는 협력하여 높은 처리율(Throughput)과 성능 향상을 얻을 수 있다.

2. Resource sharing (자원 공유)

싱글 스레드 프로세스는 프로세스를 생성하는 만큼 메모리를 차지하지만 다중 스레드로 구성된 단일 프로세스는 같은 주소 공간을 공유함으로써 컴퓨터 시스템의 자원을 효율적으로 사용할 수 있다.

3. Economy (경제성)

새로운 프로세스를 생성하는 것에 비해 스레드를 생성하는 것이 오버헤드가 적고 프로세스를 바꾸는 즉, 컨텍스트 스위치(Context switch)에 비해 스레드를 전환하는 것이 오버헤드가 적다.

4. Utilization of Multi Processor Architecture

CPU가 여러 개인 멀티 코어의 환경에서는 스레드가 각기 다른 CPU에서 작업을 할 수 있어 병렬성을 높일 수 있는데, 예를 들어 큰 행렬의 곱셈을 수행하는 경우 보다 빠르게 결과를 얻을 수 있다.

스레드의 구현

운영체제가 프로세스 안에 멀티 스레드가 있다는 사실을 알고 있는 커널 스레드(Kernel Thread)와 모르는 유저 스레드(User Thread)로 나뉜다. 각 구현방식의 특징은 아래 목록과 같다.

  • 커널 스레드 (Kernel Thread)
    • 스레드가 여러 개 있다는 것을 OS가 알고 있다. (스레드의 존재를 안다.)
    • OS(Kernel)의 지원을 받는다.
    • 다른 스레드로 CPU를 넘기는 것도 CPU 스케줄링하듯 커널이 넘겨준다.
    • 예: Windows 95/98/NT, Solaris, Digital Unix, Mach.
  • 유저 스레드 (User Thread)
    • 프로세스 안에 스레드가 여러 개 있다는 것을 OS가 모른다. (스레드의 존재를 모른다.)
    • 라이브러리(Library) 형태로 구현한다.
    • 유저 프로그램이 스스로 라이브러리의 지원을 받아 여러 스레드를 관리한다.
      • 커널이 바라보면 일반적인 프로세스와 같다.
      • 프로그램 내부적으로 관리를 하는 방식이기에 제약이 있다.
    • 예: POSIX P-Threads, Mach C-Threads, Solaris Threads.

Reference

반효경, “반효경 [운영체제] 6. Process2” KOCW. 2014년 3월 21일. video, http://www.kocw.net/home/cview.do?lid=29d9a718cff884c3
반효경, “반효경 [운영체제] 7. Process3” KOCW. 2014년 3월 21일. video, http://www.kocw.net/home/cview.do?lid=54e1a4abcd59272d


OS 시리즈 모두보기 (펼치기)


댓글남기기