유튜버 쉬운코드 님의 운영체제 강의를 정리한 내용


프로세스/스레드

기초용어


프로그램 (program)

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

프로세스 (process)

  • 컴퓨터에서 실행 중인 프로그램
  • 각각의 프로세스는 독립된 메모리 공간을 할당 받음
  • 명령어들과 데이터를 가짐

CPU (Central Processing Unit)

  • 명령어를 실행하는 연산 장치
  • 프로세스의 명령어를 해석하고 실행하는 장치

메인 메모리 (Main Memory)

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

IO (Input / Output)

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



단일 프로세스


단일 프로세스 시스템

  • 한 번에 하나의 프로그램만 실행되는 시스템
    • 다른 프로그램을 실행하려면 먼저 실행 중인 프로그램을 종료시키고 그 다음 프로그램을 실행해야함
    • 아주 초창기의 시스템 모델

  • 단점 : CPU 사용률이 좋지 ❌
    • 어떤 프로그램 P1은 CPU을 사용하기도 하고 IO 작업을 하기도 함
    • P1이 IO 작업을 하는 동안 CPU는 그냥 놀고있음
  • 이게 단일 프로세스 시스템의 단점
    • 실행 중에 있는 프로세스가 IO 작업을 하는 동안 CPU가 아무것도 안하고 노는 것

  • 해결책 : 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시키자!
    • IO 작업이 발생하면 다른 프로세스가 CPU에서 실행됨

멀티 프로그래밍 (Multi Programming)

  • 여러 개의 프로그램이 동시에 실행되는 것
    • CPU 사용률을 극대화 시키는데 목적
  • 단점 : CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기

  • 해결책 : 프로세스는 한 번 CPU를 사용할 때 아주 짧은 시간(=quantum)만 CPU에서 실행되도록 하자 !!



멀티태스킹

멀티태스킹 (multitasking)

  • 멀티 프로그래밍과 유사하지만, CPU 타임을 아주 짧게 쪼개서, 그 CPU 타임 안에서 프로세스들이 번갈아 CPU를 사용할 수 있게 만들었다는 점에서 차이가 있음
    • 아주 짧은 시간(=quantum)은 ms 단위까지 time slot이 아주아주 짧게 구분됨
    • time slot 시간 안에서만 각 프로세스들이 CPU를 최대한 사용할 수 있게 됨
  • 멀티태스킹은 프로세스의 응답 시간을 최소화 시키는데 목적
    • 일반 사용자가 느끼기에는 마치 여러 프로그램이 동시에 실행되는 것처럼 느끼게 함

멀티태스킹의 아쉬움

  • 하나의 프로세스가 동시에 여러 작업을 수행하지는 ❌
    • 여러 프로세스를 만들어서 실행시킬 수 있겠지만, 프로세스를 여러 개 만들어서 실행시키기에는 컨택스트 스위칭 같은 단점이 있음
  • 프로세스의 컨택스트 스위칭은 무거운 작업
    • 컨택스트 스위칭은 CPU에서 실행되기 위해서 어느 한 프로세스에서 다른 프로세스로 교체되는 것을 의미
  • 프로세스끼리 데이터 공유가 까다로움
    • 프로세스는 독립적인 메모리 공간을 가지기 때문
  • 듀얼 코어가 등장했는데, 잘 쓰기 어려움

→ 이런 멀티태스킹 아쉬움 문제의 해결책이 바로 스레드(Thread)



스레드

스레드(Thread)

  • 프로세스는 한 개 이상의 스레드를 가질 수 있음
  • 스레드는 CPU에서 실행되는 단위이다. (unit of execution)
  • 같은 프로세스의 스레드들끼리 컨택스트 스위칭은 가볍다.
  • 스레드들은 자신들이 속한 프로세스의 메모리 영역을 공유함

지금 이야기 하는 것은 OS Level에서의 스레드
User Level에서의 스레드도 있음


오늘날의 프로세스는 기본적으로 최소 1개의 스레드를 가짐
스레드가 CPU/코어에서의 실행되는 기본 단위이기 때문


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

  • 지금 보이는 메모리 구조가 1개의 프로세스가 할당받은 메모리 영역
  • 같은 프로세스에 속한 스레드들은 그 프로세스의 메모리 영역을 공유
    • Heap 영역은 공유 🟢
    • 자신만의 고유한 영역인 Stack은 공유 ❌
    • 각각의 스택을 가리키는 stack pointer, PC는 공유 ❌
    • PC (Program Counter)는 다음번에 실행되어야 할 명령어가 있는 메모리 주소를 가리킴

ex) CPU 코어 1개의 경우

  • 기존의 멀티태스킹 시스템처럼 쪼갠 시간만큼 조금씩 실행

ex) CPU 멀티 코어의 경우

  • 병렬적으로 스레드가 실행되는 진정한 의미의 동시성



멀티스레딩

멀티스레딩 (Multi Threading)

  • 하나의 프로세스가 동시에 여러 작업을 실행하는데 목적
    • 여러 작업은 스레드들을 통해서 동작되는 것을 의미
  • 확장된 멀티태스킹의 개념
    • 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠갖는 것

멀티프로세싱 (Multi Processing)

  • 두 개 이상의 프로세스나 코어를 활용하는 시스템



종합 예제


ex) 싱글코어 CPU에 싱글-스레드 프로세스가 2개


ex) 싱글코어 CPU에 듀얼-스레드 프로세스 1개

  • CPU 코어 1개를 가지고 경합하기 때문에 멀티태스킹 🟢
  • 듀얼-스레드니까 멀티스레딩 🟢
  • CPU 1개니까 멀티프로세싱 ❌

ex) 듀얼코어 CPU에 싱글-스레드 프로세스 2개

  • 코어 2개라서 헷갈리면 안됨. CPU 코어 1개를 가지고 경합하는 것이 없기 때문에 멀티태스킹 ❌
  • 싱글-스레드니까 멀티스레딩 ❌
  • 코어가 2개니까 멀티프로세싱 🟢

ex) 듀얼코어 CPU에 듀얼-스레드 프로세스 1개

  • 각 코어별로 경합하는 것이 아니니까 역시 멀티태스킹 ❌
  • 하나의 프로세스에 스레드가 2개니까 멀티스레딩 🟢
  • 코어가 2개니까 멀티프로세싱 🟢

ex) 듀얼코어 CPU에 듀얼-스레드 프로세스 2개

  • 각 코어마다 경합하는 것이 있으니까 멀티태스킹 🟢
  • 듀얼-스레드니까 멀티스레딩 🟢
  • 코어가 2개 + 프로세스 2개니까 멀티프로세싱 🟢

  • 각 코어마다 경합하는 것이 있으니까 멀티태스킹 🟢
  • 듀얼-스레드니까 멀티스레딩 🟢
  • 코어가 2개 + 프로세스 2개니까 멀티프로세싱 🟢