Computer Science/Operating System

[Operating System] Thread

aajin126 2023. 3. 30. 02:00

스레드(Thread)는 무엇인가?

스레드(Thread : lightweight process)는 CPU 활용의 기본 unit이다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 

(전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다.)

 

프로세스: 운영체제로부터 자원을 할당받은 작업의 단위.
스레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.

 

Thread의 구성 (각각의 스레드가 가지는 부분) : Program Counter, Register Set, Stack Space

Thread가 동료 thread와 공유하는 부분 : Code Section, Data Section, OS resource

 

PCB의 program counter와 register영역에 여러 스레드가 할당될 수 있다.

프로세스와 스레드의 차이점 

프로세스는 각각 독립된 메모리 영역을 할당해 주기 때문에 다른 프로세스의 변수나 자료에 접근할 수 없다. 이와 다르게 스레드는 메모리를 서로 공유할 수 있다고 언급했었다. 이에 대해 더 자세히 설명하자면, 프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 따로 할당받고, 나머지 Code/Data 형식으로 할당된 메모리 영역을 공유한다. 따라서 각각의 스레드는 별도의 스택을 가지고 있지만 메모리를 서로 읽고 쓸 수 있게 된다.

 

만약 한 프로세스를 실행하다가 오류가 발생해서 프로세스가 강제로 종료된다면, 다른 프로세스에게 어떤 영향이 있을까? 공유하고 있는 파일을 손상시키는 경우가 아니라면 아무런 영향을 주지 않는다.

그런데 스레드의 경우는 다르다. 스레드는 Code/Data 메모리 영역의 내용을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다.

 

또한, 다중 스레드로 구성된 task 구조에서는 하나의 서버 스레드가 blocked(waiting) 상태인 동안에도 동일한 task 내의 다른 스레드가 실행(running)이 되어 빠른 처리를 할 수 있다. 그래서 스레드를 사용하면 parallel 컴퓨팅을 할 수 있. (병렬성을 높일 수 있다.)

스레드의 장점

  • 반응성(Responsiveness) : 프로세스와 같이 여러 개의 프로세스나 스레드를 사용하여 하나가 blocked 상태라도 다른 프로세스나 스레드를 이용하여 처리할 수 있다.
  • Resource Sharing : 데이터를 공유한다는 장점이 있지만 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
  • 경제성 : 프로세스 간의 Context-Switching 시에는 많은 자원 손실이 발생한다. 그러나 스레드 간의 Context-Switching에서는 메모리를 공유하고 있는 만큼 부담을 덜 수 있다.
  • Utilization of MP Architectures : 각각의 스레드는 다른 프로세스에서 병렬적으로 실행될 수 있다.

커널 스레드(Kernel Thread)와 유저 스레드(User Thread)

커널 스레드와 유저 스레드는 생성 주체가 누구냐에 따라 구분된다.

프로그래머 요청에 따라 스레드를 생성하고 스케줄링하는 주체가 커널이면 커널 스레드라고 한다.

커널이 스레드 모델을 지원하지 않거나 제공하는 스레드 모델이 마음에 들지 않을 경우, 커널에 의존적이지 않은 형태로 스레드의 기능을 제공하는 라이브러리를 활용할 수 있는데, 이러한 방식으로 제공되는 스레드를 유저 스레드라고 한다.


참고)

 Ewha Woman Univ. Operating System (2023-1. Prof. JinWook Kwon)