2 minute read

Mention : 프로세스안의 스레드들🧵 (is or are), 현재는 멀티의 시대(Era)이다.

프로그램(Program)

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

프로세스(Process)

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

CPU(cental processing unit)

  • 명령어를 실행하는 연산 잔치

메인 메모리(main memory)

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

IO(input/output)

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

단일 프로세스 시스템

  • 초창기
  • 한 번에 하나의 프로그램만 실행됨
  • CPU 사용률이 좋지 않다.
    • 실행 중에 있는 프로세스가 IO 작업을 하는 동안에는 cpu가 놀고있음
  • 해결책
    • 여러 개의 프로그램메모리에 올려놓고 동시에 실행시키자 → 멀티프로그랭
    • IO 작업이 발생하면 다른 프로세스가 CPU에서 실행됨

멀티프로그래밍(multiprogramming)

  • CPU 사용률을 극대화 시키기 위함
  • 단점
    • CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기
  • 해결책
    • 프로세스는 한번 CPU를 사용할 때 아주 짧은 시간(=quantum)만 CPU에서 실행되도록 하자 → 멀티태스킹

멀티태스킹(multitasking)

  • CPU 타임을 아주 짧게 쪼갬
  • 프로세스의 응답 시간을 최소화 시키는데 목적
    • 동시에 여러프로그램을 실행시키는 것처럼 사용자는 느낌
  • 단점
    • 하나의 프로세스가 동시에 여러 작업을 수행하지는 못함
    • 프로세스의 컨텍스트 스위칭은 무거운 작업
    • 프로세스끼리 데이터 공유가 까다로움 (프로세스 → 독립적인 메모리 공간)
    • 듀얼 코어가 등장했는데 잘 쓰고 싶었음 (2000년대 초중반) → 쓰레드

스레드(thread)

  • 프로세스는 한 개 이상의 스레드를 가질 수 있다.
  • CPU에서 실행되는 단위(unit of execution)
    • 프로세스는 기본적으로 하나의 스레드를 가짐
  • 같은 프로세스의 스레드들끼리 컨텍스트 스위칭은 가볍다.
  • 스레드들은 자신들이 속한 프로세스의 메모리 영역을 공유
    • 컨텍스트 스위칭이 가볍다
    • 데이터 공유가 쉽다.
    • 듀얼코어의 쓰레드실행은 병렬적 → 멀티스레딩

멀티스레딩(multithreading)

  • 하나의 프로세스가 동시에 여러 작업을 실행하는데 목적
    • 여러작업 → 쓰레드
  • 확장된 멀티태스킹 개념 (기존엔 하나의 프로세스 - 싱글코어)
    • 여러 프로세스여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것

멀티프로세싱(multiprocessing)

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

https://scaler.com/topics/images/what-is-thread-in-os.webp

비교

  • ex) 싱글 코어 CPU에 싱글-스레드 프로세스 두개
    • 멀티태스킹 O, 멀티 스레딩 X, 멀티 프로세싱 X
  • ex) 싱글 코어 CPU에 듀얼-스레드 프로세스 한개
    • 멀티태스킹 O, 멀티 스레딩 O, 멀티 프로세싱 X
  • ex) 듀얼 코어 CPU에 싱글-스레드 프로세스 두개
    • 멀티태스킹 X, 멀티 스레딩 X, 멀티 프로세싱 O
  • ex) 듀얼 코어 CPU에 듀얼-스레드 프로세스 한개
    • 멀티태스킹 X, 멀티 스레딩 O, 멀티 프로세싱 O
    • 듀얼 코어 임으로 스레드가 병렬적으로 실행(경합X) 따라서 멀티 태스킹이 아니다.
  • ex) 듀얼 코어 CPU에 듀얼 -스레드 프로세스 두개
    • 멀티태스킹 O, 멀티 스레딩 O, 멀티 프로세싱 O

Summary.

  • 프로세스는 운영체제로부터 독립된 메모리공간을 할당 받은 작업의 단위입니다.
  • 스레드는 프로세스가 할당 받은 메모리를 이용하는 실행 되는 단위입니다.
  • 둘이 가장 큰 차이는 프로세스는 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당 받는데, 운영체제는 프로세스마다 각각 독립된 메모리 영역을 Code/Data/Stack/Heap의 형식으로 할당해줍니다.
  • 그러나 스레드는 프로세스가 할당 받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 따로 할당 받고, 나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공유합니다. **따라서 각각의 스레드는 별도의 스택을 가지고 있지만 **힙 메모리서로 읽고 쓸 수 있게 됩니다(데이터 공유).
  • 만약, 한 프로세스가 실행하다가 오류가 발생하여 프로세스가 강제 종료 된다면 다른 프로세스에는 영향을 주지 않지만 스레드는 오류로 종료가 된다면 메모리 영역을 공유하고 있는 스레드 모두 강제로 종료된다는 중요한 차이점이 존재합니다.

Reference 📚

https://www.youtube.com/watch?v=QmtYKZC0lMU

Tags: , ,

Categories:

Updated:

Leave a comment