Process and Thread


예시

출처: Henrik Frystyk, frystyk@info.cern.ch, July 1994

프로그램: 프로젝트 기획서

Process: 프로젝트 진행 중.

프로젝트를 진행하려면 회사(OS)에서 자원, 시간을 할당 받아야 함. (메모리에 올라감)

Thread: 홍보팀, 사업팀 마케팅 팀 등 프로젝트를 위해 동시에 일을 진행함. 할당된 자원을 같이 공유함.

프로그램: 브랜드 설립, 그 자체

Process: 가게를 차려 운영함.

가게를 차리려면 나라(OS)에서 땅에 인허가를 내줌(메모리에 올라감, 작업 영역 할당). 이 자리에서 영업하세요

Thread: 가게에서 영업을 위해 동시에 일을 진행함. 고객 응대, 매대 정리, 음식 만들기 등이 동시에 돌아감. 이때 가게 안의 자원을 같이 공유함. 다만, 독자 행동이 가능함.

Process

출처:https://jeonni.tistory.com/

  • 프로그램이 돌아가고 있는 상태.
    • 정적인 코드 덩어리인 프로그램을 실행시켜 정적인 프로그램이 된 상태.
    • 실행하기 위해선 OS가 메모리 공간을 할당해줘야 실행 가능.
  • 프로그램(코드 덩어리)이 실행될 때 즉시 CPU로 부터 할당받는 자원 영역, 자원을 할당받은 작업의 단위
  • 프로그램이 메모리에 올라와, 운영체제로부터 자원을 할당받고, 프로그램이 연속적으로 실행되고 있는 상태.
  • 특징
    1. 각각 독립된 메모리 영역 (Code, Data, Stack, Heap)을 할당 받음.
      1. 메모리의 구조
        1. 정적 영역
          1. Code: 명령 실행하는 코드, 명령어
          2. Data: 변수(Static, Global)
            1. 초기화안된 global, static 변수(bss)
            2. 초기화된 global, static 변수(.data)
            3. (.rodata) 섹션
        2. 동적 영역
          1. Heap: 동적 메모리 영역, 개발자가 관리하여 할당 해제 가능 (자바스크립트는 참조 타입 저장)
            • 개발자가 할당 후 수동으로 해제하지 않으면 누수 발생.
          2. Stack: 일시적인 데이터 (반환 값, 지역 변수 할당 및 해제, 매개 변수, 함수 호출 등)
            1. 자바스크립트는 원시타입을 콜스택에 저장함.

        출처:https://goodgid.github.io/Memory-Structure/

    2. 다른 프로세스에 접근하려면 IPC,LPC등 을 이용해야 함.

Thread

출처:https://jeonni.tistory.com/

  • 정의 :
    • 프로세스 내에서 실행되는 여러 흐름의 단위
    • 하나의 프로세스에서 자원을 공유하면서 일련의 과정을 동시에 여러 개 실행시킬 수 있는 것.
    • 햄버거라는 프로세스 안에 스레드 1: 패티를 굽지, 스레드2, 빵을 굽기를 동시에 하는 것.
    • Code, Data, Heap을 공유하여 공통된 자원을 사용함. 다만, 레지스터, Stack,은 따로 갖고 있음.
      • 따라서 독립적인 함수 호출 → 독립적인 실행 흐름을 각 Thread가 가질 수 있음.
  • 특징
    1. 프로세스 내 여러 개 존재 가능
    2. 어떤 스레드가 자원을 변경하면, 다른 이웃 스레드가 변경 결과를 즉시 볼 수 있음.