Process & Thread 프로세스와 스레드


Process 프로세스

  • 컴퓨터에서 실행되고 있는 프로그램
  • CPU 스케줄링의 대상이 되는 작업 (task) 과 같은 의미
  • 코드, 데이터, 스택, 힙 메모리 영역 기반으로 작업

Thread 스레드

  • 프로세스내 작업의 흐름
  • 프로세스내의 스택 메모리 영역을 제외한 다른 메모리 영역을 프로세스내 다른 스레드와 공유
  • 프로세스의 실행 가능한 가장 작은 단위
  • 프로세스는 여러 스레드를 가질 수 있다.
  • 경량화된 프로세스

Program & Process

  • 프로그램
    • 보조기억 장치 (HDD/SSD) 저장 되어 있는 것
  • 프로세스
    • 프로그램이 메모리 (RAM) 에 올라가면 프로세스가 되는 인스턴스화가 일어난다.
    • 운영체제의 CPU 스케줄러에 따라 CPU 프로세스를 실행한다.
  • 프로세스의 인스턴스화
    • 프로세스가 필요한 재료들이 메모리에 올라간다.
    • 해당 프로세스에 대한 정보를 담고 있는 PCB (Process Control Block) 생성

Memory 메모리 구조

  • 운영체제는 프로세스에 적절한 메모리를 다음과 같은 구조로 할당

Stack 스택

  • 스택에는 지역 변수, 매개 변수, 함수 일시적인 데이터 저장
  • 컴파일 시에 크기가 결정되고 동적인 특징을 갖는다.

Heap 힙

  • 힙은 동적 할당할 때 사용되며 런타임 시 크기가 결정
  • 벡터 같은 동적 배열은 힙에 할당
  • 힙은 동적인 특징을 갖는다.

Data area 데이터 영역

  • 데이터 영역은 전역 변수, 정적 변수가 저장
  • 정적인 특징을 갖는 프로그램이 종료되면 사라지는 변수가 들어 있는 영역

Code area 코드 영역

  • 코드 영역은 프로그램에 내장되어 있는 소스 코드가 들어가는 영역
  • 수정 불가능한 기계어로 저장되어 있으며 정적인 특징을 갖는다.

멀티 프로세스

  • 한 어플리케이션에 대한 처리 방식의 일종
  • 부모 프로세스가 fork() 를 해서 자식 프로세스를 여러 개 만들어 처리
  • 자식 프로세스는 부모와 별개의 메모리 영역 확보
  • 각 프로세스는 독립적
  • IPC (Inter-Process Communication) 프로세스간의 통신을 사용
  • 자원 소모적, 개별 메모리 차지
  • 동기화 작업이 필요하지 않는다.

멀티 스레드

  • 한 어플리케이션에 대한 처리 방식의 일종
  • 한 프로세스 내에서 구분지어진 실행 단위
  • 프로세스 내 작업을 여러 개의 스레드로 처리하는 기법
  • 서로 자원을 공유하기 때문에 효율성이 높다.
  • 동시성
    • 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
    • 서로 독립적인 적업들을 작은 단위로 나누고 동시에 실행되는 것 처럼 보여주는 것
  • 스레드끼리 긴밀하게 연결되어 있다.
  • 공유된 자원으로 통신 비용 절감
  • 공유된 자원으로 메모리가 효율적
  • 컨텍스트 스위칭 비용이 적다.
  • 공유 자원 관리를 해야한다.

Context Switching 컨텍스트 스위칭

프로세스의 컨텍스트 스위칭

  • 프로세스의 상태를 교체하는 작업 (실행 ↔ 준비)

스레드의 컨텍스트 스위칭

  • 공용으로 사용할 것들을 공유 사용

Multi-core

  • 멀티 프로세스와 멀티 스레드는 소프트웨어 분야적 처리 방식의 일종
    • Concurrency 동시성
      • 하나의 코어에서 하나 이상의 프로세스 혹은 스레드가 번갈아가면서 진행되지만 동시에 진행되는 것처럼 보이는 것
  • 멀티 코어는 조금 더 하드웨어의 측면에 가깝다.
    • Parallelism 병렬 처리
      • 동시에 하나 이상의 프로세스 혹은 스레드가 한꺼번에 진행
      • 물리적으로 여러 코어를 사용해서 다수의 실행 단위를 한 순간에 처리
profile
🧑🏻‍💻 Hello World!

0개의 댓글