본문 바로가기
개발자 준비/운영체제

멀티프로그래밍 멀티태스킹 멀티스레딩 멀티프로세싱 (Feat. 스레드)

by osul_world 2021. 11. 24.
728x90

멀티프로그래밍 멀티태스킹 멀티스레딩 멀티프로세싱 (Feat. 스레드)


 

사전지식


프로세서

CPU와 같은 의미로 쓰이게 되었으며 논리연산을 하는 데이터 프로세싱(처리) 시스템을 의미한다.

논리적인 처리를 하는 컴퓨터의 수뇌부 역할을 하는 장치를 CPU라고 한다.

 

코어

코어는 프로세서 안에 존재하는 부품으로 프로세서의 업무를 분담해 수행하는 역할을 한다.

코어의 수에 따라서 싱글코어, 듀얼코어,트리플 코어 라고 부른다.

싱글코어 2.4Ghz VS 듀얼코어1.4Ghz

후자가 빠르다. 한사람이 2.4속도로 일하는 것 보다 두사람이 1.4속도로 일하는게 훨씬 빠르기 때문

 

 

메모리

프로세스가 CPU에서 실행되기 위해 대기하는 곳

프로세스의 명령어와 데이터들이 저장되어 있다.

 

 

프로세스

메모리에 적재되어 프로세서에 의하여 실행되고있는 프로그램을 의미한다.

프로그램이란?

실행에 필요한 명령어의 집합체

 

 

쓰레드

프로세스 내에서 실행되는 흐름의 단위를 의미한다.

 

IO(input/output)

데이터의 입출력을 의미한다. (주거나 받는 것을 의미)

  • 파일을 읽고 쓰거나
  • 네트워크의 어딘가와 데이터를 주고받거나
  • 모니터, 프린터, 마우스, 키보드 등의 입출력 장치와 데이터를 주거나 받거나

다양한 영역에서 I/O를 포괄하는 개념

 

 

태초의 시스템!


태초에는 단일 시스템만 존재했다.

프로그램을 하나 실행하면 그 프로그램이 종료되어야만 다음 프로그램을 실행할수 있었다.

''이런 방식엔 큰 단점이 있습니다. CPU 사용률이 안 좋다는 점인데요, 프로그램이라는 것이 CPU를 쓰기도 하고 IO 작업을 하기도 하는데, io 작업을 하는 동안에는 cpu가 아무 일도 하지 않고 놀고 있는 겁니다. 아래 그림에서처럼 프로세스 P1이 CPU 작업을 하다가 io 작업을 하러 가게 되면, 그동안 cpu는 아무것도 하지 않고 놀고 있는 거죠.''

 

동시에 여러 프로그램을 실행시킬순 없을까?

 

멀티 프로그래밍!


그래서 메모리에 여러 프로그램을 올려놓고, 하나의 CPU에서 번갈아가며 여러 프로세스가 동시에 실행되도록했다.

''cpu가 하나기 때문에 순수한 의미의 동시 실행은 아니고요, 하나의 프로그램을 실행하다가 io 작업을 만나게 되면 다음 프로그램을 실행하고, 그 프로그램이 io 작업을 만나면 그다음 프로그램이 실행하거나 아니면 원래 실행하던 프로그램을 이어서 실행하는 것이죠. ''

 

 

그런데 멀티 프로그래밍 시스템에도 문제가있다.

만약 IO 작업은 적게 하고 CPU를 오래 쓰는 프로세스가 있다면, 다음에 대기 중인 프로세스들은 이 프로세스의 CPU 작업이 끝나고 IO 작업을 시작할 때까지 무작정 기다릴 수밖에 없다는 점이다.

 

CPU에서 짧게 실행하고 다음 프로세스에게 넘기게 의무화 하면 어떨까?

 

 

멀티테스킹(시분할)!


하나의 프로세스가 한 번에 사용할 수 있는 cpu 시간의 최대치를 아주 짧게 정해놓고, 그 시간을 다 썼으면 다음 프로세스가 cpu를 사용하도록해 멀티 프로그래밍의 문제를 해결했다.

아주 짧게 쪼개진 cpu time을 퀀텀(quantum) 혹은 타임 슬라이스(time slice)라고 하는데 밀리세컨드 단위로 아주 짧다.

 

 

멀티프로그래밍과 유사해 보이지만 각 프로세스에게 짧은 CPU사용시간을 부여하고 그 시간이 끝나면 다음 프로세스에게 CPU를 양보해야한다.

''아주 짧은 cpu 타임으로 프로세스들을 번갈아 실행하기 때문에 프로그램의 응답성이 향상되는 효과를 가져옵니다. 그래서, 멀티태스킹 시스템이 등장하면서, 음악을 틀어놓고 문서 작업을 하는 것과 같은 일들이 가능해졌죠.''

 

 

하지만 이러한 멀티 테스킹에도 아쉬움이 남는다.

  • 하나의 프로세스가 동시에 여러 작업을 수행하지는 못한다.

