본문 바로가기

ComputerScience/OS

[OS] 프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍

사전 배경 지식 정리

프로그램(Program)

컴퓨터가 실행할 수 있는 명령어들의 집합이다.

 

프로세스(Process)

컴퓨터에서 실행 중인 프로그램이다.

각각의 프로세스는 독립된 메모리 공간을 할당받는다.

프로세스는 명령어들과 데이터를 가진다.

 

CPU(Central processing unit)

명령어를 실행하는 연산 장치이다.

 

메인 메모리

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

 

IO(input/output)

파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고받는 것

입출력 장치(e.g. 키보드, 마우스)와 데이터를 주거나 받는 것 

단일 프로세스 시스템

초창기 시스템은 단일 프로세스 시스템이었다.

단일 프로세스 시스템은 한 번에 하나의 프로그램만 실행할 수 있다.

따라서 다른 프로그램을 실행시키려면 현재 실행되고 있는 프로그램을 종료해야만 했다.

이는 CPU 사용률이 좋지 않았다.

왜냐하면 하나의 프로그램이 I/O 작업을 수행하고 있다면, CPU는 아무것도 하지 않고 이 프로그램을 기다리는 상태에 빠지기 때문이다.

 

따라서 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시키는 방법이 고안되었다.

이는 I/O 작업이 발생하면 다른 프로세스가 CPU에서 실행된다.

이러한 종류의 시스템을 멀티프로그래밍(MultiProgramming)이라고 한다.

멀티프로그래밍(MultiProgramming)

CPU 사용률을 극대화시키는데 목적을 두며, 하나의 프로그램이 I/O 작업에 들어가면 다른 프로그램이 CPU 작업이 실행된다.

하지만 어느 한 프로세스의 CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기해야 하는 문제가 생긴다.

 

따라서 프로세스가 한 번 CPU를 사용할 때 아주 짧은 시간(=quantum)만 CPU에서 실행되도록 하는 방법인 멀티태스킹(MultiTasking)이 등장한다.

멀티태스킹(MultiTasking)

프로세스의 응답 시간을 최소화시키는데 목적이다.

여러 프로그램이 매우 짧게 CPU를 사용하며, CPU를 점유하고 잃고를 반복한다.

이는 사용자에게 여러 프로세스가 실제로는 교대로 실행되고 있지만, 마치 동시에 실행되고 있는 것처럼 보이게 한다.

 

단점

  1. 하나의 프로세스가 동시에 여러 작업을 수행하지는 못한다.
  2. 컨텍스트 스위칭은 무거운 작업이다. (멀티태스킹 과정에서 CPU를 점유하는 현재 프로세스가 다른 프로세스로 바뀌는 것)
  3. 프로세스끼리 데이터 공유가 까다롭다. 프로세스는 서로 공유되지 않는 독립적인 메모리 공간을 가지고 있는데, 이러한 특성은 데이터의 공유를 어렵게 한다.
  4. 듀얼 코어를 잘 활용하지 못한다. 듀얼 코어는 한 CPU 안에 여러 코어를 두어 전체적인 성능을 향상하고자 한다.

스레드(Thread)

프로세스는 한 개 이상의 스레드를 가질 수 있다.

옛날에는 프로세스가 CPU에서 실행되는 단위였다면, 지금은 스레드가 CPU에서 실행되는 단위이다.

프로세스는 기본적으로 하나의 스레드를 가진다.

 

장점

같은 프로세스의 스레드들끼리 컨텍스트 스위칭은 가볍다.

스레드들은 자신들이 속한 프로세스의 메모리 영역을 공유하여, 같은 프로세스 안에스레드들끼리 데이터 공유가 쉽다.

 

메모리 구조 비교(싱글 스레드 vs 멀티 스레드)

좌: 싱글스레딩, 우: 멀티스레딩, 이미지 출처:https://www.tutorialspoint.com/operating_system

메모리 계층에서 힙 영역을 공유하지만,

스택 영역은 멀티 스레딩의 경우 스레드 별로 자신만의 공간을 가진다.

멀티스레딩(MultiThreading)

하나의 프로세스가 병렬적으로 동시에 여러 작업을 실행하는데 목적을 둔다.

하나의 프로세스 안에 스레드는 하나의 CPU의 각 Core를 할당받아 동시에 실행된다.

기존 멀티태스킹 개념이 프로세스끼리 아주 짧은 시간 안에서의 스위칭이었다면, 확장된 개념은 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 CPU time을 나눠 갖는 것이다.

멀티프로세싱(MultiProcessing)

두 개 이상의 프로세서나 코어를 활용하는 시스템을 뜻한다.

멀티 프로세싱과 멀티 스레딩의 차이 도식화, 이미지 출처: https://miro.medium.com/v2/resize:fit:763/1*QiaqQ0HLT4Iy0N608A5mVA.png

위 그림을 보면 멀티프로세싱은 여러 프로세스가 각 CPU와 메모리를 가지는 반면, 멀티스레딩은 하나의 메인 프로세스 안에서 하나의 CPU를 가지고 여러 스레드가 동시에 실행된다.

예제로 살펴보는 개념들

1. 싱글코어 CPU + 싱글스레드 프로세스 2개

  • 멀티태스킹 O: 여러 프로세스가 하나의 CPU를 가지고 경합한다.
  • 멀티스레딩 X: 싱글스레드이다.
  • 멀티프로세싱 X: CPU가 싱글코어이다.

 

2. 싱글코어 CPU + 듀얼스레드 프로세스 1개

  • 멀티태스킹 O: 하나의 코어를 가지고 2개의 스레드가 경합한다.
  • 멀티스레딩 O: 2개의 스레드를 사용한다.
  • 멀티프로세싱 X: CPU가 1개다.

3. 듀얼코어 CPU + 싱글 스레드 프로세스 2개

  • 멀티태스킹 X: 2개의 코어를 각각 프로세스 2개가 점유하기 때문에 경합하지 않는다.
  • 멀티스레딩 X: 싱글 스레드를 사용한다.
  • 멀티프로세싱 O: 코어가 2개이므로 멀티프로세싱이다.

4. 듀얼코어 CPU + 듀얼 스레드 프로세스 1개  

  • 멀티태스킹 X: 각 코어별로 일대일 매핑한다.
  • 멀티스레딩 O: 여러 스레드가 있다.
  • 멀티 프로세싱 O: 코어가 여러 개이다.

5. 듀얼코어 CPU + 듀얼 스레드 프로세스 2개

  • 멀티태스킹 O: 코어 하나당 두 개의 스레드가 경합을 한다.
  • 멀티스레딩 O: 하나의 프로세스가 두 개의 스레드로 동작하고 있다.
  • 멀티프로세싱 O: CPU의 코어가 2개이다.

참고