스레드 개념
• 프로세스 안에서 실행되는 여러 흐름 단위
◦ 프로세스가 생성될 때, 기본적으로 하나의 스레드가 함께 생성된다.
◦ 즉 프로세스마다 최소 한 개 이상의 스레드가 존재할 수 있다.
멀티스레드
• 하나의 프로세스에 두 개 이상의 스레드가 존재하는 구조로, 여러 작업을 동시에 처리할 수 있다.
• 각 스레드마다 별도의 스택 영역이 독립적으로 주어지지만, 텍스트 / 데이터 / 힙 영역은 소속된 프로세스의 것을 공유하여 사용한다.
◦ 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해 스레드는 프로세스 내부의 다른 스레드와
공간, 자원을 공유하면서 사용한다는 점에서 차이가 있다.
• 사용자 스레드(User threads)
◦ 사용자 수준(user level)에서 실행되며 thread library에 의해 관리된다.
◦ 동일한 메모리 영역에서 스레드가 생성/관리 되므로 속도가 빠르다.
• 커널 스레드(Kernel thread)
◦ 커널 수준(kernel level)에서 실행되며 운영체제에 의해 직접 관리된다.
다중 스레드 모델
• Many-to-One Model
◦ 여러 사용자 스레드를 하나의 커널 스레드에 mapping 한 모델
◦ concurrency 는 얻을 수 있지만 parallelism 을 얻을 수 없다.
◦ 여러 개의 사용자 스레드 중 하나가 시스템 호출 등으로 중단되면 나머지 모든 스레드 역시 중단된다.
◦ 멀티코어 or 멀티프로세스의 이점을 충분히 활용할 수 없다.
• One-to-One Model
◦ 하나의 사용자 스레드를 하나의 커널 스레드에 mapping 한 모델
◦ blocking 문제가 발생하지 않는다.
◦ 멀티 코어나 멀티 프로세스의 이점을 활용할 수 있다.
◦ 사용자 스레드를 만드는 것은 곧 커널 스레드를 만드는 것을 의미한다. 커널 스레드가 많아지면 성능상의 문제가 발생할 수 있다.
◦ 가장 일반적으로 사용 되는 모델이다.
- 대부분의 시스템에서 처리 CPU 수가 증가함에 따라 커널 스레드의 개수를 제한하는 것의 중요성이 줄어들었기 때문에
Many-to-Many 모델보다 더 많이 사용된다.
• Many-to-Many Model
◦ 많은 사용자 스레드를 같거나 더 적은 수의 커널 스레드에 mapping 한 모델
◦ blocking 문제가 발생하지 않는다.
◦ 멀티 코어나 멀티 프로세스의 이점을 활용할 수 있다.
◦ 가장 flexible 하지만 구현하기 어렵다.
• Two-Level Model
◦ Many-to-Many 방식과 One-to-One 방식이 함께 존재하는 모델
◦ 두 모델의 장점을 모두 누리기 위해 고안된 모델이다.
멀티스레드의 장단점
• 장점
◦ 응답성
- 동시에 여러 작업을 수행할 수 있기 때문에 사용자에 대한 응답성을 증가시킨다.
◦ 자원 공유
- 프로세스는 공유 메모리와 메시지 전달을 통해서만 자원을 공유할 수 있지만 스레드는 동일한 프로세스 내부의 스레드들과
자원을 공유하기 때문에 자원 손실이 적다.
- 스레드 생성은 프로세스 생성보다 일반적으로 시간과 메모리를 적게 소비한다
- 자원을 공유하기 때문에 Context switching 속도는 프로세스 보다 스레드 사이에서 더 빠르다.
• 단점
◦ 안전성
- 스레드 끼리 메모리 공간을 공유하기 때문에, 하나의 스레드가 메모리를 훼손하면 다른 스레드의 작업에도 문제가 생길 수 있다.
- Critical Section 과 동기화 기법
- 하나의 스레드/프로세스가 수정 가능한 공유 자원을 액세스하고 있을 때,
그 스레드/프로세스에 의해 참조되는 영역을 Critical Section 이라고 한다.
- 특정 데이터에 여러 스레드/프로세스가 동시 접근하는 경우 문제가 발생할 수 있기 때문에,
동기화 기법을 이용해 특정 데이터에는 한번에 하나의 스레드/프로세스만 접근하도록 제한해야 한다.
멀티 프로세스
• 멀티 프로세스
◦ 여러개의 프로세스가 동시에 병렬적으로 처리되는 상황을 의미한다.
◦ 보통 하나의 컴퓨터에 여러개의 CPU를 장착해야 가능하다. 1코어 CPU의 경우 한번에 하나의 프로세스만 처리할 수 있기 때문이다.
◦ 장점 : 안전성
- 메모리 침범 문제를 OS 차원에서 해결해준다
◦ 단점 : 성능 저하
- 프로세스는 독립된 메모리 영역을 가지기 때문에 작업량이 많을수록 메모리 효율이 떨어진다.
또한 Context Switching 으로 인한 오버헤드가 발생하기 쉽다.
참고자료
'CS Knowledge > 운영체제' 카테고리의 다른 글
[OS] CPU 스케줄링 알고리즘 (0) | 2022.09.16 |
---|---|
[OS] CPU 스케줄링 개념 (0) | 2022.09.16 |
[OS] 프로세스와 Context Switching (0) | 2022.09.08 |
[OS] 운영체제 구조 (0) | 2022.09.07 |
[OS] 운영체제 개요 (0) | 2022.09.07 |