''음악 앱(프로세스)을 통해 새로 나온 신곡을 들으면서 가사도 같이 따라 보고 싶을 수 있습니다. 하지만 현재로선 한 프로그램 안에서 여러 작업들을 동시에 하려면 프로세스 여러 개를 두는 방식밖에 없습니다.''

 

 

  • 그래서 프로세스를 여러개 띄우자니 프로세스간 Context Switching 비용이 비싸다.

"컨텍스트 스위칭이란 CPU에서 실행되던 하나의 프로세스가 다른 프로세스로 교체되는 것을 의미합니다. 앞서 봤던 멀티프로그래밍이나 멀티태스킹 모두에서 컨텍스트 스위칭을 볼 수 있는데요, 문제는 서로 다른 프로세스의 컨텍스트 스위칭은 CPU를 잡아먹는 무거운 작업이라는 점입니다.

 

 

  • 프로세스간 데이터를 주고받는게 어렵다.

''프로세스의 특성상, 서로 다른 프로세스는 서로 다른 메모리 영역을 가지기 때문에, 프로세스 간에 데이터를 주고받아야 할 때 상당히 까다롭고 번거로운 작업들을 해줘야 한다.''

 

 

그래서 CPU내에 코어수를 늘려서 처리능력을 향상시키는 하드웨어 적인 해결법으로 멀티코어가 등장했지만 소프트웨어 적으로도 해결할 필요가 있었다.

 

 

쓰래드의 등장


하나의 프로세스는 여러 개의 스레드를 가질 수 있는데, 스레드의 핵심은 같은 프로세스에 속한 스레드들은 모두 같은 메모리 영역을 공유한다는 점이다.

스레드 등장 이후 스레드 하나하나가 CPU의 실행 단위(unit of execution)가 된다.

이제는 스레드 단위로 CPU에서 실행된다.

그래서 이제는 프로세스 하나가 만들어지면 그 안에는 (기본적으로) 최소한 하나의 스레드를 가지게 된다

 

 

CPU의 실행단위가 스레드라는 것은 매우 중요하다.

프로세스끼리 데이터 공유가 어려웠던 문제도 스레드의 등장으로 하나의 프로세스에 여러 개의 스레드가 존재하도록 하면서 자연스럽게 해결이 됐습니다.

왜냐하면 같은 프로세스에 소속된 스레드들은 그 프로세스의 메모리 영역을 공유하기 때문에, 스레드들이 같은 메모리 영역에 쓰고 읽는 게 쉬워졌기 때문이죠.

 

 

컨텍스트 스위칭 비용이 비쌌던 문제도, 같은 프로세스에 속한 스레드끼리 스위칭을 하게 되면 그 비용을 줄일 수 있게 됐습니다.

 

 

스레드가 3개 존재하는 프로세스의 메모리 공간

  • 스레드는 힙과 같은 소속된 프로세스의 메모리 영역을 공유한다.

독립적으로 가지는 메모리 영역도 있다.

  • STACK , COUNTER 등등

 

 

이런 특징으로 스레드는 프로세스끼리 데이터 공유가 어려웠던 문제 그리고 컨텍스트 스위칭 비용이 비쌌던 문제도 해결할수있다.

 

 

멀티 스레딩


하나의 프로세스에서 여러 개의 스레드를 운영하는 방식을 멀티 스레딩 이라고한다.

''스레드가 등장하면서 멀티태스킹의 개념도 확대됩니다. 기존에는 여러 프로세스가 아주 짧은 cpu time을 나눠가지는 개념이었다면, 이제는 여러 프로세스와 여러 스레드가 아주 짧은 cpu time을 나눠 갖는 것으로 그 의미가 확장됐죠.''

스레드가 하나의 CPU 실행단위가 되었기 때문

 

 

멀티 프로세싱


멀티프로세싱은 두 개 이상의 프로세서나 코어를 쓰는 시스템을 의미한다.

 

 

정리

멀티프로그래밍

여러개의 프로그램을 메모리에 올려두고 번갈아가면서 실행하는것

실행하던 프로세스 I/O 작업때 다음 프로세스를 시행함

I/O작업이 없는 프로세스의 경우 이 프로세스가 끝날때까지 다른 프로세스는 대기상태

 

 

멀티태스킹

멀티 프로그래밍에 단점을 보완, 프로세스가 CPU에서 실행되는 시간을 짧게 정해두고 그 시간이 끝나면 다음 프로세스에게 CPU양보하는 식으로 실행

여러 프로그램이 빠르게 번갈아가며 실행되기 때문에 응답률 향상

 

 

멀티스레딩

하나의 프로세스에서도 여러 작업을 동시에 수행하기위해 여러개의 스레드를 운영

스레드 등장 이후 스레드는 CPU의 실행단위가 되었다.

  • 때문에 프로세스는 기본 한개의 스레드를 가진다.

 

 

멀티프로세싱

프로세서나 코어를 여러개쓰는 시스템

 

 

Reference


스레드 설명! 멀티프로그래밍 멀티태스킹 멀티스.. : 네이버블로그 (naver.com)

(9) 프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍, 이 모든 것을 한 방에 깔끔하게 설명합니다!! 콘텐츠 퀄리티 만족하실 겁니다! - YouTube

 

 

 

728x90