Development/OS

프로그램, 프로세스, 스레드, 멀티 태스킹, 멀티 스레드, 멀티 프로세싱, 멀티 코어

DevKTak 2023. 2. 11. 21:36

프로그램

  • 컴퓨터의 CPU에게 시킬 명령들을 프로그래밍 언어로 적어놓은 파일 
  • 명령어들의 조합
  • 프로그램은 정적인 개념으로 저장매체(HDD, SDD)에 저장된 실행 파일을 의미한다.

 

프로세스

  • CPU(프로세서)에 의해 실행되고 있는 프로그램이다.
  • 프로세스는 최소 1개의 스레드가 존재한다.
  • OS는 Virtual Memory(제한된 공간)(1차 메모리 RAM + 2차 메모리 HDD)를 프로세스에 할당한다.
  • JVM이 실행되어 컴파일러에 의해 변환된 바이트코드가 메모리 상에 올라갔을 때 "프로세스가 실행 중이다"라고 한다.
  • 프로그램이 메모리 상에 올라와 컴퓨터의 자원(메모리, CPU)을  할당받아 실행중인 것을 의미한다.

 

멀티 태스킹

  • 하나의 CPU에서 여러 응용 프로그램이 동시에 실행되는 것처럼 보이도록 하는 시스템이다.(시분할)

 

프로세스가 컨텍스트 스위칭 하는 모습

 

컨텍스트 스위칭

  • 프로세스들을 ms 단위까지 잘게 쪼개서 여러 프로세스를 번갈아가며 실행 시키는 과정을 컨텍스트 스위칭이라고 한다.
  • 컨텍스트 스위칭을 하고 프로세스가 다시 실행이 될 때 어디서부터 다시 실행하는지(PC, SP 정보), 프로세스의 상태(생성, 준비, 실행, 대기, 종료) 등을 알아야 한다. 그래서 이 정보들을 PCB라는 메모리 공간에 저장을 해두고 컨텍스트 스위칭을 할 때마다 여기서 읽어오게 된다.

 

멀티 태스킹의 한계

  1. 하나의 프로세스가 동시에 여러 작업을 수행하지 못한다.
  2. 프로세스의 컨텍스트 스위칭은 무거운 작업이다.
  3. 프로세스끼리 데이터 통신이 까다롭다. (프로세스는 독립적인 메모리 공간을 가지기 때문)
  4. 듀얼 코어 CPU가 등장했지만 잘 활용하지 못한다.

* 이러한 단점을 보완하기 위해 나온 것이 스레드라는 개념이다.

 

스레드

  • 적은 범위에서 얘기하면 스레드는 프로스세 내에서 실행되는 작업 흐름의 단위를 말한다. 더 확장되어 CPU에서 실행되는 단위이다.
  • 프로세스는 두개 이상의 스레드를 가질 수 있기 때문에 병렬적으로 작업을 처리할 수 있다.
  • 같은 프로세스에 있는 스레드들끼리 컨텍스트 스위칭이 가볍다.
  • 메모리 영역(Code, data, Heap)을 공유하기 때문에 메모리가 효율적이고, 같은 프로세스에 있는 스레들끼리 컨텍스트 스위칭 비용이 적으며 통신 비용도 절감된다.

 

스레드의 단점

  • 스레드 중 한 스레드만 문제가 있어도, 전체 프로세스가 영향을 받는다.
    • 멀티 프로세스 환경에서는 하나의 프로세스가 죽어도 다른 프로세스에 대부분의 경우 영향을 미치지 않는다. (크롬 브라우저)
      하지만 멀티 스레드의 경우 하나의 스레드가 죽으면 전체 프로세스가 죽는 경우가 많다. (익스플로러 브라우저)
  • 동기화 이슈로 비정상적으로 동작 가능
    • 스레드의 가장 큰 단점이다. 데이터를 공유하기 때문에 두 개 이상의 스레드가 하나의 데이터에 접근하려고 할 때 우리가 기대한 동작과는 다르게 동작하는 상황이다.

 

멀티 스레드

  • 하나의 프로세스가 동시에 여러 개의 스레드를 수행할 수 있도록 해주는 것이다.
  • 프로세스는 데이터, 힙, 스택 영역을 공유하지 않지만 스레드는 스택 영역을 제외한 데이터, 힙 영역을 공유하기 때문에 메모리 부분에서도 훨씬 효율적이다.

 

멀티 쓰레드, 익스플로러 브라우저

 

멀티 프로세싱

  • 두 개 이상의 프로세서(CPU)가 하나 이상의 작업(Task)을 동시에 처리하는 것이다.(병렬처리)
  • 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용한다.
  • 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 작업 속도가 느려질 수는 있지만 정지되는 문제는 발생하지 않는다.

 

멀티 프로세스, 크롬 브라우저

 

 

멀티 코어

 

 

이 글은 아래 영상을 보고 정리하는 글 입니다.

https://www.youtube.com/watch?v=1grtWKqTn50&t=570s

'Development > OS' 카테고리의 다른 글

스레드의 종류  (0) 2023.02.12