Computer Science/운영체제

멀티프로세싱, 멀티프로그래밍,멀티태스킹,멀티스레딩

양찬우 2021. 5. 29. 01:38
728x90

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

멀티프로그래밍 시스템의 메모리 레이아웃

  • 여러 프로그램을 메모리에 동시에 올려서 수행하는 것 == 메모리에 다수의 프로세스가 동시에 올라가(keep)있는 것 
  • 단일 프로세서 상에서 여러 개의 프로그램이 동시에 실행되는 것
  • 프로세서가 입출력 작업의 종료를 대기할 동안 하나의 프로세서에서 다른 프로그램을 수행할 수 있도록 하는 것이 멀티프로그래밍이다. (CPU 사용 효율을 높인다)
초기의 컴퓨터에서는 하나의 프로그램이 메모리에 올라가면 하나의 프로그램만 CPU가 처리를 진행할 수 있었다. 이 과정에서 프로세서의 처리 속도와 입출력 속도 간의 차이로 인해, 입출력이 완료될 때까지 프로세서는 idle한 상태가 된다. 따라서 이는 프로세서의 자원 낭비로 이루어진다.
  • 정의 : 하나의 프로세서에 대하여 다수의 프로세스를 메모리에 적재해 작업을 처리하는 것
  • 특정 프로세서가 프로세스 A를 처리할 때, 다른 프로세스 B, C 등을 처리하게 만드는 것을 말한다.
  • 멀티 태스킹을 구현하는 스케쥴링의 한 방식
  • 멀티 프로그래밍을 통해 프로세서를 효율적으로 사용할 수 있다.

 

2. 멀티태스킹 (Multi-tasking)

A logical extension of multiprogramming 
- in which CPU switches jobs so frequently that 
- users can interact with each job while it is running 
(Operating System Concepts, 10th Ed)

Task란 운영체제에서 처리하는 작업의 단위 또는 정해진 일을 수행하기 위한 명령어 집합을 뜻하는데 (process 보다 확장된 개념), 멀티 태스킹은 task를 OS의 스케쥴링에 의해 task를 번갈아가며 수행하는 것을 의미한다.
여러개의 task를 자주 번갈아가며 수행하다보니 사용자는 동시에 여러 task가 수행되고 있다고 느끼게 된다.

  • 정의 : 다수의 작업(Task)을 운영체제 스케줄링에 의해 번갈아가면서 처리하는 것
  • Task란 작업의 단위를 말하며, 프로세스, 스레드가 모두 작업의 단위가 될 수 있다.
  • 멀티 태스킹은 시분할 시스템에서 사용되며, 사용자에게 다수의 작업이 동시에 처리되는 것처럼 느끼게 할 수 있다.
멀티프로그래밍 vs 멀티태스킹
앞에서 말한 멀티 프로그래밍은 프로세서의 자원낭비를 막기 위함이고,
멀티태스킹은 정해진 시간동안 각각의 task를 번갈아가며 수행하는 것을 의미한다.

3.멀티프로세싱 (Multi-processing)

Symmetric multiprocessing(SMP): 하나의 메모리에 여러 프로세서 칩  /  Multi-core design: 같은 칩에 여러 코어

멀티 프로세싱은 다수의 프로세서가 서로 협력적으로 일을 처리하는 것을 의미한다.
컴퓨터는 1대인데 프로세서(CPU)는 2개 이상이다. 보통, 멀티코어시스템(multi-core system)을 포함한다.

  • 정의 : 다수의 프로세서가 다수의 프로세스를 협력적으로 동시에 처리하는 것
  • 프로세서(Processor)는 CPU라고 생각하면 되며, 프로세스(Process)와 다른 개념이다.
  • 각 프로세서는 다수의 프로세스를 처리하며, 각 프로세스는 다수의 프로세서에 의해 처리된다.
  • 각 프로세서가 자원을 공유하면서 프로세스를 처리하기 때문에, 하나의 프로세서가 고장나도 작업은 정지되지 않는다.

 

4. 멀티 스레딩 (Multi-threading)

멀티스레딩을 통해 처리시간을 줄일 수 있다.

멀티 스레딩은 하나의 프로세스를 여러 개의 실행 단위이며, 여러 개의 스레드끼리 자원을 공유하는 것을 뜻한다.

 

멀티 프로세싱 vs 멀티 스레딩

프로세스: 실행될 때 OS로부터 자원을 할당받아 실행되는 프로그램
스레드: 한 프로세스 내에서 동작되는 여러 실행의 흐름

멀티프로세싱은 fork를 통해 프로세스를 다수개로 늘려 여러 개의 프로그램들을 병렬로 처리하며, 멀티스레딩은 하나의 프로그램 안에서 병렬 처리를 한다.
멀티 스레딩은 멀티 프로세싱보다 훨씬 적은 자원을 소모하기 때문에 더 효율적이나 안정성 측면에서는 멀티 프로세싱이 안정적이다.

 

멀티 스레딩 vs 멀티 태스킹

멀티 스레딩은 스레드들끼리의 자원 공유가 가능하며, 프로그래밍을 통해 구현 가능하나, 멀티 태스킹은 OS에서 지원하는 것으로 독립된 메모리를 가지며, 서로 간의 자원 공유가 이루어지지 않는다.
자원 공유를 위해 별도의 IPC (Inter-Process Communication)을 구현해야 하여, 멀테 스레딩에 비해 운영체제에게 부담을 줄 수 있다.

 

 

 

5. 멀티태스킹과 멀티스레드 

멀티태스킹: 하나의 운영체제 안에서 여러 프로세스가 실행되는 것 (동시에 실행되지 않는다!)

멀티스레드: 하나의 프로세스가 여러 작업을 여러 스레드를 사용하여 동시에 처리하는 것

 

멀티스레드의 장점

  1. Context-Switching할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
  2. 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어서 응답 시간이 빠르다.

멀티스레드의 단점

  1. 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
  2. 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없다.

 

 

참고문헌

Operating System Concepts, 10th Ed. feat. by Silberschatz et al.

https://donghoson.tistory.com/8

https://rebas.kr/850

728x90