Search

[OS] 쓰레드

태그
CS
작성 상태
작성 완료
작성일
2024/01/26
참고 링크
참고 링크 2

쓰레드

프로세스보다 작은 실행 흐름의 최소 단위이다. CPU의 기본 단위라 할 수 있다. 모든 프로세스는 최소 한개의 쓰레드를 가진다.
프로그램이 점점 복잡한 작업을 수행하게 되면서, 논리적으로 하나의 프로그램에 속한 작업들을 동시에 수행할 필요가 있게 되었다. 예를 들면 웹 서버의 경우 동시에 여러 사용자의 요청을 처리해야 하므로 각 사용자의 요청을 처리하는 작업을 동시에 수행해야 한다. 이를 위해 요청이 들어올 때 마다 새로운 프로세스를 만들어서 이를 수행하게 할 수 있다. 하지만, 프로세스를 새로 생성하는 것은 비용이 큰 일이고, 이렇게 생성된 프로세스가 수행하는 일이 기존에 있던 프로세스와 거의 같기 때문에 생성 비용, 컨텍스트 스위칭 비용이 크게 낭비되는 것이다.
이 외에도 여러 작업이 동시에 수행되면서, 서로 데이터를 공유해야 하는 상황이 발생하면, 앞선 포스트에서 정리한 방법들을 이용해 프로세스간 통신을 해야 하는데, 이 역시 비용이 크다.
이런 이유로 “프로세스 내부에 더욱 작은 작업의 흐름” 이라는 개념이 필요해졌다. 그것이 쓰레드다. 쓰레드는 별도의 실행 흐름을 가지기 때문에 별도의 레지스터와 스택 영역, 프로그램 카운터를 가지지만, 코드영역, 자료영역, 힙 영역은 프로세스 레벨에서 공유한다.
쓰레드의 개념이 등장하게 되면서, 결국 앞선 포스트에서 이야기한 스케줄의 대상이 프로세스가 아니라 쓰레드가 된다.

쓰레드의 장점

1.
응답성 : 프로그램이 수행하는 작업들을 여러 쓰레드로 나누게 되므로, 사용자 응답성이 증가한다. 모바일 어플리케이션에서 서버와 통신하는 동안 다른 쓰레드가 화면을 랜더링할 수 있다.
2.
자원 공유 : 앞선 포스트에서 다룬 공유 메모리 설정 같은 것이 없어도, 쓰레드사이에는 메모리를 공유하므로 자원 공유가 쉽다.
3.
경제성 : 쓰레드는 프로세스 레벨에서 다른 쓰레드와 자원을 공유하기 때문에, 새로운 쓰레드를 생성하고, 컨텍스트 스위칭을 하는 비용이 프로세스의 그것보다 적다.
4.
다중 처리기에서 이익 : 하나의 프로그램이 하나의 프로세스로 동작한다면, CPU가 여러개 있어도 하나의 CPU에서만 실행되므로 아무 장점을 누릴 수 없다. 하지만, 쓰레드는 서로 다른 CPU에서 실행될 수 있으므로 병렬성이 향상된다.

쓰레드 컨트롤 블록(TCB)

프로세스의 메타 정보를 PCB 라는 형태로 표현하는 것 처럼, 쓰레드 역시 그 메타 데이터를 TCB라는 형태로 메모리에 저장해야 한다.
PCB가 TCB의 리스트를 가리키고 있는 구조가 된다.

쓰레드의 종류

쓰레드라는 개념은 사용자(=일반 응용 프로그램) 레벨과 커널 레벨에서 제공할 수 있다.

사용자 레벨 쓰레드

프로그래머가 프로그래밍 언어를 통해, 자신의 프로그램에 여러개의 쓰레드를 생성하는 경우 이것은 사용자 레벨 쓰레드다. 즉, 커널 레벨의 쓰레드를 추상화 한 것이라 보면 된다.
사용자 레벨 쓰레드가 생성되는 것은 사용자 모드에서 수행된다.

커널 레벨 쓰레드

실제로 운영체제 입장에서 관리되는 실행 흐름의 최소 단위이다. 실제로 운영체제는 여러 커널 레벨의 쓰레드를 번갈아가면서 수행한다.
커널 레벨 쓰레드가 생성되는 것은 커널 모드에서 수행된다.

다중 쓰레드 모델

사용자 레벨의 쓰레드들은 궁극적으로 커널 레벨의 쓰레드에 사상되어야 동작할 수 있다. 실제로 작업을 수행하는 것은 운영체제고, 이를 위한 실행 흐름이 커널 쓰레드기 때문이다.
아래 설명에서 각 쓰레드들은 하나의 프로세스에 속한 쓰레드다.

다대일 모델

여러 사용자 쓰레드가 하나의 커널 쓰레드로 사상되는 방식을 말한다.
장점
1.
사용자 쓰레드를 생성하는 비용이 적다.
단점
1.
사용자 쓰레드 중 하나라도 블로킹이 필요한 시스템 콜을 할 경우 다른 쓰레드 역시 실행될 수 없다.
2.
커널 쓰레드가 하나이기 때문에, 다중 CPU환경이라 해도 여러개의 사용자 쓰레드가 동시에 실행될 수 없다.

일대일 모델

각 사용자 쓰레드를 하나의 커널 쓰레드로 사상되는 방식을 말한다.
장점
1.
사용자 쓰레드 중 하나가 블로킹이 필요한 시스템 콜을 해도 다른 쓰레드는 영향을 받지 않는다.
2.
커널 쓰레드가 여러개이기 때문에, 다중 CPU 환경에서 여러개의 사용자 쓰레드가 동시에 실행될 수 있다.
단점
1.
사용자 쓰레드를 생성할 때마다 커널모드에 진입해 커널 쓰레드를 생성해야 하므로 오버헤드가 크다.

다대다 모델

사용자 쓰레드를 이와 같거나 적은 수의 커널 쓰레드로 사상되는 방식을 말한다.
다대일 모델과 일대일 모델의 장단점을 절충한 방식이다. 프로세스에 할당되는 커널 쓰레드의 개수는 운영체제에 의해 적절하게 제공된다.
이를 적절히 변형하여, 프로세스의 중요한 쓰레드 한개를 하나의 커널 쓰레드로 사상되는것이 보장되고, 다른 쓰레드는 다대다 모델과 같이 제공하여, 프로세스의 중요한 흐름이 다른 쓰레드에 의해 블로킹 되는 것을 막아준다.