티스토리 뷰

CS/운영체제

#11 프로세스와 Thread

RadderNepa 2023. 3. 3. 02:47

● 도입
- OS가 작업을 처리하는 단위를 프로세스라고 하며 사용자가 OS에게 작업을 요구하는 만큼 프로세스의 수도 늘어난다.
- 프로세스를 생성하면 각 프로세스 당 PCB가 생성되고 메모리에 코드, 데이터, 스택, 힙영역 등을 만들어줘야한다.
- 따라서 프로세스의 수가 많아지면 그 수 만큼 PCB, 코드, 데이터, 스택, 힙영역을 만들어줘야 하기에 너무 무거워진다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

ex)
- 크롬 브라우저는 탭 1개 당 1개의 프로세스가 생성된다.
- 100개의 탭을 열면 100개의 프로세스가 생성되는데 이렇게 되면 웹 브라우저가 메모리를 너무 많이 차지하게 된다.
- 웹 브라우저의 탭들은 서로간의 통신을 위해 IPC(Inter Process Communication)를 이용하는데 IPC는 통신 비용이 상대적으로 많이 든다.

https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EA%B0%84_%ED%86%B5%EC%8B%A0

Thread
- 이러한 문제(프로세스가 메모리를 많이 차지하는 문제)를 해결하기 위한 방법이 바로 Thread 이다.
- Thread는 프로세스 내에 존재하는 것으로 하나의 프로세스 안에 하나 or 여러개의 Thread가 있을 수 있다.
- 한 프로세스 내의 Thread 들은 해당 프로세스의 PCB, 코드, 데이터, 힙 영역을 공유한다.
- 단, 스택은 각 Thread 마다 개별로 가지고 있다.


- 프로세스 내에 복수의 Thread가 있는 경우 이를 구분해야 할 필요가 있다.
- 이를 위해 Thread ID를 부여하고 이러한 Thread 들을 관리하기 위한 TCB(Thread control block)이 생겼다.
- OS도 Thread ID와 TCB 등을 이용해 각 Thread를 구분할 수 있다.

- 이제부터 OS가 작업을 처리하는 단위는 프로세스가 아니라 프로세스 내의 Thread 이다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

 
ex1) Thread 생성을 브라우저를 이용해 설명(크롬이 아래의 설명처럼 된다는 것은 아니다.)

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- 브라우저를 실행하면 프로세스가 하나 생성되고 그 안에 Thread도 하나 생성된다.
- 이때 탭을 하나 더 추가하면 프로세스를 복사해서 새로운 프로세스를 만드는 것이 아니라 Thread를 하나 더 생성한다.
(하나의 프로세스 안에 두 개의 Thread가 있는 상태)
- 탭을 10개 생성하면 하나의 프로세스 안에 10개의 Thread가 생기는 것이다.
 
ex2) 크롬과 파이어폭스 비교
[크롬]
- 크롬 브라우저는 탭 1개당 1개의 프로세스를 생성한다.
- 만약 100개의 탭을 열면 100개의 프로세스를 생성하게 되고 그에 따라 100개의 PCB, 코드, 데이터, 힙, 스택 영역이 생긴다.
 
[파이어폭스]
- 파이어폭스 브라우저는 처음 4개의 탭에 대해서만 프로세스가 각각 생성되고 추가적인 탭은 생성된 프로세스내에 Thread를 추가하는 식으로 작동한다.
- 만약 100개의 탭을 열면 4개의 프로세스가 생성되고 이 4개의 프로세스 내에 100개의 Thread가 존재하는 것이다.
- 이러한 Thread 들은 프로세스의 코드, 데이터, 힙 영역을 공유하므로 크롬 브라우저에 비해 메모리 절약이 많이 된다.
(스택은 각 Thread 마다 개별로 가지고 있다.)


● 프로세스와 Thread 비교
1. 안정성
- 프로세스는 서로 독립적이기 때문에 하나의 프로세스가 문제가 있더라도 다른 프로세스에 영향을 미치지 않는다.
- 그에 반해 Thread는 하나의 프로세스 내에 존재하기 때문에 해당 프로세스에 문제가 생기면 그 안에 있는 모든 Thread에 문제가 발생하게 된다.
- 따라서 안정성 관점에서는 Thread 방식보다 프로세스 방식이 더 유리하다.
 
2. 속도와 자원
- 각각의 프로세스는 서로 고유한 자원을 가지고 있다.
- 즉, 코드, 데이터, 힙, 스택 영역을 각각 따로 가지고 있으며 프로세스 간 통신은 IPC를 이용해야 하기에 오버헤드가 크고 속도도 느리다.
- 그에 반해 Thread는 하나의 프로세스 내에서 스택 영역을 제외한 모든 것을 공유하기 때문에 오버헤드가 매우 작다.
- Thread 간의 통신은 데이터를 공유하므로 쉽게할 수 있지만 바로 이 공유되는 공간에서 문제가 발생할 가능성이 있다.
(나중에 프로세스 동기화에서 알아보자)

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함