멀티프로세스와 멀티스레드
멀티 프로세스(Multi Process)
개념
- 하나의 어플리케이션을 여러 개의 프로세스로 구성하여 다수의 프로세서(CPU)가 각 프로세스를 병렬 처리, 즉 동시 처리하는 것이다.
- 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용한다.
- 프로세스 간 통신을 하기 위해서는 IPC를 통해야 한다.
장점
- 프로세스 간 독립된 구조로 안정적이다.
- 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않으므로, 작업이 정지되지 않는다.
- 프로세스 간 메모리 침범 문제를 OS 차원에서 해결할 수 있다.
단점
- 각각 독립된 메모리 영역을 가지고 있어,
- 작업량이 많을수록 오버헤드가 발생한다.
- 오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리
- 프로세스별 메모리 할당을 위한 메모리 사용량이 많아진다.
- 오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리
- 스케쥴링에 따른 Context Switch이 많아지고, 성능 저하의 우려가 있다.
- Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 처리 시간이 소모된다.
- 프로세스 간 Context Switching이 발생하면 캐시에 있는 모든 데이터를 전부 리셋하고 다시 캐시 정보를 불러와야 한다.
- Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 처리 시간이 소모된다.
- 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다. 따라서 프로세스 간에 공유할 자원이 있다면 IPC(Inter Process Communication)를 통해 프로세스 간에 자원을 공유해야 한다. 그래서 공유할 메모리를 직접 참조하는 것보다 비효율적이다.
- 작업량이 많을수록 오버헤드가 발생한다.
멀티 스레드(Multi Thread)
개념
하나의 어플리케이션을 여러 개의 스레드로 구성하여 하나의 프로세스의 콘텍스트 내에서 자원을 공유하며 작업을 나누어 수행하는 것이다.
각각의 스레드가 고유의 레지스터와 스택으로 표현된다.
장점
- 시스템 자원 소모 감소 → 자원의 효율성 증대
- 프로세스를 생성하여 메모리 공간 등의 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다.
- 자원 공유가 쉽다. 스레드들은 부모 프로세스의 자원과 메모리를 공유 할 수 있다.
- 프로세스 간 통신 방법인 IPC에 비해 간단한 통신 방법 → 프로그램 응답시간 단축
- 동적으로 할당된 공간인 Heap 영역 또는 전역 변수 Data(static)의 공간을 이용한 데이터 공유로 자원 생성과 관리의 중복을 최소화한다.
- 시스템 처리율 향상
- 캐시 메모리를 비울 필요가 없고 Stack 영역만 처리하면 되기에 스레드 간
Context Switching
이 빠르다.
- 캐시 메모리를 비울 필요가 없고 Stack 영역만 처리하면 되기에 스레드 간
- 프로그램 응답 시간 단축
- 시스템 자원 소모 감소, 시스템 처리율 향상으로 인해 프로그램 응답 시간이 단축된다.
- 서버가 많은 요청을 효율적으로 수행 할 수 있는 환경을 제공한다.
- 새로운 프로세스를 생성하는 것보다 자신이 속한 프로세스에서 스레드를 생성하는 것이 빠르다.
- 프로그램의 일부분(스레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속된다.
문제점
여러 개의 스레드가 동일한 데이터 공간(Critical Section)을 공유하기에 동기화 문제가 발생할 수 있다. (ex. 병목현상, 데드락 등)
Critical Section: 임계 구역(critical section) 또는 공유변수 영역은 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다.
서로 다른 스레드가 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정하는 것을 방지해야 한다. 그래서 동기화를 통해 작업 처리 순서를 컨트롤 하고 공유 자원에 대한 접근을 컨트롤해야 한다. 하지만 이로 인해 병목현상이 발생하여 성능이 저하될 가능성이 높다. 그러므로 과도한 락으로 인한 병목현상을 줄여야 한다.
주의 깊은 설계가 필요하고 디버깅이 어렵다.
- 불필요 부분까지 동기화하면, 대기시간으로 인해 성능저하 발생
하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.
단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.
멀티 스레드 vs 멀티 프로세스
자원의 효율성 증대
1) 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스에 자원을 할당하는 것보다 스레드에 자원을 할당하는 것이 비용이 적다.
2) 스레드는 프로세스 내의 메모리를 공유하기 때문에 멀티 프로세스와 달리 공유 자원 할당을 위한 시스템 자원 소모가 줄어든다.응답 시간 단축 및 처리 비용 감소
1) 프로세스간 IPC를 사용하여 통신하는 것은 상대적으로 비용이 크다. 하지만 스레드는 프로세스의 메모리 영역을 공유하기에 스레드 간의 통신 비용이 적게 든다.
2) 프로세스간의 Context Switching은 느린 반면 쓰레드간의 Context Switching 은 빠르다. 그 이유는 Context Switching 시 스레드는 Stack 영역만 처리하면 되기 때문이다. 반면 프로세스는 캐시 메모리 초기화(캐시에 있는 모든 데이터를 전부 리셋하고 다시 캐시 정보를 불러온다) 등 무거운 작업이 진행되고 많은 처리 시간이 소모된다.안정성
1) 멀티 프로세스는 프로세스 간 독립된 구조로, 안정적이다.
- 하나의 프로세스가 종료되도 나머지 프로세스에 영향을 끼치지 않는다.
2) 멀티 쓰레드는 안정적이지 않다. - 하나의 스레드가 자신이 사용하던 데이터 공간을 망가뜨린다면, 해당 데이터 공간을 공유하는 모든 스레드를 망가뜨릴 수 있어 영향을 끼칠 수 있다.
- 여러 개의 스레드가 동일한 데이터 공간(Critical Section)을 공유하면서 이들을 수정한다는 점에 필연적으로 생기는 문제이다.
- 하나의 프로세스가 종료되도 나머지 프로세스에 영향을 끼치지 않는다.
- 두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있으므로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용해야 한다.
Reference
'CS > 운영체제' 카테고리의 다른 글
6.교착 상태 (0) | 2024.07.12 |
---|---|
5.프로세스 동기화 (0) | 2024.07.12 |
3. 멀티 태스킹과 PCB와 컨텍스트 스위칭 (0) | 2024.07.12 |
2. 프로그램과 프로세스, 스레드 (0) | 2024.07.12 |
1. 운영체제와 컴퓨터 (0) | 2024.07.12 |