Thread (스레드)가 나오게 된 배경
운영체제가 작업을 처리하는 단위는 프로세스이다.
사용자가 운영체제에게 작업을 요구하면 그만큼 프로세스의 수가 늘어난다.
프로세스를 생성하면 PCB가 생성되고
메모리에 코드, 데이터, 스택, 힙 영역을 만들어줘야 한다.
프로세스의 수가 많아지면, 프로세스의 수 만큼
PCB, 코드, 데이터, 스택, 힙 영역도 만들어줘야 하기 때문에,
메모리의 공간을 너무 많이 사용하게 된다.
예를들어 웹 브라우저를 실행시키면 프로세스 1개가 생성된다.
여기서 웹브라우저의 탭을 1개 더 추가하면,
기존 프로세스를 복사해서 총 2개의 프로세스가 존재하게 된다.
만약 탭을 10개를 추가하게 된다면,
프로세스의 복사가 10번 일어나고 PCB, 코드, 데이터, 스택, 힙 영역 도 10개가 생성된다.
결국 웹 브라우저가 메모리를 너무 많이 차지하게 된다.
심지어 이 웹브라우저의 탭들이
서로 통신을 하려면 IPC(Inter Process Communication)을 이용해야 하는데
IPC는 통신의 비용이 상대적으로 많이든다.
시스템 개발자들은 어떻게 이러한 문제를 해결할까 고민을 하였고
Thread(스레드)라는 것을 고안하였다.
스레드는 프로세스 내에 존재하는 것으로 1개 이상이 존재할 수 있다.
1개의 프로세스의 1개의 스레드가 있을 수 있고,
10개의 스레드가 있을 수도 있다.
한 프로세스 내에 스레드들은 그 프로세스의 PCB, 코드, 데이터, 힙 영역을 공유한다.
스택은 공유하지 않고, 각 스레드마다 하나씩 가지고 있다.
이제 프로세스 내에 여러 개의 스레드가 있으니 각각의 스레드도 구분해야 할 필요가 생긴다.
그래서 스레드 id 도 부여하고
이 스레드를 관리하기 위한 Thread Control Block(TCB)가 생겼다.
이전 웹 브라우저 예시를 다시 들어보자.
웹 브라우저를 실행하면 프로세스 하나가 생성되고 스레드도 하나 생성된다.
여기서 탭을 하나 더 추가하면 프로세스를 복사해서 쓰는 것이 아니라 스레드를 하나 더 생성한다.
이렇게 되면 지금 프로세스 내에 스레드가 2개가 있는 것이다.
탭을 10개까지 생성하면 프로세스 1개 내에 스레드 10개가 생성된다.
(실제로 모든 웹브라우저가 이런 식으로 구동하지는 않는다.)
프로세스와 스레드의 장단점
마지막으로 프로세스와 스레드의 장단점을 알아보자.
1) 안정성
프로세스는 서로 독립적이기 때문에,
하나의 프로세스가 문제가 있더라도 다른 프로세스는 영향을 받지 않는다.
반면 스레드는 하나의 프로세스 내에 존재하기 때문에
해당 프로세스에 문제가 생기면 그 안에 있는 모든 스레드에 문제가 발생한다.
이러한 이유로 안정성 측면에서는 프로세스 방식이 스레드 방식보다 더 우수하다고 볼 수 있다.
2) 속도와 자원
각각의 프로세스는 서로 고유한 자원을 가지고 있다.
코드, 데이터, 스택, 힙 영역을 전부 따로 두고 있고
프로세스 간의 통신을 하려면 IPC를 이용해야 해서 오버헤드가 크고 속도가 느리다.
반면 스레드는 한 프로세스 내에서
스택 영역을 제외한 모든 영역을 공유하기 때문에 오버헤드가 굉장히 작다.
스레드 간의 통신을 통해 데이터를 서로 공유할 수 있으니 쉽게 할 수 있지만,
공유되는 공간에서 문제가 생길 순 있다. (데이터 동기화 문제)
'운영체제' 카테고리의 다른 글
[운영체제] 컴퓨터 시스템 스케줄링의 주요 목표 (0) | 2024.05.24 |
---|---|
[운영체제] CPU 스케줄링 - 다중 큐 (0) | 2024.05.23 |
[운영체제] 프로세스의 생성/종료 (0) | 2024.05.21 |
[운영체제] Context Switching (문맥교환) (0) | 2024.05.20 |
[운영체제] 프로세스 상태 (Process Status) (0) | 2024.05.16 |