프로세스와 스레드

Arong·2024년 5월 3일

프로세스

프로세스는 운영체제 위에서 연속적으로 실행되고 있는 프로그램을 의미한다.
각각의 프로세스들은 자원들이 정해져있다. 즉, 프로세스마다 할당된 메모리나 데이터들이 지정됨.

  • 코드(Code) 영역:
    코드 영역은 실행할 프로그램의 코드 및 매크로 상수가 기계어 형태로 저장되는 영역이다. CPU는 코드영역에 저장된 명령어를 하나씩 처리한다.
  • 데이터(Data) 영역:
    데이터 영역은 코드에서 선언한 전역 변수와 정적(static) 변수가 저장되는 영역이다. 데이터 영역은 프로그램의 시작과 함께 할당되어 종료될 때 소멸된다.
  • 스택(Stack) 영역:
    스택 영역은 함수 안에서 선언된 지역변수, 매개변수, 리턴값, 등이 저장되고 함수 호출시 기록하고 종료되면 제거한다. 스택이라는 자료구조 명칭에서도 알 수 있듯이 후위선출(LIFO) 메커니즘을 따른다.
    흔히 재귀함수를 통해 너무 많은 함수를 호출하게 되는 경우 스택 영역이 초과하면서 Stack Overflow(스택오버플로우)에러가 발생한다.
  • 힙(Heap) 영역:
    힙 영역은 관리가 가능한 데이터 이외의 다른 형태의 데이터를 관리하기 위한 공간(Free Space)이다. 이 공간은 동적 메모리 할당 공간이므로 사용이 끝나면 운영체제가 쓸수 있도록 반납해야 한다. 프로그램이 실행하는 순간 프로그램이 사용할 메모리 크기를 고려하여 메모리의 할당이 이루어지는 데이터 또는 스택과 같은 정적 메모리 할당과는 대조적이다. 동적 메모리 할당은 어느 시점에 어느 정도의 공간을 할당할 수 있을지 정확히게 예측할 수 없으므로, 런타임에 확인가능하다.

스레드

스레드는 한 프로세스 안에서 여러개가 동작할 수 있으며, 각각 해야하는 업무를 배정받는다(스택). 스레드는 자신들이 실행시켜야하는 함수의 호출을 기억해야하기 때문에 스레드마다 스택이 할당되어 있다. 정리하면, 스레드는 자신들이 일을 수행할 때 일의 흐름을 기억할 수 있는 고유의 스택이 지정돼 있지만 코드, 힙, 데이터같은 공통적인 리소스는 프로세스에 있기 때문에 스레드들은 프로세스에 공통적으로 할당된 리소스에 동시다발적으로 접속해서 업데이트 해야하므로 리소스들을 서로 공유하면서 사용한다.

프로세스와 스레드의 차이

프로세스는 실행될 때 운영체제로부터 각각 독립된 메모리 영역을 할당 받는다. 스레드는 한 프로세스 내에서 동작되는 흐름으로 프로세스 내에서 Stack 영역만 별도로 할당 받고, 부모 프로세스의 Code, Data, Heap 영역은 공유 한다. 즉, 프로세스내에서 자식 스레드들은 서로 주소 공간이나 자원들을 공유하면서 실행될 수 있다.




출처 : https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37

profile
아롱의 개발일지

0개의 댓글