본문 바로가기

멀티 프로그래밍 & 멀티 프로세싱 & 멀티 스레딩

멀티 프로그래밍 (Multiprogramming)

  • 프로세스를 전환하며 여러 프로그램을 실행하는 것.
  • CPU는 항상 하나의 작업을 수행하여, CPU이용률을 높인다.즉, CPU를 바쁘게 만든다.
  • OS는 단순히, 다른 프로세스로 전환하여 실행한다.

멀티 태스킹 (Multitasking)

  • 멀티 프로그래밍의 논리적 확장.
  • 하나의 OS 안에서 여러개의 프로세스가 CPU 등을 나누어 사용하는 것을 의미한다.
  • 즉, 하나의 CPU는 빠르게 여러 프로세스를 전환하며 작업한다.
  • 하나의 CPU는 하나의 작업만 수행할 수 있으므로, 스케줄링을 이용해 작업이 병렬 처리되는 듯한 환경을 제공한다.
  • 멀티태스킹의 스케줄링 방식에는 멀티 프로그래밍/시분할/실시간 시스템 등이 있다.

멀티 프로세싱 (Multiprocessing)

  • 이 용어의 정의는 아무리 찾아봐도 명확하게 나와있지 않다. 문맥에 따라 다르게 해석되는 경우가 많다.

하드웨어 관점에서

  • 2개 이상의 CPU가 하나의 컴퓨터 시스템에 있는 것 ( = 멀티프로세서 시스템 )
  • 2개 이상의 CPU(혹은 코어)가 프로그램 하나의 두 개 이상의 서로 다른 부분을 동시 처리하는 것
  • 2개 이상의 CPU(혹은 코어)가 2개 이상의 프로세스를 병렬로 처리하는 것
  • 다양한 멀티 프로세서 시스템 구조가 존재하므로 확실하게 정의하기 어렵다.
  • 가장 일반적으로 사용되는 의미이다.

장점 : 처리량 증가,

단점 : 공유자원에 대한 경합, 확장성 좋지 않음, 전력 많이 먹음

 

위 단점들을 극복하기 위해 여러가지 멀티 프로세서 시스템이 등장했다. 이 부분은 나중에 다룬다.

 

운영체제 관점에서

  • 여러개의 프로세스가 동시에 실행되는 것
  • 그러나 이미 '멀티 프로그래밍' 이라는 용어가 있으므로 하드웨어 관점에서의 의미로 더 많이 쓰인다.
  • 쓰이지 않는 의미라고 생각해도 무방하다.

프로그램 구조적 관점에서

  • 하나의 애플리케이션을 여려개의 프로세스로 실행시킨다. 
  • 파이썬에서는 지원하지만, JVM위에서 실행되는 자바는 지원하지 않는다.
  • 멀티스레딩과 비교할 때 자주 사용되는 의미이다.

 

여기서 동시 라는 의미는 시간 상 동시에 일어난다는 의미가 아니다. 짧은 시간 안에 프로세스를 전환해서 동시에 일어나는 것처럼 보이는 것이다. 즉, 병행성(Concurrency)을 의미한다. 

 

싱글 프로세서는 동시에 여러 프로세스 실행이 가능하다.
그러나, 병렬적으로 여러 프로세스를 실행시킬 수 없다.

 

더보기

애시당초 위 용어들에 대한 설명이 매우 모호하다고 생각한다. 검색해도 Python의 멀티 프로세싱이라는 단어만 많이 나온다. 멀티프로세싱에 대한 설명에 대해 나와있는 문서는 없고 주로 블로그글이다.블로그 글은 서로 참고하는 부분이 많아서 근본적으로 어디서 참고했는지 찾기가 어렵다. 블로그 글을 믿어야 하나? 찾아보니 몇가지 나오기는 하지만, 답변들이 다 다르다. 그냥 멀티프로세싱이라는 용어는 없는 것이 아닐까? 많은 검색과 서적에서 나오는 결과에 의해 하드웨어적인 관점에서의 멀티프로세싱이 제일 일반적으로 쓰인다. 멀티 스레딩과 비교하기 위해서 사용하는 의미는 오히려 더 헷갈리게 만든다.


멀티 스레딩 (Multithreading)

  • 하나의 프로세스 안에서 여러개의 스레드가 동시에 여러 작업을 수행함

장점

  •  자원 공유 : 스레드는 프로세스 내의 메모리를 공유한다. 그래서 Context-Switching이 빠르다.
  •  스레드 간 통신비용이 적다.

단점

  •  하나의 스레드에 문제 생기면, 전체 프로세스가 영향을 받는다.
  •  메모리를 공유하기 때문에 동기화 문제를 처리해야 한다.
  • 중단/종료를 하면 매우 치명적이다.

 

운영체제에서 CPU의 코어는 하나의 CPU처럼 생각할 수 있다. 이러한 시스템을 멀티코어 시스템 이라고 한다.

하나의 코어는 한번에 하나의 스레드만 실행시킬 수 있다.

 

싱글 코어 : 병행하게 실행되지만 병렬적으로 실행되지는 못한다.

멀티 코어 : 코어가 여러개이므로 병렬 실행이 가능하다.

 

대부분의 OS의 커널은 멀티스레딩으로 작동된다.

 

* Context-Switching (문맥 교환) : CPU를 점유하고 있는 프로세스를 다른 프로세스로 바꾸는 것. 과거 프로세스는 PCB에 저장되고 새로운 프로세스는 PCB를 복구한다. 이 시간 동안 CPU는 아무것도 하지 못한다.

운영체제가 복잡할 수록 문맥 교환 시간이 증가한다. 그래서 이 시간을 줄이기 위해 CPU가 다중 레지스터를 가지게 만들거나, 하나의 Instruction을 이용해 한번에 많은 작업을 실행한다.


비교

 

멀티프로세싱 VS 멀티 스레딩 비교가 아니라 여러개의 프로세스와  프로세스 하나에 속한 여러개의 스레드를 비교하는 것이다. 

  여러개의 프로세스 멀티 스레딩
( 한 프로세스 안 여러개의 스레드 )
메모리 공유하지 않는다. 공유한다.
Context Switching 스레드 간 교환에 비해 느리다. 프로세스 간 교환에 비해 빠르다.
통신  오버헤드가 크다. 복잡 오버헤드가 작다. 간단
영향 서로 주고 받지 않음 서로 주고 받음

 

 

참고

Operating System Concepts, 10th Edition (Abraham Silberschatz 외 2명 )
https://donghoson.tistory.com/15
https://studyandwrite.tistory.com/7?category=1004636
https://www.quora.com/What-is-the-difference-beween-parallel-processing-and-multitasking

http://word.tta.or.kr/dictionary/dictionaryView.do?subject=%EB%B3%91%EB%A0%AC%20%EC%B2%98%EB%A6%AC

http://www.ktword.co.kr/word/abbr_view.php?nav=&m_temp1=1856&id=1157
https://www.britannica.com/technology/multiprocessing
http://www.terms.co.kr/parallelprocessing.htm
https://www.guru99.com/difference-between-multiprocessing-and-multithreading.html
https://www.baeldung.com/cs/multiprocessing-multithreading
https://en.wikipedia.org/wiki/Multiprocessing
http://www.tcpschool.com/java/java_thread_multi
https://www.ibm.com/docs/ko/i/7.3?topic=threads-ending-deleting

'Operating System' 카테고리의 다른 글

CPU 스케줄링 - 싱글코어  (0) 2022.06.29
프로세스와 스레드  (0) 2022.06.26
운영체제(Operating System) 의 정의  (0) 2022.06.23