본문 바로가기

CS/운영체제

Thread란

지난 process의 정리에 이어서 스레드에 대해 정리해보려고 한다. 프로세스는 실행 중인 프로그램으로, 원초적으로 단일 스레드 프로세스를 말한다. 프로세스와 프로세스끼리는 약하게 연결이 돼있지만, 스레드와 스레드 사이에는 메모리를 공유하기 때문에 강하게 연결되어 있다. 예전에는 스레드라는 개념이 없었다. 프로세스의 개념만 존재했고, 단일 스레드를 가진  프로세스이므로 굳이 스레드라는 용어 자체가 필요하지 않았다. 하지만 오늘날 기술의 발전으로 인해 다중 코어를 가진 CPU가 생겨나 스레드를 생성해 멀티 쓰레딩 작업이 가능해지면서 시스템의 효율을 높일 수 있었다.

<쉽게 배우는 운영체제> 책을 참고하였습니다. 


Thread

쓰레드 구조

위 그림처럼  하나의 프로세스는 여러 개의 쓰레드로 구성될 수 있고, 프로세스 내의 스레드는 서로 강하게 연결되어 있다. 프로세스는 작업을 여러 개의 스레드에게 할당시킴으로써 부담을 줄인다. 즉 스레드는 프로세스가 할당받은 자원을 이용하는 실행 단위로, 가장 기본적인 CPU를 점유하는 단위로 볼 수 있다. 운영체제 입장에서 작업의 단위는 프로세스이고 CPU 입장에서의 작업 단위는 스레드이다.

 

스레드를 생성하면 프로세스 메모리 내에  공유되지 않는 Stack영역(스레드마다 별도의 스택 영역을 갖는 것이 아니라 프로세스의 스택 공간이 스택 포인터를 통해 나눠짐)과 Register Set, TCB(Thread Control Block) 정보가 커널 영역의 메모리에 할당이 된다. 그리고 TCB는 PCB와 유사하게 ThreadID, Program Counter의 정보들을 담고 있다. 이렇게 할당된 다중 스레드들은 독립적으로 행동하며 프로세스의 Code, Data, Heap 영역 그리고 파일 자원을 공유하면서 자원의 낭비를 막고 효율성을 높였다. 이 때문에 스레드는 LWP(Light Weight Process)라고도 부르며, 단일 스레드를 가진 프로세스는 HWP(Heavy Weight Process)라고 불린다. 

 

장점

  • 프로세스의 자원을 공유하기에 메모리를 아낄 수 있다
  • 자원의 중복이 일어나지 않기 때문에 멀티 프로세싱보다 효율적.
  • 하나의 프로세스 안에서 작업을 나눔으로써 작업의 성능이 증가한다.(한 스레드가 I/O 작업 중이라면 다른 스레드는 대기하지 않고 다른 작업을 처리할 수 있다. )
  • 스레드 간 Context Switching 비용이 낮다.

단점

  • Critical Section Problem : 각 쓰레드는 독립적이나, 공유되는 메모리 부분이 있기 때문에 한 스레드에서 문제가 발생하면, 전체에 영향을 미친다.
  • DeadLock(병목현상) 주의

 

프로세스 VS 스레드

프로세스

  • Heavy Weight Process
  • 실행 중인 프로그램을 의미
  • 프로세스 간 Context Switching 비용이 높음
  • 프로세스 생성까지의 시간은 오래 걸림
  • 프로세스 간 통신(IPC)의 비용이 더 큼
  • 프로세스 간 메모리 공유 X

 

스레드

  • Light Weight Process
  • 프로세스의 실행 단위
  • 스레드 간 Context Switching 비용이 낮음
  • 스레드의 생성시간은 프로세스의 생성시간에 비해 비교적 짧음
  • 스레드 간 통신 비용은 적음
  • 스레드 간 메모리 공유 O

 

Thread Pool

프로세스 내에서 병렬 작업 처리가 많아지면 이에 따른 스레드의 생성과 삭제가 빈번히 발생할 수 있다. 하지만 스레드 생성과 삭제가 과하게 일어난다면 OS는 매번 메모리 공간을 확보해주고 수거해야하기 때문에 오히려 독이 된다. 따라서 이러한 문제를 해결하고자 쓰레드의 개수를 제한할 수 있는 쓰레드 풀을 사용한다.  일정량의 쓰레드의 개수를 설정하고, 미리 생성해 놓는다. 하지만 쓰레드 풀 내의 스레드를 너무 적게 설정해도, 너무 과하게 설정하면 성능 저하나 메모리 낭비가 될 수 있기 때문에 적당히 설정하는 것이 중요하다.


참고하면 좋은 사이트

 

[운영체제(OS)] 4. 멀티쓰레드(Multithreaded Programming)

[목차] 1. Thread 2. Multithreading 3. User-level Thread vs Kernel-level Thread 4. Threading Issues 참고) - https://parksb.github.io/article/8.html - KOCW 공개강의 (2014-1. 이화여자대학교 - 반효경)..

rebro.kr

 

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

Dead Lock  (0) 2022.08.11
동기화 문제의 해결  (0) 2022.08.11
Multi-Process VS Multi-Thread  (0) 2022.08.03
Process란  (0) 2022.07.13
OSI 7 Layer와 TCP/IP 4 Layer  (0) 2022.05.08