티스토리 뷰

프로세스

메모리에 올라와 실행되고 있는 프로그램의 인스턴스

 

특징

  • 운영체제로부터 독립된 메모리 영역을 할당받는다.
    • 다른 프로세스의 자원에 접근하지 않음!
  • 프로세스들은 독립적이기 때문에 통신하기 위해 IPC를 사용해야 한다.
  • 프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있다.

 

문제점

  • 프로세스 생성에 큰 오버헤드가 있다. (프로세스를 생성할 때 많은 시간이 소요됨)
  • 프로세스 컨텍스트 스위칭의 비효율성, 오버헤드가 큼
  • 프로세스 사이에 통신이 어렵다는 점 (IPC 사용해야 함)

 


쓰레드

프로세스 내에서 할당받은 자원을 이용해 동작하는 실행 단위

 

출현 목적

  • 프로세스보다 크기가 작은 실행 단위 필요
  • 프로세스의 생성 및 소멸에 따른 오버헤드 감소
  • 빠른 컨텍스트 스위칭
  • 프로세스들의 통신 시간, 방법 어려움 해소

 

특징

  • 쓰레드는 프로세스 내에서 Stack만 따로 할당 받고, Code, Data, Heap 영역은 공유한다.
    • Stack을 분리한 이유는 Stack에는 함수의 호출 정보가 저장되는데, Stack을 공유하면 LIFO 구조에 의해 실행 순서가 복잡해지기 때문에 실행 흐름을 원활하게 만들기 위함이다.
    • 쓰레드는 프로세스의 자원을 공유하기 때문에 다른 쓰레드에 의한 결과를 즉시 확인할 수 있다.
    • 프로세스 내에 존재하여 프로세스가 할당받은 자원을 이용하여 실행된다.

 

주소공간

  • 하나의 스레드가 동작하기 위해 총 6개의 공간이 있다.
  • 시작공간
    • 스레드 코드 공간
    • 스레드 전용 전역변수 공간
    • 스택 공간
  • 공유공간
    • 데이터 공간
    • 힙 공간
  • 커널 스택

 


요약

  • 프로세스는 메모리 상에서 실행중인 프로그램을 말하며, 스레드는 이 프로세스 안에서 실행되는 흐름 단위를 말한다.
  • 프로세스는 최소 하나의 스레드를 보유하고 있으며, 각각 별도의 주소공간을 독립적으로 할당받는다.
  • 스레드는 이중에 stack만 따로 할당받고 나머지 영역은 스레드끼리 서로 공유한다.
  • 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하고 스레드는 다른 스레드와 공간과 자원을 공유하면서 사용한다.