Process와 Thread

프로세스(Process)란?

  • 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스
  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위
  • 동적인 개념으로는 실행된 프로그램을 의미

프로세스는 실행될 때, 운영체제로부터 시스템 자원을 할당 받는다고 했습니다.

프로세스는 운영체제로부터 각각의 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당받습니다.

Process

메모리 영역에서의 정의

Code : 코드 자체를 구성하는 메모리 영역으로 Hex파일이나 BIN파일을 가르킨다.

Data : 전역변수(global), 정적변수(static), 배열(array), 구조체(structure)등이 저장된다.

프로그램이 실행 될 때 생성되고 프로그램이 종료되면 시스템에 반환된다.

​ 함수 내부에 선언된 Static변수는 프로그램이 실행 될 때 공간만 할당되고, 그 함수가 실행될때 초기화 된다.

Heap : 필요에 의해 동적으로 메모리를 할당하고자 할 때 위치하는 메모리 영역으로 동적 데이터 영역이라고 부르며, 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.

Stack : 프로그램이 자동으로 사용하는 임시 메모리 영역이다.

​ 지역변수(local), 매개변수(parameter), 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역이다.

함수 호출 시 생성되고, 함수가 끝나면 시스템에 반환된다.

그리고, 하나의 프로세스가 생성될 때, 하나의 쓰레드가 같이 생성됩니다.

이를 메인 쓰레드라고 부릅니다.

쓰레드 (Thread)란?

  • 프로세스 내에서 실행되는 여러 흐름의 단위
  • 프로세스의 특정한 수행 경로
  • 프로세스가 할당받은 자원을 이용하는 실행의 단위

Process1

일반적으로는 프로세스간의 자원은 접근은 불가능합니다.

한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신(IPC, Inter-Process-Communication)을 사용해야합니다.

여기서, 하나의 쓰레드를 더 생성하게 된다면 다음과 같은 모습이 됩니다.

Thread

쓰레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유합니다. 쓰레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 쓰레드끼리 공유하면서 실행됩니다.