멀티 프로세싱(Multi-Processing), 멀티프로그래밍(Multi-Programming), 멀티쓰레딩(Multi-Threading) 에 대한 기본적인 정의와 차이점 등을 살펴보겠습니다.


1) Multi-processing(멀티 프로세싱)

- 멀티프로세싱은 단어 그대로 하나의 프로세서가 아닌 하나 이상의 프로세서가 서로 협력하여 일을 처리하는 것을 가르킵니다. 처리해야 하는 작업이 간단한 경우에는 상관 없지만, 많은 작업을 빠른 시간에 처리하기 위해서는 하나의 프로세서가 처리하는 것은 보다 많은 시간을 요구하게 됩니다.

따라서, 여러 개의 프로세서가 하나의 작업을 병렬처리 하는 것이 효율적입니다. 여러 개의 프로세서가 하나의 컴퓨터에 있을 수도 있고, 여러 대의 컴퓨터가 있을 수도 있습니다. 따라서 멀티프로세싱의 개념을 컴퓨터로 나누기 보다는 여러 개의 프로세서, 즉 하나 이상의 프로세서가 작업을 병렬처리하는 것으로 정의하는 것이 좀 더 정확한 개념일 것이라고 볼 수 있습니다.

 

2) Multi-programming(멀티 프로그래밍)

- 초기의 컴퓨터는 하나의 프로그램을 처리한 후에 다음 프로그램을 처리해야 했는데, DOS를 사용해 본 사람이라면 쉽게 이해가 갈 것이라고 생각합니다. 하지만 하나의 프로그램을 사용할 때 프로세서의 처리속도와 입출력 속도간의 차이가 너무 크기 때문에 입/출력 작업이 완료 될 때까지 프로세서는 대기해야 합니다. 이후에 하나의 프로그램 처리를 마무리해야 다음 프로그램을 수행할 수 있었습니다.

이것은 프로세서의 자원을 낭비하는 결과를 가져오게 되었고, 따라서 프로세서가 입/출력 작업의 응답을 대기할 동안 다른 프로그램(프로세스)를 수행시킬 수 있도록 하는 것이 멀티프로그래밍이라 합니다요즘은 모든 운영체제에서 멀티프로그래밍을 지원하기 때문에 잘 쓰이지 않는 용어입니.


정리하면, 멀티프로그래밍은 프로세서의 자원낭비를 최소화 하기 위해 낭비되는 시간을 다른 프로그램(프로세스) 수행에 쓰게 하여, 하나의 프로세서에서 여러 프로그램(프로세스)을 교대로 수행할 수 있게 하는 것입니다.


3) 멀티태스킹(Multi-tasking) - (추가)

- 여러 가지 의미가 존재하지만 간단히 말해 task는 어떤 정해진 일을 수행하기 위한 명령어 집합이라고 볼 수 있습니다.

이러한 의미가 앞서 말한 프로그램이 될 수 있겠지만 조금 차이점이 존재합니다. 하나의 프로그램은 프로그램 내에 정의에 따라 하나 또는 그 이상의 프로세스가 될 수 있습니다. 하지만 프로그램이 동작하기 위해서는 프로그램 실행으로 메모리에 로드된 프로세스 외에도 이미 수행되고 있는 운영체제 상의 많은 프로세스와 상호작용이 필요하게 됩니다.

따라서 하나의 task라는 개념은 프로세스의 개념보다 조금 확장된 개념이라고 생각하면 좋습니다. 이러한 task가 하나의 프로세서상에서 운영체제의 스케줄링에 따라 조금씩 번갈아 가면서 수행되는 것이 Multi-Tasking(멀티태스킹)입니다. 멀티프로그래밍과 다른 점은 프로그램과 task의 구분으로도 그 의미가 다르겠지만 멀티프로그래밍이 낭비되는 자원을 최소화하기 위해 교대로 실행하였다면, 멀티태스킹은 좀 더 확장하여 정해진 시간 동안 교대로 task를 수행하는 것입니다.

 

4) 멀티쓰레딩(Multi-threading)

- 쓰레드는 프로세스내에서 생성되는 하나의 실행 주체입니다. 한 프로세스 내에서 생성되는 것으로 여러개가 동시에 생성이 가능합니다. 또한 생성된 여러 쓰레드는 하나의 공유메모리를 가지게 됩니다. 그렇기 때문에 서로간의 정보를 주고 받는데 최소한의 오버헤드로써 제한이 많이 없는 편입니다.

예를 들어, 네트워킹을 지원하는 프로그램이 있다고 가정하겠습니다. 한 프로그램 내에 사용자가 접속할 때마다 사용자 각각을 처리할 수 있는 처리모듈이 생성되어야 하는데, 이것이 쓰레드라고 볼 수 있습니다.

 

Multi-Threading(멀티쓰레딩)이 Multi-tasking(멀티태스킹)과 차이점은, 

Multi-Threading은 앞서 말한대로 서로간의 자원공유가 가능하며, 프로그래밍을 통해 구현이 된다는 점입니다

하지만 Multi-tasking은 운영체제에서 지원해주는 것으로 서로간의 자원이 공유되지 못하기 때문에 자원전달을 위해서 별도의 IPC(Inter-Process Communication)을 구현해야 하며, 멀티쓰레딩에 비해 운영체제에게 부담을 줄 수 있습니다.

하지만 멀티태스킹은 서로 간의 독립된 메모리를 가지고 있기 때문에 독립된 수행이 가능하므로 멀티쓰레딩과 멀티태스킹은 그 용도에 맞게 적절히 사용되어야 합니다.

(과거 학부생 때, 운영체제 과목에서 공부했던 사진입니다. 저에게는 이해하는데 많은 도움이 되었던 그림이므로 참조하게 되었습니다.)

 (Multi-threading - 종류)

1-좌측상단) 1-프로세스, 1-쓰레드 = 가장 안좋다.(비효율적)

2-우측상단) 1-프로세스, n-쓰레드 = 장점 : 공유할수 있고, 문맥이 가볍다. <-> 단점 : 프로세스가 죽으면 전체가 종료된다.

3-좌측하단) n-프로세스, 1-쓰레드(프로세스 당) = 장점 : 하나가 죽어도 다른 것은 살아있다. <-> 단점 : 공유되지 못함

4-우측하단) n-프로세스, n-쓰레드(프로세스 당) = 가장 진보된 형태!

==> 2번과 3번은 반대되는 개념으로써, 어떤 차이점과 장/단점을 가지고 있는 지 잘 이해하고 있어야 합니다.!!

[참고 사진입니다.]

- 각 쓰레드들은 각각의 스택영역을 가지며, 그 외 프로세스의 자원을 공유하게 됩니다.

'OS' 카테고리의 다른 글

Little endian vs Big endian  (0) 2016.04.19
CISC vs RISC  (1) 2016.04.19
참조 지역성의 원리란?(Locality of reference)  (0) 2016.04.19
Round-Robin(RR)이란? , CPU-Scheduling들  (4) 2016.04.18
PCB(Process Control Block)란?  (0) 2016.04.18

WRITTEN BY
SiriusJ

,