개요
멀티 프로세스(여러 프로세스가 병렬적으로 일하는 것)공부를 하면서 여러 자료를 참고하는데, 이 4개의 용어에 대해 정의하는 바가 다들 달랐다. 여러 자료를 참고하면서 혼선이 왔고, 많이 찾아보고 구글링하며 내린 각각의 차이에 대해 명확하게 정리하는 포스팅이다.
멀티 프로세서(Multi-Processor, Multi-Processing)
단일 시스템 내에서 다중 cpu로 여러 작업을 처리하는 것이다.
하나의 cpu는 하나의 작업만 처리할 수 있다. 그냥 스펙을 쭉쭉 눌려서 여러 cpu를 두고 돈도 빵빵하게 쓰며 성능을 높이는 것이 멀티 프로세서-멀티 프로세싱이다.
장점
- 독립된 구조로 안정성이 높고, 하나의 프로세스에 문제가 생기더라도 다른 프로세스들에 영향을 주지 않는다.
단점
- 비용, 전력소모 등등 여러 비용 측면에서 비싸다.
- 단일 코어를 사용하느 것보다 관리가 어렵다.
멀티 태스킹(Multi Tasking)
단일 프로세싱 시스템은 하나의 cpu가 하나의 프로그램만 실행할 수 있으므로, 컴퓨터 자원을 효율적으로 사용하지 못하고 다른 프로세스는 계속 대기를 해야한다. 이러한 불편한 점을 해소하기 위해 멀티 프로그래밍, 멀티 태스킹 개념이 등장하였다.
멀티 테스킹은 하나의 프로세서가 여러 프로세스를 동시에 수행하는 것처럼 빠르게 Context Switching하여 작업을 처리하는 것이다.
장점
- Context Swtiching 간의 속도를 밀리세컨 단위로 컨트롤하여, 마치 동시에 작업을 수행하는 것처럼 작업 응답 시간을 최소화 함으로써 멀티 프로그래밍의 Starving 단점을 완화하였다.
단점
- 프로세스간 Context Switching은 오히려 성능 저하를 야기하기도 한다.
멀티 프로세스(Multi Process)
일반적으로 우리가 자주 사용하는 하나의 응용 프로그램을 여러 프로세스로 분할하여 실행하는 것이다.
ex) 웹 브라우저를 실행하고 여러 탭을 띄운다. 이때 각각의 탭은 독립된 프로세스로 실행되어 동시에 작업을 수행할 수 있다.
보통 멀티 프로세스는 부모 프로세스와 자식 프로세스로 이루어져 있다.
부모 프로세스는 자식프로세스가 좀비 상태가 되는 것을 방지하기 위해 항상 종료 처리 등의 관리를 해주어야 한다.
장점
- 프로세스는 각각의 독립적인 메모리 공간을 갖는다. 따라서 한 프로세스의 비정상적 활동이 다른 프로세스에게 영향을 주지 않는다. 따라서 프로그램의 안정성을 확보할 수 있다.
- 프로세스는 독립적이기에 응용 프로그램을 여러 프로세스로 분할하여 각각의 프로세스에 대한 모듈 작업을 통해 확장하기 좋다.
- 하나의 컴퓨터에 여러 서버(프로세스)를 두고 여러 요청을 처리하는 로드밸런서의 기능 또한 이러한 멀티 프로세스의 장점을 활용한 것이다.
단점
- 프로세스는 독립적인 메모리 공간과 리소스를 할당 받으므로, cpu 등의 자원 소모가 증가할 수 있다.
- 여러 프로세스 간 데이터를 주고받기 위해서 통신 비용이 많이 들 수 있고, 통신 방법이 따로 존재한다.(IPC, RPC)
- 하나의 응용프로그램을 프로세스로 분할하여 사용할 때, 프로세스 간의 상호작용과 동기화에 대한 작업이 필요할 수 있다.
멀티 스레드(Multi-Thread)
프로세스를 다수의 실행단위로 구분하여 프로세스 자원을 공유하고, 수행 능력을 향상하는 것이다.
앞서 살펴본 멀티 프로세스는 프로세스 간의 통신, Context Switching 면에서 부담이 적지 않았다.
하지만 스레드는 stack과 개별 register를 제외하고는 프로세스의 다양한 자원을 공유하므로, 멀티 프로세스에 비해 통신∙시분할 부담이 적다.
장점
- 스레드의 공유자원으로 인한 자원의 효율성 및 Context Switching 비용 감소
- 프로세스보다 속도가 빠르고 시분할 부담이 적다.
- Threads are cheap! (L08.pdf 참고)
단점
- 다수의 스레드가 동시에 한 자원에 대해 접근하고 사용할 때는 데이터의 동시 접근 및 수정에 주의할 필요가 있다. 이를 해결하기 위해 스레드 작업 순서를 관리하는 동기화는 필수적인 기술이다. 일반적으로 락(Lock)을 걸거나 하는데.. 이러한 동기화 작업도 여러 스레드를 통제하는 것이기에, 또 다른 문제가 발생한다. 임계영역 문제와 뮤텍스, 세마포어 등이다.
- 멀티 스레드는 여러 문제와 해결 방법에 대해서도 상세히 알 필요가 있기에, "멀티 스레드와 해결 알고리즘" 포스팅에서 상세히 다루도록 한다.
'CS > OS' 카테고리의 다른 글
[OS] Synchronous, Asynchronous, Blocking, Non-Blocking (1) | 2024.01.31 |
---|---|
[OS] user mode & kernel mode (0) | 2024.01.30 |
[CS] 비트마스킹 | 비트 연산자 | 비트마스킹과 집합 (0) | 2023.07.19 |
[OS] CPU Scheduling | preemptive & non-preemptive | 스케줄링 알고리즘 | 스케줄러 알고리즘 평가 (0) | 2023.05.11 |
[OS] 운영체제가 하는 일4가지 (0) | 2023.04.15 |