멀티프로세스, 멀티쓰레드, 멀티프로그래밍, 멀티태스크
멀티프로세서(Multi-Processor)
프로세서(Processor)란?
하드웨어적 측면에서 컴퓨터 내의 프로그램을 수행하는 하드웨어 유닛
CPU나 microprocessor를 말함
멀티프로세서란?
하나의 컴퓨터에 CPU(프로세서)가 여러 개 붙어있는 것을 의미
각각의 프로세서에는 서로 다른 작업(task)가 수행될 수 있다
멀티프로그래밍(Multi-Programming)
초기의 컴퓨터는 하나의 프로그램이 메모리에 올라가 하나의 프로그램만 CPU가 처리를 수행했다.
이런 구조는 프로세서의 처리 속도와 I/O 속도 간의 차이로 I/O가 완료될 때까지 프로세서는
다음 명령을 수행하지 못하고 IDLE한 상태가 됨 즉, 프로세서의 자원 낭비 발생
멀티프로그래밍은 프로세서가 어떤 프로그램의 I/O작업을 대기할 동안 다른 프로그램을 수행하도록 하는 것
이를 위해 메모리에 적재되는 프로그램은 하나가 아닌 여러 프로그램이 동시에 올라간다
멀티태스킹(Multi-Tasking)
Task란 운영체제에서 처리되는 작업의 단위 혹은 특정 일을 위한 명령어 집합을 뜻한다.
멀티 태스킹은 OS 스케줄링에 의해 *시분할(Time sharing)로 Task를 번갈아가며 수행하는 것을 의미한다
여러 개의 Task를 빠르게 번갈아 수행해 사용자는 동시에 여러 Task가 수행된다고 느낌
멀티 프로세싱(Multi-Processing)
하나의 응용 프로그램을 여러 개의 프로세스로 구성해 각 프로세스가 하나의 작업(Task)를 처리하도록 하는 것
프로세스는 기본적으로 하나의 쓰레드를 갖는다
[장점]
- 프로세스는 각각 개별 자원을 할당받는다. 따라서 여러 개의 자식 프로세스 중 하나가 문제가 발생하더라도
해당 자식프로세스가 죽는 것 외에 다른 영향으로 확산되지 않는다.
[단점]
- Context Switch에 따른 오버헤드 발생
Context Switch 발생 시 Cache에 있던 데이터를 모두 리셋하고 새로운 프로세스에 대한 데이터를 불러와야 함
- 프로세스는 각각 독립된 메모리 영역을 할당받기 때문에 자원을 많이 사용함
- 프로세스는 각각 독립된 메모리 영역을 할당받아 하나의 프로그램에 속하는 프로세스끼리 변수를 공유할 수 없다
따라서 프로세스 간의 통신 방법(IPC, Inter Process Communication)이 필요한데 복잡하고 어렵다.
멀티 쓰레딩(Multi-Threading)
하나의 프로세스가 다수의 작업을 각각의 쓰레드를 이용해 동작시킬 수 있다
[장점]
- 시스템 자원 소모 감소(자원 효율성 증가)
개별적인 자원을 할당하는 프로세스와 달리 하나의 프로세스에 할당된 자원을 쓰레드 간에 공유
- 시스템 처리량 증가(처리 비용 감소)
프로세스 간의 통신에 비해 쓰레드 간의 통신이 비용이 적음
쓰레드는 프로세스의 Stack 영역을 제외한 모든 자원을 공유한다
쓰레드 사이 작업량이 작아 Context Switching이 빠름
[단점]
- 동기화 문제 발생!!
쓰레드 간의 자원 공유는 전역 변수를 이용하므로 쓰레드 간의 충돌이 발생할 수 있어 조심해야함