프로세스(Process)와 스레드(Thread)

업데이트:


프로세스와 스레드

프로그램(Program)

개념

  • 어떤 작업을 실행 할 수 있는 실행파일이다.

예시

  • 실행할 수 있는 마리오 게임 (mario.exe)


프로세스(Process)

개념

  • 연속적으로 실행되고 있는 컴퓨터 프로그램이다.
  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위이다.
  • 메모리에 올라와 실행되고 있는 프로그램의 하나의 인스턴스(독립적인 개체)이다.

multi-process

process-thread

특징

  • 프로세스는 기본적으로 프로세스 당 최소 1개의 스레드(메인 스레드)를 가지고 있다.

  • 프로그램은 하나이지만 프로그램을 실행하는 프로세스(인스턴스)는 여러 개가 생길 수 있다.

  • 하나의 프로세스는 크게 코드영역(code), 데이터 영역(data), 스택 영역(stack), 힙 영역(heap) 4가지로 이루어져 있고, 독립된 메모리 영역이다.

  • 그러므로 하나의 프로세스가 다른 프로세스의 메모리에 직접 접근할 수 없고, IPC(Inter Process Communication)를 통해 프로세스 간 통신이 가능하다.

  • 운영체제에서 각각의 프로세스들을 PID(Process ID)로 지정하여 관리한다.

  • 작업관리자를 보면 실행중인 여러 프로세스들을 확인 할 수 있는데, 동시에 실행하는 것처럼 보이지만 실제로는 CPU가 여러 프로세스를 왔다갔다 하며 처리하는 Context Switching 방식으로 처리한다.

    process1

예시

  • 실행 된(실행 중인) 마리오 게임
  • 하나의 컴퓨터에 독립적으로 여러 마리오 게임을 실행 할 수 있다.
  • 프로세스는 개념적인 것이며, 실행되는 모든 작업들은 스레드가 처리하고 프로세스는 스레드의 모임이라고 할 수 있다.


스레드(Thread)

개념

  • 프로세스 내에서 실행되는 여러 흐름의 단위이다.

  • 프로세스가 할당받은 자원을 이용하는 실행의 단위라고도 할 수 있다.

  • 프로세스 하나에 자원을 공유하면서 일련의 과정 여러 개를 동시에 실행시킬 수 있는 것을 말한다.

    multi-thread

특징

  • 한 프로세스 내의 주소 공간이나 자원들을 대부분 공유한다.
  • 하나의 프로세스가 생성되면 하나의 메인 스레드가 같이 생성되며, 스레드를 추가로 생성하지 않는 한 모든 프로그램 코드는 메인 스레드에서 실행된다.
  • 하나의 프로세스는 여러 스레스를 가질 수 있으며 이를 멀티 스레드라고 한다.
  • 멀티 스레드의 구조를 보면 코드영역(code), 데이터영역(data), 힙영역(heap)을 공유하고, 스택영역(stack)만 독립적으로 할당받는다.
  • 동일한 프로세스 안에 있는 스레드들은 같은 힙 공간을 공유하기에, 한 스레드가 프로세스 자원을 변경하면 다른 스레드에서 변경 결과를 바로 볼 수 있고 동시에 영향을 받을 수 있다.
  • 메모리를 공유하기 때문에 동기화(Synchronization), 데드락(Deadlock) 등의 문제가 발생할 수 있어, 설게 및 제어를 잘 해야 한다.

스레드에서 다른 자원은 공유하고 스택만 독립적으로 할당하는 이유

  • 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다.
  • 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가되는 것이다.
  • 따라서 스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.

예시

  • 실행 중인 마리오 게임(프로세스)을 동작하기 위해 실행되는 일
  • 화면 출력, 사운드 출력, 통신, 조작 등 여러 스레드의 모임이 하나의 프로세스를 이룬다.


References

댓글남기기