| 4.1 스레드 개요 |
| 4.1.1 프로세스의 문제점 |
| 4.1.2 스레드의 등장 |
| 4.1.3 새로운 문제 |
| 4.1.4 스레드 장점과 단점 |
이번 시간에는 스레드라는 새로운 개념에 대해서 알아볼 것이다.
4.1.1 프로세스의 문제점
지난 시간까지 우리는 프로세스에 대해 배웠다. 프로세스는 메모리에 적재되어 CPU에 의해 실행될 수 있는 프로그램이었다. 이러한 프로세스를 사용하기에는 약간의 문제가 있다.
1. 프로세스 생성의 오버헤드가 크다.
물론 fork() 시스템 콜을 통해 직접 프로세스를 생성하는 것 보다는 간단하지만 그럼에도 오버헤드는 여전히 크다. 메모리를 할당하고, fork() 시스템 콜을 호출하고, PCB를 부여하는 과정은 결코 가볍지 않다.
2. Process context switching의 오버헤드가 크다.
기존에 처리하던 레지스터 정보, 처리 영역 저장 후 새로운 컨텍스트를 불러오는 것 또한 일이다.
3. 프로세스간 통신이 어려움.
프로세스들은 가상 메모리, 즉 완전히 독립적인 주소 공간을 가지고 있기 때문에 서로 다른 프로세스끼리는 개입이 불가하다. 만약 프로세스간 통신이 필요하다면 별도의 방법이 필요하다.
이러한 문제점들은 하나의 작업을 여러 모듈 단위로 쪼개서 작업할 때 문제가 된다. 예를 들어 미디어 플레이어의 경우 영상을 영상 처리, 소리 처리, 자막, 기타 등의 작업이 동시에 이루어져야한다. 각 기능이 프로세스 기반의 멀티태스킹이라고 할 경우 context switching 하기에는 굉장히 무거운 작업이 될 것이다.
4.1.2 스레드의 등장
그래서 스레드라는 개념이 등장했다. 스레드는 프로세스보다 더 작은 실행단위이고, 현대 운영체제가 작업을 스케쥴링 하는 단위이다. CPU 스케쥴러가 CPU에 작업을 전달하는 단위가 바로 스레드인 것이다. 스레드를 lightweight process라고도 부른다.
스레드의 도입으로 프로세스의 생성 및 소멸에 따른 오버헤드가 갑소하고, 빠른 Context switching, 손쉬운 통신 등이 가능해진다.

그렇다면 프로세스와 스레드의 관계는 어떻게 될까? 간단히 생각해 프로세스는 스레드를 담고 있는 커다란 컨테이너라고 이해하면 된다.
스레드는 곧 함수다. 따라서 프로세스는 1개 이상의 스레드로 구성된다. 프로세스가 생성될 때 운영체제에 의해 자동으로 1개의 스레드가 생성되는데 이를 main 스레드라고 한다. 물론 하나의 컨테이너에 여러 개의 스레드를 가질 수도 있는데 이를 멀티 스레드라고 한다. 다른 스레드들은 함수를 스레드로 만들어 줄 것을 요청하여 생성되고, 스레드 별로 TCB (Thread control block)이 생성되고, 이 TCP는 PCB에 등록된다.

프로세스는 스레드를의 공유 공간을 제공한다. 모든 스레드는 프로세스의 코드, 데이터, 힙 영역을 공유하나 스택은 스레드별로 별도의 공간을 사용한다. 스레드가 함수라는 것을 생각한다면 쉽다.
스레드로 만든 함수가 종료된다면 스레드는 종료되고 TCB 또한 제거된다. 프로세스에 속한 모든 스레드가 종료될 때, 비로소 프로세스도 종료되며 프로세스가 강제 종료될 경우에는 스레드 또한 강제로 종료된다.
4.1.3 새로운 문제
프로그램의 실행 단위는 함수이다. 따라서 스레드의 단위는 함수라는 것을 생각해야한다.
스레드들의 실행 순서를 알 수 없다는 것이 생각해보아야 할 점 중 하나이다. 하나의 자원을 여러 스레드가 사용하려고 할 때 어떻게 해야할까? 이와 같은 문제를 나중에 다룰 것이다.
4.1.4 스레드 장점 및 단점
장점
- CPU 응답성 향상
- 자원 공유, 효율성 향상
- 다중 CPU 운용 용이
단점
- 모든 자원을 공유하기 때문에 하나의 스레드가 잘못 될 경우 프로세스 전체가 다 죽을 수 있다.
- 너무 많은 스레드는 너무 많은 Context switching을 야기한다.
'CS > 운영 체제' 카테고리의 다른 글
| 4.3 스레드 모델 (3) | 2024.04.20 |
|---|---|
| 4.2 스레드 Deep dive (5) | 2024.04.20 |
| 4.0 스레드 (1) | 2024.04.20 |
| 3.4 프로세스 계층 구조 (2) | 2024.04.20 |
| 3.3 프로세스의 생성과 복사 (1) | 2024.04.20 |