Shine's dev log

쓰레드(Thread)_1 (쓰레드란?) 본문

운영체제

쓰레드(Thread)_1 (쓰레드란?)

dong1 2020. 4. 26. 20:25

1. 쓰레드(Thread)란?

 

우선 쓰레드라는 말이상황에 따라 다르게 쓰일 수 있다는 점을 인지해야 한다. CPU 제조사들이 말하는 쓰레드와, 운영체제 관점에서 바라보는 쓰레드는 다소 차이가 있다. 오늘은 운영체제 관점에서 바라본 쓰레드를 다룬다는 점을 미리 알아주세요.

 

우선, 쓰레드라는 것이 나오게 된 배경을 살펴보자.

 

앞서 공부했듯이 프로세스라는 추상화 모델을 이용하면, 프로그램을 돌리는데 굉장히 효과적이고 빨랐다.

 

동시에 여러가지일을 처리하려면 여러 프로세스를 만들어야 하는데, 프로세스를 하나 새로 만드는 것은 굉장히 복잡하고 무거운(?) 일이기 때문에, 보다 가볍게 할 수 있는 방법은 없을까? 생각을 하다 나온 개념이 바로 쓰레드 이다.

 

쓰레드는, 프로세스에서 execution state를 추출하여 만들어낸 개념이다.

 

여기서 execution state는 PC, SP, register와 같이 실제 코드들이 실행되는데 필요한 부분들을 말한다.

 

즉, 쓰레드는 프로그램에서 instruction들을 차례로 실행하는 역할을 한다.

 

코드가 쭉 있으면, 실로 코드를 하나하나 꿰어간다고 생각할 때, 그 실의 역할을 하는 것이 쓰레드라고 볼 수 있다.

 

즉, 프로세스는 굉장히 정적인 컨테이너고, 쓰레드가 동적으로 실행하는 역할을 한다.

 

 

 

2. Thread and Process

 

쓰레드의 관점에서 프로세스는 single-threaded process 와 multi-threaded process로 나눌 수 있다.

 

우선 single-threaded process의 경우, 하나의 프로세스에 하나의 쓰레드가 들어있는 것을 말한다. 즉, 하나의 실로 코드를 훑는 것을 상상하면 된다.

 

다음으로 multi-threaded process의 경우, 하나의 프로세스에 여러개의 쓰레드가 들어있는 것을 말한다. 즉, 여러개의 실로 코드를 나누어서 훑는 것을 상상하면 된다. 그래서 하나의 프로세스에 여러개의 실행이 동시다발적으로 수행될 수 있다.

 

single & multi - thread process

 

 

 

 

3. 쓰레드의 특징

 

전에 프로세스를 fork 하면, 자식 프로세스는 부모프로세스의 모든 address space를 복사하였다. 즉, 부모의 모든것을 그대로 복사하여 똑같이 재생산한 것이다.

 

반면 multi-thread process 에서 쓰레드는 address space 중 stack부분만 독립적으로 가지고, 나머지 code, heap, data, files 와 같은 부분은 모든 쓰레드들이 공유한다. 이를 그림으로 나타내보면 다음과 같다.

 

 

또한 address space의 관점에서 그림을 그려보면 다음과 같다.

 

address space of multi-thread process

 

위의 그림에서 주의깊게 봐야 하는 사실은, 각각의 쓰레드마다 PC와 SP를 독립적으로 가진다는 것과, stack을 제외한 나머지 부분은 쓰레드들이 공유한다는 사실이다. code 부분만 봐도, 쓰레드들이 같은 메모리를 공유한다는 것을 알 수 있다.

 

 

4. 멀티쓰레딩의 장점

 

이렇게 multi-thread 프로세스를 이용하면 여러가지 이점이 있는데,

 

1) concurrency를 아주 간단하게 얻을 수 있다.

 

2) 멀티코어 구조의 CPU에 잘 맞는다.

 

3) Throughput을 증가시킬 수 있다. (각각의 쓰레드마다 기능을 분리시켜서)

 

4) 같은 메모리를 공유하므로, 자원분배가 효과적이다.

 

5) 웹서버와같이 동시다발적으로 여러 요청이 들어오는 경우 처리하기 용이하다.

 

 

 

오늘 내용을 정리해보면,

 

1. 쓰레드는 프로세스에서 실제 실행을 담당하는 execution state를 추출해낸 것이다.

 

2. 멀티 쓰레드 프로세스의 경우, 메모리 영역 중 스택을 제외하고 모두 공유한다.

 

3. 멀티 쓰레드는 여러 이점이 있다.

 

 

본 내용은 공부하며 정리한 것으로, 치명적인 오류가 있을 수 있습니다.

 

'운영체제' 카테고리의 다른 글

쓰레드(Thread)_2 (multi threading models)  (0) 2020.04.27
Concurrency와 Parallelism  (0) 2020.04.26
UNIX 의 파일 처리  (0) 2020.04.15
Unix 시스템 소개 및 구조  (0) 2020.04.15
IPC_2 (signals, RPCs, pipe)  (0) 2020.04.14